From 2a89c94df649fcf5e4f6569d1ededdb5d130bd31 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Fri, 5 Jun 2015 09:31:20 +0000 Subject: [PATCH] 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 --- .../InstCombine/InstCombineSelect.cpp | 24 +++---------------- test/Transforms/InstCombine/select.ll | 10 -------- 2 files changed, 3 insertions(+), 31 deletions(-) diff --git a/lib/Transforms/InstCombine/InstCombineSelect.cpp b/lib/Transforms/InstCombine/InstCombineSelect.cpp index 4dec1542495..d2fbcdd3991 100644 --- a/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -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(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(B)) { - B->setHasNoSignedWrap(false); - B->setHasNoUnsignedWrap(false); - } - if (isa(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. diff --git a/test/Transforms/InstCombine/select.ll b/test/Transforms/InstCombine/select.ll index b05f2ca2c4c..e4bc96cff17 100644 --- a/test/Transforms/InstCombine/select.ll +++ b/test/Transforms/InstCombine/select.ll @@ -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 -}