Try to fix the bots by detecting inconsistant branch-weight metadata.
authorManman Ren <mren@apple.com>
Fri, 14 Sep 2012 19:05:19 +0000 (19:05 +0000)
committerManman Ren <mren@apple.com>
Fri, 14 Sep 2012 19:05:19 +0000 (19:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163926 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/SimplifyCFG.cpp

index 2591dbf726227b5562d83727ab299f619eed6c0b..551df00a1ded437ec233af57a88b191cb2b2e92c 100644 (file)
@@ -830,18 +830,24 @@ bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI,
       bool PredHasWeights = HasBranchWeights(PTI);
       bool SuccHasWeights = HasBranchWeights(TI);
 
-      if (PredHasWeights)
+      if (PredHasWeights) {
         GetBranchWeights(PTI, Weights);
-      else if (SuccHasWeights)
+        // branch-weight metadata is inconsistant here.
+        if (Weights.size() != 1 + PredCases.size())
+          PredHasWeights = SuccHasWeights = false;
+      } else if (SuccHasWeights)
         // If there are no predecessor weights but there are successor weights,
         // populate Weights with 1, which will later be scaled to the sum of
         // successor's weights
         Weights.assign(1 + PredCases.size(), 1);
 
       SmallVector<uint64_t, 8> SuccWeights;
-      if (SuccHasWeights)
+      if (SuccHasWeights) {
         GetBranchWeights(TI, SuccWeights);
-      else if (PredHasWeights)
+        // branch-weight metadata is inconsistant here.
+        if (SuccWeights.size() != 1 + BBCases.size())
+          PredHasWeights = SuccHasWeights = false;
+      } else if (PredHasWeights)
         SuccWeights.assign(1 + BBCases.size(), 1);
 
       if (PredDefault == BB) {