diff options
Diffstat (limited to 'test/Transforms/InstCombine/and-or.ll')
-rw-r--r-- | test/Transforms/InstCombine/and-or.ll | 78 |
1 files changed, 47 insertions, 31 deletions
diff --git a/test/Transforms/InstCombine/and-or.ll b/test/Transforms/InstCombine/and-or.ll index 0ae12a36c2b81..2ad90ad98e7c2 100644 --- a/test/Transforms/InstCombine/and-or.ll +++ b/test/Transforms/InstCombine/and-or.ll @@ -1,39 +1,55 @@ -; RUN: opt < %s -instcombine -S | grep "and i32 %a, 1" | count 4 -; RUN: opt < %s -instcombine -S | grep "or i32 %0, %b" | count 4 +; NOTE: Assertions have been autogenerated by update_test_checks.py +; RUN: opt < %s -instcombine -S | FileCheck %s - -define i32 @func1(i32 %a, i32 %b) nounwind readnone { -entry: - %0 = or i32 %b, %a ; <i32> [#uses=1] - %1 = and i32 %0, 1 ; <i32> [#uses=1] - %2 = and i32 %b, -2 ; <i32> [#uses=1] - %3 = or i32 %1, %2 ; <i32> [#uses=1] - ret i32 %3 +define i32 @func1(i32 %a, i32 %b) { +; CHECK-LABEL: @func1( +; CHECK-NEXT: [[TMP1:%.*]] = and i32 %a, 1 +; CHECK-NEXT: [[TMP3:%.*]] = or i32 [[TMP1]], %b +; CHECK-NEXT: ret i32 [[TMP3]] +; + %tmp = or i32 %b, %a + %tmp1 = and i32 %tmp, 1 + %tmp2 = and i32 %b, -2 + %tmp3 = or i32 %tmp1, %tmp2 + ret i32 %tmp3 } -define i32 @func2(i32 %a, i32 %b) nounwind readnone { -entry: - %0 = or i32 %a, %b ; <i32> [#uses=1] - %1 = and i32 1, %0 ; <i32> [#uses=1] - %2 = and i32 -2, %b ; <i32> [#uses=1] - %3 = or i32 %1, %2 ; <i32> [#uses=1] - ret i32 %3 +define i32 @func2(i32 %a, i32 %b) { +; CHECK-LABEL: @func2( +; CHECK-NEXT: [[TMP1:%.*]] = and i32 %a, 1 +; CHECK-NEXT: [[TMP3:%.*]] = or i32 [[TMP1]], %b +; CHECK-NEXT: ret i32 [[TMP3]] +; + %tmp = or i32 %a, %b + %tmp1 = and i32 1, %tmp + %tmp2 = and i32 -2, %b + %tmp3 = or i32 %tmp1, %tmp2 + ret i32 %tmp3 } -define i32 @func3(i32 %a, i32 %b) nounwind readnone { -entry: - %0 = or i32 %b, %a ; <i32> [#uses=1] - %1 = and i32 %0, 1 ; <i32> [#uses=1] - %2 = and i32 %b, -2 ; <i32> [#uses=1] - %3 = or i32 %2, %1 ; <i32> [#uses=1] - ret i32 %3 +define i32 @func3(i32 %a, i32 %b) { +; CHECK-LABEL: @func3( +; CHECK-NEXT: [[TMP1:%.*]] = and i32 %a, 1 +; CHECK-NEXT: [[TMP3:%.*]] = or i32 [[TMP1]], %b +; CHECK-NEXT: ret i32 [[TMP3]] +; + %tmp = or i32 %b, %a + %tmp1 = and i32 %tmp, 1 + %tmp2 = and i32 %b, -2 + %tmp3 = or i32 %tmp2, %tmp1 + ret i32 %tmp3 } -define i32 @func4(i32 %a, i32 %b) nounwind readnone { -entry: - %0 = or i32 %a, %b ; <i32> [#uses=1] - %1 = and i32 1, %0 ; <i32> [#uses=1] - %2 = and i32 -2, %b ; <i32> [#uses=1] - %3 = or i32 %2, %1 ; <i32> [#uses=1] - ret i32 %3 +define i32 @func4(i32 %a, i32 %b) { +; CHECK-LABEL: @func4( +; CHECK-NEXT: [[TMP1:%.*]] = and i32 %a, 1 +; CHECK-NEXT: [[TMP3:%.*]] = or i32 [[TMP1]], %b +; CHECK-NEXT: ret i32 [[TMP3]] +; + %tmp = or i32 %a, %b + %tmp1 = and i32 1, %tmp + %tmp2 = and i32 -2, %b + %tmp3 = or i32 %tmp2, %tmp1 + ret i32 %tmp3 } + |