[InstCombine] Fix PR23751.
authorSanjoy Das <sanjoy@playingwithpointers.com>
Fri, 5 Jun 2015 18:04:42 +0000 (18:04 +0000)
committerSanjoy Das <sanjoy@playingwithpointers.com>
Fri, 5 Jun 2015 18:04:42 +0000 (18:04 +0000)
PR23751 was caused by a missing ``break;`` in r234388.

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

lib/Transforms/InstCombine/InstCombineCompares.cpp
test/Transforms/InstCombine/pr23751.ll [new file with mode: 0644]

index 2dafa58d305e783a8fe7d488e5498223f9e1fc25..ab0d1b10c2455f5cf11dcfa30b6b4176dbb84189 100644 (file)
@@ -2149,6 +2149,7 @@ bool InstCombiner::OptimizeOverflowCheck(OverflowCheckFlavor OCF, Value *LHS,
       if (WillNotOverflowSignedAdd(LHS, RHS, OrigI))
         return SetResult(Builder->CreateNSWAdd(LHS, RHS), Builder->getFalse(),
                          true);
+    break;
   }
 
   case OCF_UNSIGNED_SUB:
diff --git a/test/Transforms/InstCombine/pr23751.ll b/test/Transforms/InstCombine/pr23751.ll
new file mode 100644 (file)
index 0000000..d7840be
--- /dev/null
@@ -0,0 +1,13 @@
+; RUN: opt -instcombine -S < %s | FileCheck %s
+
+@d = common global i32 0, align 4
+
+define i1 @f(i8 zeroext %p) #1 {
+; CHECK-NOT: ret i1 false
+  %1 = zext i8 %p to i32
+  %2 = load i32, i32* @d, align 4
+  %3 = or i32 %2, -2
+  %4 = add nsw i32 %3, %1
+  %5 = icmp ugt i32 %1, %4
+  ret i1 %5
+}