Added simple static array init test
[fw/sdcc] / src / SDCCcse.c
index b02adc0e708917510a9424c6d523ec99fc410ac5..8787bd48405ab9bb5dbf51b80f67e492eb200714 100644 (file)
@@ -300,7 +300,9 @@ DEFSETFUNC (findCheaperOp)
       IS_ITEMP (IC_RESULT (cdp->diCode)))
     *opp = IC_RESULT (cdp->diCode);
 
-  if ((*opp)&&(SPEC_USIGN(operandType (cop))==SPEC_USIGN(operandType (*opp))))
+  if ((*opp) && 
+      (SPEC_USIGN(operandType (cop))==SPEC_USIGN(operandType (*opp))) &&
+      (SPEC_LONG(operandType (cop))==SPEC_LONG(operandType (*opp))))
     {
 
       if ((isGlobalInNearSpace (cop) &&
@@ -819,7 +821,7 @@ algebraicOpts (iCode * ic)
          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 = '=';
@@ -864,9 +866,11 @@ updateSpillLocation (iCode * ic)
 
       setype = getSpec (operandType (IC_RESULT (ic)));
 
-      if (!IC_RIGHT (ic)->noSpilLoc &&
+      if (!OP_SYMBOL(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)) =
@@ -881,9 +885,11 @@ updateSpillLocation (iCode * ic)
 
       setype = getSpec (operandType (IC_RESULT (ic)));
 
-      if (!IC_RIGHT (ic)->noSpilLoc &&
+      if (!OP_SYMBOL(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)) =
@@ -1117,7 +1123,7 @@ constFold (iCode * ic, set * cseSet)
   if (IS_ITEMP (IC_RESULT (ic)))
     {
       SPIL_LOC (IC_RESULT (ic)) = NULL;
-      IC_RESULT (ic)->noSpilLoc = 1;
+      OP_SYMBOL(IC_RESULT (ic))->noSpilLoc = 1;
     }
 
 
@@ -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), 
-                          (void*)isOperandEqual) ||
+                          (insetwithFunc)isOperandEqual) ||
              isinSetWith (compItems, (void*)IC_RIGHT (cdp->diCode), 
-                          (void*)isOperandEqual))
+                          (insetwithFunc)isOperandEqual))
            {
              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) &&
-      checkType (t2 = operandType (IC_RESULT (ic)), t1) == 1)
+      compareType (t2 = operandType (IC_RESULT (ic)), t1) == 1)
     {
       setOperandType (IC_RESULT (ic), t2->next);
     }
@@ -1494,7 +1500,7 @@ cseBBlock (eBBlock * ebb, int computeOnly,
          !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;
        }