projects
/
fw
/
sdcc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Changed z80 to use loop induction. Updated libs to use no induction when it is better.
[fw/sdcc]
/
src
/
SDCCcse.c
diff --git
a/src/SDCCcse.c
b/src/SDCCcse.c
index 126addff5460ee3e38c235980e49104b3c936d0b..456db5121be50cd3eef6a068f2285b2999c3e201 100644
(file)
--- a/
src/SDCCcse.c
+++ b/
src/SDCCcse.c
@@
-300,7
+300,9
@@
DEFSETFUNC (findCheaperOp)
IS_ITEMP (IC_RESULT (cdp->diCode)))
*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) &&
{
if ((isGlobalInNearSpace (cop) &&
@@
-327,7
+329,7
@@
DEFSETFUNC (findCheaperOp)
return 1;
}
return 1;
}
-
+ *opp=NULL;
return 0;
}
return 0;
}
@@
-819,7
+821,7
@@
algebraicOpts (iCode * ic)
SET_ISADDR (IC_RESULT (ic), 0);
}
/* if casting to the same */
SET_ISADDR (IC_RESULT (ic), 0);
}
/* if casting to the same */
- if (c
heck
Type (operandType (IC_RESULT (ic)),
+ if (c
ompare
Type (operandType (IC_RESULT (ic)),
operandType (IC_RIGHT (ic))) == 1)
{
ic->op = '=';
operandType (IC_RIGHT (ic))) == 1)
{
ic->op = '=';
@@
-867,6
+869,8
@@
updateSpillLocation (iCode * ic)
if (!IC_RIGHT (ic)->noSpilLoc &&
!IS_VOLATILE (setype) &&
!IN_FARSPACE (SPEC_OCLS (setype)) &&
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)) =
!OTHERS_PARM (OP_SYMBOL (IC_RESULT (ic))))
SPIL_LOC (IC_RIGHT (ic)) =
@@
-884,6
+888,8
@@
updateSpillLocation (iCode * ic)
if (!IC_RIGHT (ic)->noSpilLoc &&
!IS_VOLATILE (setype) &&
!IN_FARSPACE (SPEC_OCLS (setype)) &&
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)) =
!OTHERS_PARM (OP_SYMBOL (IC_RESULT (ic))))
SPIL_LOC (IC_RIGHT (ic)) =
@@
-1159,9
+1165,9
@@
deleteGetPointers (set ** cseSet, set ** pss, operand * op, eBBlock * ebb)
iTemp1 = iTemp0 + 8;
iTemp2 = iTemp1 + 8; */
if (isinSetWith (compItems, (void*)IC_LEFT (cdp->diCode),
iTemp1 = iTemp0 + 8;
iTemp2 = iTemp1 + 8; */
if (isinSetWith (compItems, (void*)IC_LEFT (cdp->diCode),
- (
void*
)isOperandEqual) ||
+ (
insetwithFunc
)isOperandEqual) ||
isinSetWith (compItems, (void*)IC_RIGHT (cdp->diCode),
isinSetWith (compItems, (void*)IC_RIGHT (cdp->diCode),
- (
void*
)isOperandEqual))
+ (
insetwithFunc
)isOperandEqual))
{
addSet (&compItems, IC_RESULT (cdp->diCode));
}
{
addSet (&compItems, IC_RESULT (cdp->diCode));
}
@@
-1222,7
+1228,7
@@
fixUpTypes (iCode * ic)
/* for pointer_gets if the types of result & left r the
same then change it type of result to next */
if (IS_PTR (t1) &&
/* for pointer_gets if the types of result & left r the
same then change it type of result to next */
if (IS_PTR (t1) &&
- c
heck
Type (t2 = operandType (IC_RESULT (ic)), t1) == 1)
+ c
ompare
Type (t2 = operandType (IC_RESULT (ic)), t1) == 1)
{
setOperandType (IC_RESULT (ic), t2->next);
}
{
setOperandType (IC_RESULT (ic), t2->next);
}
@@
-1494,7
+1500,7
@@
cseBBlock (eBBlock * ebb, int computeOnly,
!computeOnly)
{
applyToSet (cseSet, findPrevIc, ic, &pdic);
!computeOnly)
{
applyToSet (cseSet, findPrevIc, ic, &pdic);
- if (pdic && c
heck
Type (operandType (IC_RESULT (pdic)),
+ if (pdic && c
ompare
Type (operandType (IC_RESULT (pdic)),
operandType (IC_RESULT (ic))) != 1)
pdic = NULL;
}
operandType (IC_RESULT (ic))) != 1)
pdic = NULL;
}