mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Fix a bug with <8 x i16> shuffle lowering on X86 where parts of the
shuffle could be skipped. The check is invalid because the loop index i doesn't correspond to the element actually inserted. The correct check is already done a few lines earlier, for whether the element is already in the right spot, so this shouldn't have any effect on the codegen for code that was already correct. llvm-svn: 52486
This commit is contained in:
parent
864a2c23ed
commit
570aa6f801
@ -3445,8 +3445,6 @@ SDOperand LowerVECTOR_SHUFFLEv8i16(SDOperand V1, SDOperand V2,
|
||||
continue;
|
||||
SDOperand Elt = MaskElts[i];
|
||||
unsigned EltIdx = cast<ConstantSDNode>(Elt)->getValue();
|
||||
if (EltIdx == i)
|
||||
continue;
|
||||
SDOperand ExtOp = (EltIdx < 8)
|
||||
? DAG.getNode(ISD::EXTRACT_VECTOR_ELT, MVT::i16, V1,
|
||||
DAG.getConstant(EltIdx, PtrVT))
|
||||
|
10
test/CodeGen/X86/2008-06-18-BadShuffle.ll
Normal file
10
test/CodeGen/X86/2008-06-18-BadShuffle.ll
Normal file
@ -0,0 +1,10 @@
|
||||
; RUN: llvm-as < %s | llc -march=x86 -mcpu=i386 -mattr=+sse2 | grep pinsrw
|
||||
|
||||
; Test to make sure we actually insert the bottom element of the vector
|
||||
define <8 x i16> @a(<8 x i16> %a) nounwind {
|
||||
entry:
|
||||
shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> < i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8 >
|
||||
%add = add <8 x i16> %0, %a
|
||||
ret <8 x i16> %add
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user