Revert "[InstCombine] Rephrase fix to SimplifyWithOpReplaced"
authorRenato Golin <renato.golin@linaro.org>
Fri, 5 Jun 2015 18:24:12 +0000 (18:24 +0000)
committerRenato Golin <renato.golin@linaro.org>
Fri, 5 Jun 2015 18:24:12 +0000 (18:24 +0000)
This reverts commit r239141. This commit was an attempt to reintroduce
a previous patch that broke many self-hosting bots with clang timeouts,
but it still has slowdown issues, at least  on ARM, increasing the
compilation time (stage 2, clang's) by 5x.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239175 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstCombineSelect.cpp
test/Transforms/InstCombine/select.ll

index 68ddb27ec4a9e010c994ec14cbb5b94ce2ec230e..d2fbcdd39915c8d0cba67be02aa9e66945becba7 100644 (file)
@@ -598,24 +598,6 @@ Instruction *InstCombiner::visitSelectInstWithICmp(SelectInst &SI,
     }
   }
 
-  // Consider:
-  //   %cmp = icmp eq i32 %x, 2147483647
-  //   %add = add nsw i32 %x, 1
-  //   %sel = select i1 %cmp, i32 -2147483648, i32 %add
-  //
-  // We can't replace %sel with %add unless we strip away the flags.
-  auto StripBinOpFlags = [](Value *V) {
-    if (auto *B = dyn_cast<BinaryOperator>(V)) {
-      if (isa<OverflowingBinaryOperator>(B)) {
-        B->setHasNoSignedWrap(false);
-        B->setHasNoUnsignedWrap(false);
-      }
-      if (isa<PossiblyExactOperator>(B))
-        B->setIsExact(false);
-    }
-    return V;
-  };
-
   // If we have an equality comparison then we know the value in one of the
   // arms of the select. See if substituting this value into the arm and
   // simplifying the result yields the same value as the other arm.
@@ -624,23 +606,23 @@ Instruction *InstCombiner::visitSelectInstWithICmp(SelectInst &SI,
             TrueVal ||
         SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, TLI, DL, DT, AC) ==
             TrueVal)
-      return ReplaceInstUsesWith(SI, StripBinOpFlags(FalseVal));
+      return ReplaceInstUsesWith(SI, FalseVal);
     if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, TLI, DL, DT, AC) ==
             FalseVal ||
         SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, TLI, DL, DT, AC) ==
             FalseVal)
-      return ReplaceInstUsesWith(SI, StripBinOpFlags(FalseVal));
+      return ReplaceInstUsesWith(SI, FalseVal);
   } else if (Pred == ICmpInst::ICMP_NE) {
     if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, TLI, DL, DT, AC) ==
             FalseVal ||
         SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, TLI, DL, DT, AC) ==
             FalseVal)
-      return ReplaceInstUsesWith(SI, StripBinOpFlags(TrueVal));
+      return ReplaceInstUsesWith(SI, TrueVal);
     if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, TLI, DL, DT, AC) ==
             TrueVal ||
         SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, TLI, DL, DT, AC) ==
             TrueVal)
-      return ReplaceInstUsesWith(SI, StripBinOpFlags(TrueVal));
+      return ReplaceInstUsesWith(SI, TrueVal);
   }
 
   // NOTE: if we wanted to, this is where to detect integer MIN/MAX
index b05f2ca2c4c7f6bb7807039c00d7c40c97f3f649..e4bc96cff1764d419ceb279090bc0a956b2a2c89 100644 (file)
@@ -1532,13 +1532,3 @@ define i32 @test_max_of_min(i32 %a) {
   %s1 = select i1 %c1, i32 %s0, i32 -1
   ret i32 %s1
 }
-
-define i32 @PR23757(i32 %x) {
-; CHECK-LABEL: @PR23757
-; CHECK:      %[[add:.*]] = add i32 %x, 1
-; CHECK-NEXT: ret i32 %[[add]]
-  %cmp = icmp eq i32 %x, 2147483647
-  %add = add nsw i32 %x, 1
-  %sel = select i1 %cmp, i32 -2147483648, i32 %add
-  ret i32 %sel
-}