diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-08-11 21:33:55 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-08-11 21:33:55 +0000 |
| commit | 827529e7a05d19185ff54aa8997a363c77f9baf0 (patch) | |
| tree | fef620d2d0b0975f4849b6cf002d43a7fae17e44 /llvm/test | |
| parent | 2e0551f8d2c6414c11780716c66192c832e62365 (diff) | |
| download | bcm5719-llvm-827529e7a05d19185ff54aa8997a363c77f9baf0.tar.gz bcm5719-llvm-827529e7a05d19185ff54aa8997a363c77f9baf0.zip | |
Fix PR24354.
`InstCombiner::OptimizeOverflowCheck` was asserting an
invariant (operands to binary operations are ordered by decreasing
complexity) that wasn't really an invariant. Fix this by instead having
`InstCombiner::OptimizeOverflowCheck` establish the invariant if it does
not hold.
llvm-svn: 244676
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/pr24354.ll | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/pr24354.ll b/llvm/test/Transforms/InstCombine/pr24354.ll new file mode 100644 index 00000000000..3b36fd1b74e --- /dev/null +++ b/llvm/test/Transforms/InstCombine/pr24354.ll @@ -0,0 +1,33 @@ +; RUN: opt -instcombine -S < %s | FileCheck %s + +; This used to crash opt + +@c = common global i32 0, align 4 +@b = common global i32 0, align 4 +@a = common global i16 0, align 2 +@d = common global i32 0, align 4 + +define void @fn3() { +; CHECK: @fn3 +bb: + %tmp = load i32, i32* @c, align 4 + %tmp1 = icmp eq i32 %tmp, 0 + br i1 %tmp1, label %bb2, label %bb6 + +bb2: ; preds = %bb + %tmp3 = load i32, i32* @b, align 4 + %tmp.i = add nsw i32 255, %tmp3 + %tmp5 = icmp ugt i32 %tmp.i, 254 + br label %bb6 + +bb6: ; preds = %bb, %bb2 + %tmp7 = phi i1 [ true, %bb ], [ %tmp5, %bb2 ] + %tmp8 = zext i1 %tmp7 to i32 + %tmp10 = icmp eq i32 %tmp8, 0 + %tmp12 = load i16, i16* @a, align 2 + %tmp14 = icmp ne i16 %tmp12, 0 + %tmp16 = select i1 %tmp10, i1 false, i1 %tmp14 + %tmp17 = zext i1 %tmp16 to i32 + store i32 %tmp17, i32* @d, align 4 + ret void +} |

