Make PRE actually handle critical edges (by splitting them).  Confirmed that bootstrap passes with this change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53762 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp
index 4e4d8c1..c664546 100644
--- a/lib/Transforms/Scalar/GVN.cpp
+++ b/lib/Transforms/Scalar/GVN.cpp
@@ -1136,8 +1136,11 @@
     changed |= shouldContinue;
   }
   
-  if (EnablePRE)
-    changed |= performPRE(F);
+  if (EnablePRE) {
+    bool PREChanged = false;
+    while (PREChanged = performPRE(F))
+      changed |= PREChanged;
+  }
   
   return changed;
 }
@@ -1336,7 +1339,7 @@
        I = toSplit.begin(), E = toSplit.end(); I != E; ++I)
     SplitCriticalEdge(I->first, I->second, this);
   
-  return changed;
+  return changed || toSplit.size();
 }
 
 // iterateOnFunction - Executes one iteration of GVN