Revert "[InstCombine] Don't miscompile safe increment idiom"

This is breaking a lot of build bots and is causing very long-running
compiles (infinite loops)?

Likely, we shouldn't return nullptr?

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239139 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Jasper 2015-06-05 09:31:20 +00:00
parent 8beac08b74
commit 2a89c94df6
2 changed files with 3 additions and 31 deletions

View File

@ -292,28 +292,10 @@ static Value *SimplifyWithOpReplaced(Value *V, Value *Op, Value *RepOp,
// If this is a binary operator, try to simplify it with the replaced op.
if (BinaryOperator *B = dyn_cast<BinaryOperator>(I)) {
Value *Simplified = nullptr;
if (B->getOperand(0) == Op)
Simplified =
SimplifyBinOp(B->getOpcode(), RepOp, B->getOperand(1), DL, TLI);
if (!Simplified && B->getOperand(1) == Op)
Simplified =
SimplifyBinOp(B->getOpcode(), B->getOperand(0), RepOp, DL, TLI);
if (Simplified) {
// 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.
if (isa<OverflowingBinaryOperator>(B)) {
B->setHasNoSignedWrap(false);
B->setHasNoUnsignedWrap(false);
}
if (isa<PossiblyExactOperator>(B))
B->setIsExact(false);
}
return Simplified;
return SimplifyBinOp(B->getOpcode(), RepOp, B->getOperand(1), DL, TLI);
if (B->getOperand(1) == Op)
return SimplifyBinOp(B->getOpcode(), B->getOperand(0), RepOp, DL, TLI);
}
// Same for CmpInsts.

View 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
}