+
+ if (ic->op == IFX && IS_SYMOP(IC_COND(ic)))
+ {
+ incUsed (ic, IC_COND(ic));
+
+ if (!IS_ITEMP(IC_COND(ic)))
+ continue;
+
+ findPrevUse (ebbs[i], ic->prev, IC_COND(ic), ebbs, count);
+ unvisitBlocks (ebbs, count);
+ ic->rlive = bitVectSetBit (ic->rlive, IC_COND(ic)->key);
+ findNextUse (ebbs[i], ic->next, IC_COND(ic));
+
+ continue;
+ }
+
+ if (IS_SYMOP(IC_LEFT(ic)))
+ {
+ incUsed (ic, IC_LEFT(ic));
+ if (IS_ITEMP(IC_LEFT(ic)))
+ {
+
+ findPrevUse (ebbs[i], ic->prev, IC_LEFT(ic), ebbs, count);
+ unvisitBlocks(ebbs, count);
+ ic->rlive = bitVectSetBit (ic->rlive, IC_LEFT(ic)->key);
+ findNextUse (ebbs[i], ic->next, IC_LEFT(ic));
+
+ /* if this is a send extend the LR to the call */
+ if (ic->op == SEND)
+ {
+ iCode *lic;
+ for (lic = ic; lic; lic = lic->next)
+ {
+ if (lic->op == CALL || lic->op == PCALL)
+ {
+ markAlive (ic, lic->prev, IC_LEFT (ic)->key);
+ break;
+ }
+ }
+ }
+ }
+// fprintf(stderr, "%s:%d IS_SYMOP left\t", __FILE__, __LINE__);printOperand(IC_LEFT(ic), stderr);
+// fprintf(stderr, "\n");
+ }
+
+ if (IS_SYMOP(IC_RIGHT(ic)))
+ {
+ incUsed (ic, IC_RIGHT(ic));
+ if (IS_ITEMP(IC_RIGHT(ic)))
+ {
+ findPrevUse (ebbs[i], ic->prev, IC_RIGHT(ic), ebbs, count);
+ unvisitBlocks(ebbs, count);
+ ic->rlive = bitVectSetBit (ic->rlive, IC_RIGHT(ic)->key);
+ findNextUse (ebbs[i], ic->next, IC_RIGHT(ic));
+ }
+// fprintf(stderr, "%s:%d IS_SYMOP right\t", __FILE__, __LINE__);printOperand(IC_RIGHT(ic), stderr);
+// fprintf(stderr, "\n");
+ }
+
+ if (POINTER_SET(ic) && IS_SYMOP(IC_RESULT(ic)))
+ incUsed (ic, IC_RESULT(ic));
+
+ if (IS_ITEMP(IC_RESULT(ic)))
+ {
+ if (POINTER_SET(ic))
+ {
+ findPrevUse (ebbs[i], ic->prev, IC_RESULT(ic), ebbs, count);
+ }
+ unvisitBlocks(ebbs, count);
+ ic->rlive = bitVectSetBit (ic->rlive, IC_RESULT(ic)->key);
+ findNextUse (ebbs[i], ic->next, IC_RESULT(ic));
+ }
+
+ if (!POINTER_SET(ic) && IC_RESULT(ic))
+ ic->defKey = IC_RESULT(ic)->key;
+
+ }
+
+ /* check all symbols that are alive in the last instruction */
+ /* but are not alive in all successors */
+
+ succ = setFirstItem (ebbs[i]->succList);
+ if (!succ)
+ continue;
+
+ alive = succ->sch->rlive;
+ while ((succ = setNextItem (ebbs[i]->succList)))
+ {
+ if (succ->sch)
+ alive = bitVectIntersect (alive, succ->sch->rlive);