Fixed BUG #482929 - defs , uses & clashes should be cleared
[fw/sdcc] / src / SDCClrange.c
index 96287420938c673a72f8b208fad8b4c28330ba7d..df34ff86633348204b3f8350b4e6b50aa09774b6 100644 (file)
@@ -29,6 +29,7 @@
 int iCodeSeq = 0;
 hTab *liveRanges = NULL;
 hTab *iCodehTab = NULL;
+hTab *iCodeSeqhTab = NULL;
 
 /*-----------------------------------------------------------------*/
 /* sequenceiCode - creates a sequence number for the iCode & add   */
@@ -48,6 +49,7 @@ sequenceiCode (eBBlock ** ebbs, int count)
          ic->seq = ++iCodeSeq;
          ic->depth = ebbs[i]->depth;
          hTabAddItem (&iCodehTab, ic->key, ic);
+         hTabAddItem (&iCodeSeqhTab, ic->seq, ic);
        }
       ebbs[i]->lSeq = iCodeSeq;
     }
@@ -309,7 +311,7 @@ operandLUse (operand * op, eBBlock ** ebbs,
              if (lic->op == CALL || lic->op == PCALL) break;
          }
          /* found it : mark */
-         if (lic) torange = lic->seq;
+         if (lic) torange = lic->prev->seq;
       }
       /* if this is the last use then if this block belongs 
          to a  loop &  some definition  comes into the loop 
@@ -580,6 +582,7 @@ rlivePoint (eBBlock ** ebbs, int count)
                    ic->rlive = bitVectSetBit (ic->rlive, lrange->key);
                }
            }
+#if 0
            /* overlapping live ranges should be eliminated */
            if (ASSIGN_ITEMP_TO_ITEMP (ic)) {
                if (SPIL_LOC(IC_RIGHT(ic)) == SPIL_LOC(IC_RESULT(ic))   && /* left & right share the same spil location */
@@ -590,6 +593,7 @@ rlivePoint (eBBlock ** ebbs, int count)
                    SPIL_LOC(IC_RIGHT(ic)) = NULL; /* then cannot share */
                }
            }
+#endif
        }
     }
 }
@@ -663,6 +667,8 @@ computeLiveRanges (eBBlock ** ebbs, int count)
   iCodeSeq = 0;
   setToNull ((void **) &iCodehTab);
   iCodehTab = newHashTable (iCodeKey);
+  setToNull ((void **) &iCodeSeqhTab);
+  iCodeSeqhTab = newHashTable (iCodeKey);
   sequenceiCode (ebbs, count);
 
   /* call routine to mark the from & to live ranges for