some -xstack related stuff
[fw/sdcc] / src / SDCClrange.c
index 7c71b130b3c4396277055e44c45302df25effd82..7e6ea7c05afe8ec004928f42e02704c3da15316b 100644 (file)
@@ -422,11 +422,11 @@ void markLiveRanges (eBBlock *ebp, eBBlock **ebbs, int count)
 
     /* for all the definitions in the block */
     /* compute and set the live from        */
-    if ( ebp->defSet && ! bitVectIsZero(ebp->defSet)) {
-       for ( i = 0 ; i < ebp->defSet->size ; i++ ) {
+    if ( ebp->ldefs && ! bitVectIsZero(ebp->ldefs)) {
+       for ( i = 0 ; i < ebp->ldefs->size ; i++ ) {
            iCode *dic;     
            
-           if (bitVectBitValue(ebp->defSet,i) &&          
+           if (bitVectBitValue(ebp->ldefs,i) &&           
                (dic = hTabItemWithKey(iCodehTab,i))) {
                
                /* if the definition has a from & it is greater */
@@ -514,9 +514,12 @@ void rlivePoint (eBBlock **ebbs, int count)
            for ( lrange = hTabFirstItem(liveRanges,&k); lrange;
                  lrange = hTabNextItem(liveRanges,&k)) {
 
+                   /* if it is live then add the lrange to ic->rlive */
                if (lrange->liveFrom <= ic->seq &&
-                   lrange->liveTo   >= ic->seq )
-                   ic->rlive = bitVectSetBit(ic->rlive,lrange->key);
+                   lrange->liveTo   >= ic->seq ) {
+                       lrange->isLiveFcall |= (ic->op == CALL || ic->op == PCALL || ic->op == SEND);
+                       ic->rlive = bitVectSetBit(ic->rlive,lrange->key);
+               }
            }
        }
     }