diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2018-04-30 17:59:33 +0000 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2018-04-30 17:59:33 +0000 |
commit | aa4faec114db654772b245f5f875d47ca14666d7 (patch) | |
tree | 7012d647db62dc8461472d59427006e29a2d66f3 /llvm/test | |
parent | b7ae4ef82b45916f9fc2a4408caf69e04bec9a60 (diff) | |
download | bcm5719-llvm-aa4faec114db654772b245f5f875d47ca14666d7.tar.gz bcm5719-llvm-aa4faec114db654772b245f5f875d47ca14666d7.zip |
[InstCombine] Unfold masked merge with constant mask
Summary:
As discussed in D45733, we want to do this in InstCombine.
https://rise4fun.com/Alive/LGk
Reviewers: spatel, craig.topper
Reviewed By: spatel
Subscribers: chandlerc, xbolva00, llvm-commits
Differential Revision: https://reviews.llvm.org/D45867
llvm-svn: 331205
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-scalar.ll | 54 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-vector.ll | 80 |
2 files changed, 65 insertions, 69 deletions
diff --git a/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-scalar.ll b/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-scalar.ll index d8509eca4c4..b3bc74d3cfe 100644 --- a/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-scalar.ll +++ b/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-scalar.ll @@ -8,9 +8,9 @@ define i4 @scalar0 (i4 %x, i4 %y) { ; CHECK-LABEL: @scalar0( -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], 1 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[X:%.*]], 1 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[Y:%.*]], -2 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %n0 = xor i4 %x, %y @@ -21,9 +21,9 @@ define i4 @scalar0 (i4 %x, i4 %y) { define i4 @scalar1 (i4 %x, i4 %y) { ; CHECK-LABEL: @scalar1( -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[X:%.*]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[Y:%.*]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %n0 = xor i4 %x, %y @@ -91,9 +91,9 @@ declare i4 @gen4() define i4 @c_1_0_0 (i4 %x, i4 %y) { ; CHECK-LABEL: @c_1_0_0( -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[Y:%.*]], [[X:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[X:%.*]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[Y:%.*]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %n0 = xor i4 %y, %x ; swapped order @@ -104,9 +104,9 @@ define i4 @c_1_0_0 (i4 %x, i4 %y) { define i4 @c_0_1_0 (i4 %x, i4 %y) { ; CHECK-LABEL: @c_0_1_0( -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[N1]], [[X]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[Y:%.*]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[X:%.*]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %n0 = xor i4 %x, %y @@ -119,9 +119,9 @@ define i4 @c_0_0_1 () { ; CHECK-LABEL: @c_0_0_1( ; CHECK-NEXT: [[X:%.*]] = call i4 @gen4() ; CHECK-NEXT: [[Y:%.*]] = call i4 @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[X]], [[Y]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[Y]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[X]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[Y]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %x = call i4 @gen4() @@ -134,9 +134,9 @@ define i4 @c_0_0_1 () { define i4 @c_1_1_0 (i4 %x, i4 %y) { ; CHECK-LABEL: @c_1_1_0( -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[Y:%.*]], [[X:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[N1]], [[X]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[Y:%.*]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[X:%.*]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %n0 = xor i4 %y, %x ; swapped order @@ -148,9 +148,9 @@ define i4 @c_1_1_0 (i4 %x, i4 %y) { define i4 @c_1_0_1 (i4 %x) { ; CHECK-LABEL: @c_1_0_1( ; CHECK-NEXT: [[Y:%.*]] = call i4 @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[Y]], [[X:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[Y]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[X:%.*]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[Y]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %y = call i4 @gen4() @@ -163,9 +163,9 @@ define i4 @c_1_0_1 (i4 %x) { define i4 @c_0_1_1 (i4 %y) { ; CHECK-LABEL: @c_0_1_1( ; CHECK-NEXT: [[X:%.*]] = call i4 @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[X]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[X]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[Y:%.*]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[X]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %x = call i4 @gen4() @@ -179,9 +179,9 @@ define i4 @c_1_1_1 () { ; CHECK-LABEL: @c_1_1_1( ; CHECK-NEXT: [[X:%.*]] = call i4 @gen4() ; CHECK-NEXT: [[Y:%.*]] = call i4 @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor i4 [[Y]], [[X]] -; CHECK-NEXT: [[N1:%.*]] = and i4 [[N0]], -2 -; CHECK-NEXT: [[R:%.*]] = xor i4 [[X]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and i4 [[Y]], -2 +; CHECK-NEXT: [[TMP2:%.*]] = and i4 [[X]], 1 +; CHECK-NEXT: [[R:%.*]] = or i4 [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret i4 [[R]] ; %x = call i4 @gen4() diff --git a/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-vector.ll b/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-vector.ll index 56a5032eff6..f87b52b9743 100644 --- a/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-vector.ll +++ b/llvm/test/Transforms/InstCombine/unfold-masked-merge-with-const-mask-vector.ll @@ -8,9 +8,9 @@ define <2 x i4> @splat (<2 x i4> %x, <2 x i4> %y) { ; CHECK-LABEL: @splat( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[X:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[Y:%.*]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %x, %y @@ -21,9 +21,9 @@ define <2 x i4> @splat (<2 x i4> %x, <2 x i4> %y) { define <3 x i4> @splat_undef (<3 x i4> %x, <3 x i4> %y) { ; CHECK-LABEL: @splat_undef( -; CHECK-NEXT: [[N0:%.*]] = xor <3 x i4> [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <3 x i4> [[N0]], <i4 -2, i4 undef, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <3 x i4> [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and <3 x i4> [[X:%.*]], <i4 -2, i4 undef, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <3 x i4> [[Y:%.*]], <i4 1, i4 undef, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <3 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <3 x i4> [[R]] ; %n0 = xor <3 x i4> %x, %y @@ -34,9 +34,9 @@ define <3 x i4> @splat_undef (<3 x i4> %x, <3 x i4> %y) { define <2 x i4> @nonsplat (<2 x i4> %x, <2 x i4> %y) { ; CHECK-LABEL: @nonsplat( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 1> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[X:%.*]], <i4 -2, i4 1> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[Y:%.*]], <i4 1, i4 -2> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %x, %y @@ -73,9 +73,8 @@ define <2 x i4> @in_constant_varx_14(<2 x i4> %x, <2 x i4> %mask) { define <2 x i4> @in_constant_varx_14_nonsplat(<2 x i4> %x, <2 x i4> %mask) { ; CHECK-LABEL: @in_constant_varx_14_nonsplat( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[X:%.*]], <i4 -2, i4 7> -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 1, i4 1> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], <i4 -2, i4 7> +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[X:%.*]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], <i4 -2, i4 6> ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %x, <i4 14, i4 7> ; %x @@ -86,9 +85,8 @@ define <2 x i4> @in_constant_varx_14_nonsplat(<2 x i4> %x, <2 x i4> %mask) { define <3 x i4> @in_constant_varx_14_undef(<3 x i4> %x, <3 x i4> %mask) { ; CHECK-LABEL: @in_constant_varx_14_undef( -; CHECK-NEXT: [[N0:%.*]] = xor <3 x i4> [[X:%.*]], <i4 -2, i4 undef, i4 7> -; CHECK-NEXT: [[N1:%.*]] = and <3 x i4> [[N0]], <i4 1, i4 undef, i4 1> -; CHECK-NEXT: [[R:%.*]] = xor <3 x i4> [[N1]], <i4 -2, i4 undef, i4 7> +; CHECK-NEXT: [[TMP1:%.*]] = and <3 x i4> [[X:%.*]], <i4 1, i4 undef, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <3 x i4> [[TMP1]], <i4 -2, i4 undef, i4 6> ; CHECK-NEXT: ret <3 x i4> [[R]] ; %n0 = xor <3 x i4> %x, <i4 14, i4 undef, i4 7> ; %x @@ -123,9 +121,8 @@ define <2 x i4> @in_constant_14_vary(<2 x i4> %y, <2 x i4> %mask) { define <2 x i4> @in_constant_14_vary_nonsplat(<2 x i4> %y, <2 x i4> %mask) { ; CHECK-LABEL: @in_constant_14_vary_nonsplat( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[Y:%.*]], <i4 -2, i4 7> -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 1, i4 1> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[Y:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], <i4 0, i4 1> ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %y, <i4 14, i4 7> ; %x @@ -136,9 +133,8 @@ define <2 x i4> @in_constant_14_vary_nonsplat(<2 x i4> %y, <2 x i4> %mask) { define <3 x i4> @in_constant_14_vary_undef(<3 x i4> %y, <3 x i4> %mask) { ; CHECK-LABEL: @in_constant_14_vary_undef( -; CHECK-NEXT: [[N0:%.*]] = xor <3 x i4> [[Y:%.*]], <i4 -2, i4 undef, i4 7> -; CHECK-NEXT: [[N1:%.*]] = and <3 x i4> [[N0]], <i4 1, i4 undef, i4 1> -; CHECK-NEXT: [[R:%.*]] = xor <3 x i4> [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and <3 x i4> [[Y:%.*]], <i4 -2, i4 undef, i4 -2> +; CHECK-NEXT: [[R:%.*]] = or <3 x i4> [[TMP1]], <i4 0, i4 undef, i4 1> ; CHECK-NEXT: ret <3 x i4> [[R]] ; %n0 = xor <3 x i4> %y, <i4 14, i4 undef, i4 7> ; %x @@ -156,9 +152,9 @@ declare <2 x i4> @gen4() define <2 x i4> @c_1_0_0 (<2 x i4> %x, <2 x i4> %y) { ; CHECK-LABEL: @c_1_0_0( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[Y:%.*]], [[X:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], [[Y]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[X:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[Y:%.*]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %y, %x ; swapped order @@ -169,9 +165,9 @@ define <2 x i4> @c_1_0_0 (<2 x i4> %x, <2 x i4> %y) { define <2 x i4> @c_0_1_0 (<2 x i4> %x, <2 x i4> %y) { ; CHECK-LABEL: @c_0_1_0( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[X:%.*]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], [[X]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[Y:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[X:%.*]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %x, %y @@ -184,9 +180,9 @@ define <2 x i4> @c_0_0_1 () { ; CHECK-LABEL: @c_0_0_1( ; CHECK-NEXT: [[X:%.*]] = call <2 x i4> @gen4() ; CHECK-NEXT: [[Y:%.*]] = call <2 x i4> @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[X]], [[Y]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[Y]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[X]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[Y]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %x = call <2 x i4> @gen4() @@ -199,9 +195,9 @@ define <2 x i4> @c_0_0_1 () { define <2 x i4> @c_1_1_0 (<2 x i4> %x, <2 x i4> %y) { ; CHECK-LABEL: @c_1_1_0( -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[Y:%.*]], [[X:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[N1]], [[X]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[Y:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[X:%.*]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %n0 = xor <2 x i4> %y, %x ; swapped order @@ -213,9 +209,9 @@ define <2 x i4> @c_1_1_0 (<2 x i4> %x, <2 x i4> %y) { define <2 x i4> @c_1_0_1 (<2 x i4> %x) { ; CHECK-LABEL: @c_1_0_1( ; CHECK-NEXT: [[Y:%.*]] = call <2 x i4> @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[Y]], [[X:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[Y]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[X:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[Y]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %y = call <2 x i4> @gen4() @@ -228,9 +224,9 @@ define <2 x i4> @c_1_0_1 (<2 x i4> %x) { define <2 x i4> @c_0_1_1 (<2 x i4> %y) { ; CHECK-LABEL: @c_0_1_1( ; CHECK-NEXT: [[X:%.*]] = call <2 x i4> @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[X]], [[Y:%.*]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[X]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[Y:%.*]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[X]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %x = call <2 x i4> @gen4() @@ -244,9 +240,9 @@ define <2 x i4> @c_1_1_1 () { ; CHECK-LABEL: @c_1_1_1( ; CHECK-NEXT: [[X:%.*]] = call <2 x i4> @gen4() ; CHECK-NEXT: [[Y:%.*]] = call <2 x i4> @gen4() -; CHECK-NEXT: [[N0:%.*]] = xor <2 x i4> [[Y]], [[X]] -; CHECK-NEXT: [[N1:%.*]] = and <2 x i4> [[N0]], <i4 -2, i4 -2> -; CHECK-NEXT: [[R:%.*]] = xor <2 x i4> [[X]], [[N1]] +; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i4> [[Y]], <i4 -2, i4 -2> +; CHECK-NEXT: [[TMP2:%.*]] = and <2 x i4> [[X]], <i4 1, i4 1> +; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[TMP1]], [[TMP2]] ; CHECK-NEXT: ret <2 x i4> [[R]] ; %x = call <2 x i4> @gen4() |