diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-05-12 13:12:08 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-05-12 13:12:08 +0000 |
commit | 3b36b72a9cfa11cf4d67460d8e0ca55c7a8027d3 (patch) | |
tree | b05aeaa8877b4c6bb076eeb01329147560878962 /llvm | |
parent | 883cf7e656a0f9f27465a4219770adf4502e95ef (diff) | |
download | bcm5719-llvm-3b36b72a9cfa11cf4d67460d8e0ca55c7a8027d3.tar.gz bcm5719-llvm-3b36b72a9cfa11cf4d67460d8e0ca55c7a8027d3.zip |
X86: Make sure that we have SSE4.1 before we generate insertps nodes.
PR19721.
llvm-svn: 208552
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/sse2.ll | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index e134494a535..8d533bb08e0 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -5459,7 +5459,7 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, unsigned NumElems, SDValue V = FirstNonZero.getOperand(0); MVT VVT = V.getSimpleValueType(); - if (VVT != MVT::v4f32 && VVT != MVT::v4i32) + if (!Subtarget->hasSSE41() || (VVT != MVT::v4f32 && VVT != MVT::v4i32)) return SDValue(); unsigned FirstNonZeroDst = diff --git a/llvm/test/CodeGen/X86/sse2.ll b/llvm/test/CodeGen/X86/sse2.ll index 0a17eaca411..e8d3d6f19ed 100644 --- a/llvm/test/CodeGen/X86/sse2.ll +++ b/llvm/test/CodeGen/X86/sse2.ll @@ -229,3 +229,13 @@ define <2 x i64> @test_insert_64_zext(<2 x i64> %i) { %1 = shufflevector <2 x i64> %i, <2 x i64> <i64 0, i64 undef>, <2 x i32> <i32 0, i32 2> ret <2 x i64> %1 } + +define <4 x i32> @PR19721(<4 x i32> %i) { + %bc = bitcast <4 x i32> %i to i128 + %insert = and i128 %bc, -4294967296 + %bc2 = bitcast i128 %insert to <4 x i32> + ret <4 x i32> %bc2 + +; CHECK-LABEL: PR19721 +; CHECK: punpckldq +} |