diff options
author | Serge Pavlov <sepavloff@gmail.com> | 2014-05-14 09:05:09 +0000 |
---|---|---|
committer | Serge Pavlov <sepavloff@gmail.com> | 2014-05-14 09:05:09 +0000 |
commit | e6de9e39a8ac60a213538ea51e5ca07f517bfc5a (patch) | |
tree | 333e73a865f1b5e28aa230949dd08be5f6a7a983 /llvm/test/Transforms/InstCombine/vec_shuffle.ll | |
parent | 9f9492b657358da8f7787e652b2f425fc5570208 (diff) | |
download | bcm5719-llvm-e6de9e39a8ac60a213538ea51e5ca07f517bfc5a.tar.gz bcm5719-llvm-e6de9e39a8ac60a213538ea51e5ca07f517bfc5a.zip |
Fix the case when reordering shuffle and binop produces a constant.
This resolves PR19737.
llvm-svn: 208762
Diffstat (limited to 'llvm/test/Transforms/InstCombine/vec_shuffle.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/vec_shuffle.ll | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/vec_shuffle.ll b/llvm/test/Transforms/InstCombine/vec_shuffle.ll index 2e6f787f833..fc0f8bd0aa9 100644 --- a/llvm/test/Transforms/InstCombine/vec_shuffle.ll +++ b/llvm/test/Transforms/InstCombine/vec_shuffle.ll @@ -394,3 +394,14 @@ define <8 x i8> @pr19730(<16 x i8> %in0) { %shuffle1 = shufflevector <8 x i8> %shuffle, <8 x i8> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0> ret <8 x i8> %shuffle1 } + +define i32 @pr19737(<4 x i32> %in0) { +; CHECK-LABEL: @pr19737( +; CHECK: [[VAR:%[a-zA-Z0-9.]+]] = extractelement <4 x i32> %in0, i32 0 +; CHECK: ret i32 [[VAR]] + %shuffle.i = shufflevector <4 x i32> zeroinitializer, <4 x i32> %in0, <4 x i32> <i32 0, i32 4, i32 2, i32 6> + %neg.i = xor <4 x i32> %shuffle.i, <i32 -1, i32 -1, i32 -1, i32 -1> + %and.i = and <4 x i32> %in0, %neg.i + %rv = extractelement <4 x i32> %and.i, i32 0 + ret i32 %rv +} |