From: tecodev Date: Mon, 24 Apr 2006 19:06:03 +0000 (+0000) Subject: * src/pic/pcoderegs.c (OptimizeRegUsage): do not optimize X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=0136db3c77d87793d405d9ed3c67717cf57b5f1d;p=fw%2Fsdcc * src/pic/pcoderegs.c (OptimizeRegUsage): do not optimize registers that have not been assigned proper liveranges, fixes #1469504 and #1474602, (pCodeRegOptimizeRegUsage): fixed typo in comment git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4117 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index 20ae466a..07636de8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-04-24 Raphael Neider + + * src/pic/pcoderegs.c (OptimizeRegUsage): do not optimize + registers that have not been assigned proper liveranges, + fixes #1469504 and #1474602, + (pCodeRegOptimizeRegUsage): fixed typo in comment + 2006-04-24 Borut Razem * device/examples/main8051.c: deleted - it was removed from CVS diff --git a/src/pic/pcoderegs.c b/src/pic/pcoderegs.c index fd37229c..7b4d095a 100644 --- a/src/pic/pcoderegs.c +++ b/src/pic/pcoderegs.c @@ -732,11 +732,23 @@ void OptimizeRegUsage(set *fregs, int optimize_multi_uses, int optimize_level) fprintf(stderr,"Reg: %s\n",reg->name); */ + /* Catch inconsistently set-up live ranges + * (see tracker items #1469504 + #1474602) + * FIXME: Actually we should rather fix the + * computation of the liveranges instead... + */ + if (!reg || !reg->reglives.usedpFlows + || !reg->reglives.assignedpFlows) + { + //fprintf( stderr, "skipping reg w/o liveranges: %s\n", reg ? reg->name : "(unknown)"); + continue; + } + if(reg->type == REG_SFR || reg->type == REG_STK || reg->isPublic || reg->isExtern|| reg->isFixed) { //fprintf(stderr,"skipping SFR: %s\n",reg->name); continue; } - + pcfl_used = setFirstItem(reg->reglives.usedpFlows); pcfl_assigned = setFirstItem(reg->reglives.assignedpFlows); @@ -1672,7 +1684,7 @@ void pCodeRegOptimizeRegUsage(int level) #if 0 /* This is currently broken (need rewrite to correctly - * hamdle arbitrary pCodeOps instead of registers only). */ + * handle arbitrary pCodeOps instead of registers only). */ if (!pic14_options.disable_df) optimizeDataflow (); #endif