diff options
Diffstat (limited to 'test/Transforms/Reassociate/subtest.ll')
-rw-r--r-- | test/Transforms/Reassociate/subtest.ll | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/test/Transforms/Reassociate/subtest.ll b/test/Transforms/Reassociate/subtest.ll index 4c63d1238a..e6263d8552 100644 --- a/test/Transforms/Reassociate/subtest.ll +++ b/test/Transforms/Reassociate/subtest.ll @@ -1,11 +1,26 @@ -; With sub reassociation, constant folding can eliminate the 12 and -12 constants. -; -; RUN: opt < %s -reassociate -instcombine -S | not grep 12 +; RUN: opt < %s -reassociate -instcombine -S | FileCheck %s -define i32 @test(i32 %A, i32 %B) { - %X = add i32 -12, %A ; <i32> [#uses=1] - %Y = sub i32 %X, %B ; <i32> [#uses=1] - %Z = add i32 %Y, 12 ; <i32> [#uses=1] - ret i32 %Z +; With sub reassociation, constant folding can eliminate the 12 and -12 constants. +define i32 @test1(i32 %A, i32 %B) { +; CHECK-LABEL: @test1 +; CHECK-NEXT: %Z = sub i32 %A, %B +; CHECK-NEXT: ret i32 %Z + %X = add i32 -12, %A + %Y = sub i32 %X, %B + %Z = add i32 %Y, 12 + ret i32 %Z } +; PR2047 +; With sub reassociation, constant folding can eliminate the uses of %a. +define i32 @test2(i32 %a, i32 %b, i32 %c) nounwind { +; CHECK-LABEL: @test2 +; CHECK-NEXT: %sum = add i32 %c, %b +; CHECK-NEXT: %tmp7 = sub i32 0, %sum +; CHECK-NEXT: ret i32 %tmp7 + + %tmp3 = sub i32 %a, %b + %tmp5 = sub i32 %tmp3, %c + %tmp7 = sub i32 %tmp5, %a + ret i32 %tmp7 +} |