mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 05:29:23 +00:00
[X86][SSE] Fix for getScalarValueForVectorElement to detect scalar sources requiring truncation.
The fix ensures that scalar sources inserted into a vector are the correct bit size. Integer scalar sources from BUILD_VECTOR and SCALAR_TO_VECTOR nodes may require truncation that this function doesn't currently support. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235281 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e398eb753a
commit
ca3e6fafc8
@ -6918,8 +6918,13 @@ static SDValue getScalarValueForVectorElement(SDValue V, int Idx,
|
||||
return SDValue();
|
||||
|
||||
if (V.getOpcode() == ISD::BUILD_VECTOR ||
|
||||
(Idx == 0 && V.getOpcode() == ISD::SCALAR_TO_VECTOR))
|
||||
return DAG.getNode(ISD::BITCAST, SDLoc(V), EltVT, V.getOperand(Idx));
|
||||
(Idx == 0 && V.getOpcode() == ISD::SCALAR_TO_VECTOR)) {
|
||||
// Ensure the scalar operand is the same size as the destination.
|
||||
// FIXME: Add support for scalar truncation where possible.
|
||||
SDValue S = V.getOperand(Idx);
|
||||
if (EltVT.getSizeInBits() == S.getSimpleValueType().getSizeInBits())
|
||||
return DAG.getNode(ISD::BITCAST, SDLoc(V), EltVT, S);
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
16
test/CodeGen/X86/fold-vector-shuffle-crash.ll
Normal file
16
test/CodeGen/X86/fold-vector-shuffle-crash.ll
Normal file
@ -0,0 +1,16 @@
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=corei7
|
||||
|
||||
define void @autogen_SD13708(i32) {
|
||||
BB:
|
||||
%Shuff7 = shufflevector <8 x i32> zeroinitializer, <8 x i32> zeroinitializer, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 undef, i32 2, i32 4, i32 undef>
|
||||
br label %CF
|
||||
|
||||
CF:
|
||||
%Tr = trunc <8 x i64> zeroinitializer to <8 x i32>
|
||||
%Shuff20 = shufflevector <8 x i32> %Shuff7, <8 x i32> %Tr, <8 x i32> <i32 13, i32 15, i32 1, i32 3, i32 5, i32 7, i32 undef, i32 11>
|
||||
br i1 undef, label %CF, label %CF247
|
||||
|
||||
CF247:
|
||||
%I171 = insertelement <8 x i32> %Shuff20, i32 %0, i32 0
|
||||
br i1 undef, label %CF, label %CF247
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user