bug fix for Atomic5.java testcase
authoradash <adash>
Mon, 31 Mar 2008 01:12:35 +0000 (01:12 +0000)
committeradash <adash>
Mon, 31 Mar 2008 01:12:35 +0000 (01:12 +0000)
Robust/src/Analysis/Prefetch/PrefetchAnalysis.java
Robust/src/IR/Flat/BuildCode.java

index 252d210b6674ff2fa5ee305f582a16e457e52529..d2cbbe0d520f28c596e6b793c1567f41aaef5187 100644 (file)
@@ -573,7 +573,14 @@ public class PrefetchAnalysis {
                    continue;
                }
            }
-       } else {
+       } else if(currfopn.getRight()!=null && (currfopn.getOp().getOp() == Operation.SUB)) {
+        for(Enumeration ecld = child_prefetch_set_copy.keys();ecld.hasMoreElements();) {
+            PrefetchPair childpp = (PrefetchPair) ecld.nextElement();
+            if(childpp.containsTemp(currfopn.getDest())) {
+                child_prefetch_set_copy.remove(childpp);
+            }
+        }
+    } else {
            //FIXME Is not taken care of for cases like x = -y followed by a[x].i
        }
        
index ca80aa2ff0040e765ea4897078e432f185cfe4ce..ed503d7ef8f9739cb1b432ee76eb0084396c094e 100644 (file)
@@ -1545,12 +1545,12 @@ public class BuildCode {
                for(int j=0;j<id.tddesc.size();j++) {
                    indexcheck+=generateTemp(fm, id.getTempDescAt(j), lb)+"+";
                }
-               indexcheck+=id.offset+">0)&&(tmpindex<((struct ArrayObject *)prefptr)->___length___)";
+               indexcheck+=id.offset+">=0)&&(tmpindex<((struct ArrayObject *)prefptr)->___length___)";
 
                if (!teststr.equals(""))
                    teststr+="&&";
-               teststr+="prefptr="+basestr+"&&"+indexcheck;
-               basestr="((void **)(((char *) &(((struct ArrayObject*)prefptr)->___length___))+sizeof(int)))[tmpindex])";
+               teststr+="(((prefptr="+basestr+")!= NULL) &&"+indexcheck;
+               basestr="((void **)(((char *) &(((struct ArrayObject*)prefptr)->___length___))+sizeof(int)))[tmpindex]";
                maybenull=true;
                lasttype=lasttype.dereference();
            }
@@ -1560,7 +1560,7 @@ public class BuildCode {
        if (teststr.equals("")) {
            oid="((unsigned int)"+basestr+")";
        } else {
-           oid="((unsigned int)("+teststr+")?"+basestr+":NULL)";
+           oid="(unsigned int)("+teststr+")?"+basestr+":NULL)";
        }
        oids.add(oid);