* src/pic/pcoderegs.c (OptimizeRegUsage): do not optimize
authortecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 24 Apr 2006 19:06:03 +0000 (19:06 +0000)
committertecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 24 Apr 2006 19:06:03 +0000 (19:06 +0000)
    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

ChangeLog
src/pic/pcoderegs.c

index 20ae466a6b337fc68c29b8054724c86d48d3f88d..07636de8d7e9b0a83244a9f99f3bfe07096f6f42 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-04-24 Raphael Neider <rneider AT web.de>
+
+       * 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 <borut.razem AT siol.net>
 
        * device/examples/main8051.c: deleted - it was removed from CVS
index fd37229cd35623cae10e2c0946d24a1347e02907..7b4d095a320ba28f95de2ec5f490a9c160d2c398 100644 (file)
@@ -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