fixed bug #845089
[fw/sdcc] / src / ds390 / ralloc.c
index 982021d8d1c1c7b5dd0dbae8c7144e491a09bd0c..042eb5009109fada2b0d36957caa48e67fdedada 100644 (file)
@@ -362,7 +362,7 @@ leastUsedLR (set * sset)
 
     }
 
-  setToNull ((void **) &sset);
+  setToNull ((void *) &sset);
   sym->blockSpil = 0;
   return sym;
 }
@@ -1671,7 +1671,7 @@ createRegMask (eBBlock ** ebbs, int count)
                          "createRegMask cannot find live range");
                  exit (0);
                }
-             
+#if 0
              /* special case for ruonly */
              if (sym->ruonly && sym->liveFrom != sym->liveTo) {
                  int size = getSize(sym->type);
@@ -1680,6 +1680,7 @@ createRegMask (eBBlock ** ebbs, int count)
                      ic->rMask = bitVectSetBit (ic->rMask, j++);
                  continue ;
              }
+#endif
              /* if no register assigned to it */
              if (!sym->nRegs || sym->isspilt)
                continue;
@@ -3025,6 +3026,10 @@ ds390_assignRegisters (eBBlock ** ebbs, int count)
   for (i = 0; i < count; i++)
     packRegisters (ebbs[i]);
 
+  /* liveranges probably changed by register packing
+     so we compute them again */
+  recomputeLiveRanges (ebbs, count);
+
   if (options.dump_pack)
     dumpEbbsToFileExt (DUMP_PACK, ebbs, count);
 
@@ -3080,8 +3085,8 @@ ds390_assignRegisters (eBBlock ** ebbs, int count)
   /* free up any _G.stackSpil locations allocated */
   applyToSet (_G.stackSpil, deallocStackSpil);
   _G.slocNum = 0;
-  setToNull ((void **) &_G.stackSpil);
-  setToNull ((void **) &_G.spiltSet);
+  setToNull ((void *) &_G.stackSpil);
+  setToNull ((void *) &_G.spiltSet);
   /* mark all registers as free */
   ds390_nRegs = 8;
   freeAllRegs ();