mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-26 04:34:41 +00:00
Fix assert in LowerBUILD_VECTOR for v16i16 type on AVX.
Patch by Elena Demikhovsky <elena.demikhovsky@intel.com>! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146684 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b012eb8cc4
commit
0660cfe3c8
@ -5138,8 +5138,10 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
|
||||
DAG);
|
||||
} else if (ExtVT == MVT::i16 || ExtVT == MVT::i8) {
|
||||
Item = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Item);
|
||||
assert(VT.getSizeInBits() == 128 && "Expected an SSE value type!");
|
||||
EVT MiddleVT = MVT::v4i32;
|
||||
unsigned NumBits = VT.getSizeInBits();
|
||||
assert((NumBits == 128 || NumBits == 256) &&
|
||||
"Expected an SSE or AVX value type!");
|
||||
EVT MiddleVT = NumBits == 128 ? MVT::v4i32 : MVT::v8i32;
|
||||
Item = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, MiddleVT, Item);
|
||||
Item = getShuffleVectorZeroOrUndef(Item, 0, true,
|
||||
Subtarget->hasXMMInt(), DAG);
|
||||
|
@ -113,3 +113,11 @@ define <16 x float> @fneg(<16 x float> addrspace(1)* nocapture %out) nounwind {
|
||||
%1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
|
||||
ret <16 x float> %1
|
||||
}
|
||||
|
||||
;;; Don't crash on build vector
|
||||
; CHECK: @build_vec_16x16
|
||||
; CHECK: vmovd
|
||||
define <16 x i16> @build_vec_16x16(i16 %a) nounwind readonly {
|
||||
%res = insertelement <16 x i16> <i16 undef, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %a, i32 0
|
||||
ret <16 x i16> %res
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user