associate assignment nodes that writes to the same height location with corresponding...
[IRC.git] / Robust / src / IR / Flat / BuildFlat.java
index c506e7ada8f3d1b1139f1431c0ef53005dde145c..bc6c613fbb23061fb9fb5a1ff35af84d7d4d986b 100644 (file)
@@ -688,6 +688,7 @@ public class BuildFlat {
 
       FlatSetFieldNode fsfn=new FlatSetFieldNode(dst_tmp, fan.getField(), src_tmp);
       fsfn.setNumLine(en.getNumLine());
+      addMapNode2FlatNodeSet(an,fsfn);
       last.addNext(fsfn);
       last=fsfn;
       if (pre) {
@@ -783,6 +784,7 @@ public class BuildFlat {
         last.addNext(fon2);
         last=fon2;
       }
+      addMapNode2FlatNodeSet(an,last);
       return new NodePair(first, last);
     } else if (an.getDest().kind()==Kind.NameNode) {
       //We could be assigning a field or variable
@@ -849,6 +851,7 @@ public class BuildFlat {
 
         FlatSetFieldNode fsfn=new FlatSetFieldNode(dst_tmp, fan.getField(), src_tmp);
         fsfn.setNumLine(en.getNumLine());
+        addMapNode2FlatNodeSet(an,fsfn);
         last.addNext(fsfn);
         last=fsfn;
         if (pre) {
@@ -921,6 +924,7 @@ public class BuildFlat {
             fsfn=new FlatSetFieldNode(getTempforVar(nn.getVar()), nn.getField(), src_tmp);
             fsfn.setNumLine(nn.getNumLine());
           }
+          addMapNode2FlatNodeSet(an,fsfn);
           if (first==null) {
             first=fsfn;
           } else {
@@ -987,6 +991,7 @@ public class BuildFlat {
 
           FlatOpNode fon=new FlatOpNode(getTempforVar(nn.getVar()), src_tmp, null, new Operation(Operation.ASSIGN));
           fon.setNumLine(an.getNumLine());
+          addMapNode2FlatNodeSet(an,fon);
 
           last.addNext(fon);
           last=fon;
@@ -1608,6 +1613,11 @@ public class BuildFlat {
     return new NodePair(fgrn, fgrn);
   }
 
+  private NodePair flattenGenDefReachNode(GenDefReachNode gdrn) {
+    FlatGenDefReachNode fgdrn = new FlatGenDefReachNode(gdrn.getOutputName() );
+    return new NodePair(fgdrn, fgdrn);
+  }
+
   private NodePair flattenSESENode(SESENode sn) {
     if( sn.isStart() ) {
       FlatSESEEnterNode fsen=new FlatSESEEnterNode(sn);
@@ -1761,6 +1771,9 @@ public class BuildFlat {
     case Kind.GenReachNode:
       return flattenGenReachNode((GenReachNode)bsn);
 
+    case Kind.GenDefReachNode:
+      return flattenGenDefReachNode((GenDefReachNode)bsn);
+
     case Kind.ContinueBreakNode:
       return flattenContinueBreakNode((ContinueBreakNode)bsn);
     }