bug fixes and refactoring to have more smooth integration of loopOptimize and loopTer...
authoryeom <yeom>
Fri, 1 Jul 2011 18:48:51 +0000 (18:48 +0000)
committeryeom <yeom>
Fri, 1 Jul 2011 18:48:51 +0000 (18:48 +0000)
Robust/src/Analysis/Loops/LoopOptimize.java
Robust/src/Analysis/SSJava/DefinitelyWrittenCheck.java
Robust/src/Analysis/SSJava/SSJavaAnalysis.java
Robust/src/Main/Main.java

index 5b111ca3b7feb46a91012d927be562a0fe31ab51..8a096572a5d22874e51a9fa2881cf7232e2fe74d 100644 (file)
@@ -20,6 +20,7 @@ public class LoopOptimize {
   private GlobalFieldType gft;
   private TypeUtil typeutil;
   private Map<FlatMethod, LoopInvariant> fm2loopinv;
+  private LoopTerminate lt;
   
   private Hashtable<FlatNode, FlatNode> ntoomap;
   private Hashtable<FlatNode, FlatNode> clonemap;
@@ -30,12 +31,14 @@ public class LoopOptimize {
     this.typeutil = typeutil;
     fm2loopinv = new HashMap<FlatMethod, LoopInvariant>();
   }
-
-  public void optimize(FlatMethod fm) {
+  
+  public void analyze(FlatMethod fm){
     loopinv = new LoopInvariant(typeutil, gft);
     loopinv.analyze(fm);
     fm2loopinv.put(fm, loopinv);
-    
+  }
+  
+  public void optimize(FlatMethod fm) {
     ntoomap=new Hashtable<FlatNode, FlatNode>();
     map=new Hashtable<FlatNode, FlatNode>();
     clonemap=new Hashtable<FlatNode, FlatNode>();
index ec404bd9e818678ac1bd68d1cd9edb5a31ed73bf..d99f44f4ee978c9c21fde04bfea999c5f1cb909c 100644 (file)
@@ -77,8 +77,10 @@ public class DefinitelyWrittenCheck {
   }
 
   public void definitelyWrittenCheck() {
-    methodReadOverWriteAnalysis();
-    writtenAnalyis();
+    if (!ssjava.getAnnotationRequireSet().isEmpty()) {
+      methodReadOverWriteAnalysis();
+      writtenAnalyis();
+    }
   }
 
   private void writtenAnalyis() {
index f5357f353ce486df2e9718523e1117539f989994..ac27f7c3b74d97f1980c3cf9711463babfec63c6 100644 (file)
@@ -277,6 +277,11 @@ public class SSJavaAnalysis {
     return annotationRequireSet;
   }
 
+  public void doLoopTerminationCheck(LoopOptimize lo, FlatMethod fm) {
+    LoopTerminate lt = new LoopTerminate();
+    lt.terminateAnalysis(fm, lo.getLoopInvariant(fm));
+  }
+
   public void doLoopTerminationCheck(LoopOptimize lo) {
     LoopTerminate lt = new LoopTerminate();
     for (Iterator iterator = annotationRequireSet.iterator(); iterator.hasNext();) {
index c2bc4eb0cc620542210a1461621817b87c86b722..d48ad48b9335162894b498f6761eafdaff167eae 100644 (file)
@@ -508,8 +508,15 @@ public class Main {
             continue;
           cp.optimize(fm);
           dc.optimize(fm);
-          if (!state.NOLOOP)
+          if (!state.NOLOOP){            
+            lo.analyze(fm);
+            if(state.SSJAVA){
+              ssjava.doLoopTerminationCheck(lo,fm);
+            }
             lo.optimize(fm);
+          }
+            
+          
           cp.optimize(fm);
           dc.optimize(fm);
           lcse.doAnalysis(fm);
@@ -522,9 +529,6 @@ public class Main {
       }
       State.logEvent("Done Optimizing");
       
-      if(state.SSJAVA) {
-        ssjava.doLoopTerminationCheck(lo);
-      }
     }
 
     if (state.FLATIRGRAPH) {