/* do a special check this will help in */
/* constant propagation & dead code elim */
/* for assignments only */
- if (cdp->diCode->op == '=')
- {
- /* if the result is volatile then return result */
- if (IS_OP_VOLATILE (IC_RESULT (cdp->diCode)))
- *opp = IC_RESULT (cdp->diCode);
- else
- /* if this is a straight assignment and
- left is a temp then prefer the temporary to the
- true symbol */
- if (!POINTER_SET (cdp->diCode) &&
- IS_ITEMP (IC_RESULT (cdp->diCode)) &&
- IS_TRUE_SYMOP (IC_RIGHT (cdp->diCode)))
+ if (cdp->diCode->op == '=') {
+ /* if the result is volatile then return result */
+ if (IS_OP_VOLATILE (IC_RESULT (cdp->diCode)))
+ *opp = IC_RESULT (cdp->diCode);
+ else
+ /* if this is a straight assignment and
+ left is a temp then prefer the temporary to the
+ true symbol */
+ if (!POINTER_SET (cdp->diCode) &&
+ IS_ITEMP (IC_RESULT (cdp->diCode)) &&
+ IS_TRUE_SYMOP (IC_RIGHT (cdp->diCode)))
*opp = IC_RESULT (cdp->diCode);
- else
+ else {
/* if straight assignement && and both
are temps then prefer the one that
will not need extra space to spil, also
take into consideration if right side
an induction variable
- */
+ */
if (!POINTER_SET (cdp->diCode) &&
IS_ITEMP (IC_RESULT (cdp->diCode)) &&
IS_ITEMP (IC_RIGHT (cdp->diCode)) &&
SPIL_LOC (IC_RESULT (cdp->diCode))) ||
(SPIL_LOC (IC_RESULT (cdp->diCode)) &&
SPIL_LOC (IC_RESULT (cdp->diCode)) ==
- SPIL_LOC (IC_RIGHT (cdp->diCode))))
- )
- *opp = IC_RESULT (cdp->diCode);
- else
- *opp = IC_RIGHT (cdp->diCode);
- }
+ SPIL_LOC (IC_RIGHT (cdp->diCode)))))
+ *opp = IC_RESULT (cdp->diCode);
+ else
+ *opp = IC_RIGHT (cdp->diCode);
+ }
+ }
else
*opp = IC_RESULT (cdp->diCode);
}
IS_ITEMP (IC_RESULT (cdp->diCode)))
*opp = IC_RESULT (cdp->diCode);
- if (*opp)
+ if ((*opp) &&
+ (SPEC_USIGN(operandType (cop))==SPEC_USIGN(operandType (*opp))) &&
+ (SPEC_LONG(operandType (cop))==SPEC_LONG(operandType (*opp))))
{
if ((isGlobalInNearSpace (cop) &&
return 1;
}
-
+ *opp=NULL;
return 0;
}
SET_ISADDR (IC_RESULT (ic), 0);
}
/* if casting to the same */
- if (checkType (operandType (IC_RESULT (ic)),
+ if (compareType (operandType (IC_RESULT (ic)),
operandType (IC_RIGHT (ic))) == 1)
{
ic->op = '=';
if (!IC_RIGHT (ic)->noSpilLoc &&
!IS_VOLATILE (setype) &&
!IN_FARSPACE (SPEC_OCLS (setype)) &&
+ /* PENDING */
+ !TARGET_IS_Z80 &&
!OTHERS_PARM (OP_SYMBOL (IC_RESULT (ic))))
SPIL_LOC (IC_RIGHT (ic)) =
if (!IC_RIGHT (ic)->noSpilLoc &&
!IS_VOLATILE (setype) &&
!IN_FARSPACE (SPEC_OCLS (setype)) &&
+ /* PENDING */
+ !TARGET_IS_Z80 &&
!OTHERS_PARM (OP_SYMBOL (IC_RESULT (ic))))
SPIL_LOC (IC_RIGHT (ic)) =
list . This will take care of situations like
iTemp1 = iTemp0 + 8;
iTemp2 = iTemp1 + 8; */
- if (isinSetWith (compItems, IC_LEFT (cdp->diCode), isOperandEqual) ||
- isinSetWith (compItems, IC_RIGHT (cdp->diCode), isOperandEqual))
+ if (isinSetWith (compItems, (void*)IC_LEFT (cdp->diCode),
+ (insetwithFunc)isOperandEqual) ||
+ isinSetWith (compItems, (void*)IC_RIGHT (cdp->diCode),
+ (insetwithFunc)isOperandEqual))
{
addSet (&compItems, IC_RESULT (cdp->diCode));
}
{
sym_link *t1 = operandType (IC_LEFT (ic)), *t2;
- if (IS_DS390_PORT)
+ if (TARGET_IS_DS390)
{
/* hack-o-matic! */
return;
/* for pointer_gets if the types of result & left r the
same then change it type of result to next */
if (IS_PTR (t1) &&
- checkType (t2 = operandType (IC_RESULT (ic)), t1) == 1)
+ compareType (t2 = operandType (IC_RESULT (ic)), t1) == 1)
{
setOperandType (IC_RESULT (ic), t2->next);
}
!computeOnly)
{
applyToSet (cseSet, findPrevIc, ic, &pdic);
- if (pdic && checkType (operandType (IC_RESULT (pdic)),
+ if (pdic && compareType (operandType (IC_RESULT (pdic)),
operandType (IC_RESULT (ic))) != 1)
pdic = NULL;
}