mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-01 08:28:19 +00:00
Fix assert in LowerBUILD_VECTOR for v16i16 type on AVX.
Patch by Elena Demikhovsky <elena.demikhovsky@intel.com>! llvm-svn: 146684
This commit is contained in:
parent
8a99f9655e
commit
e74b3b1469
@ -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…
Reference in New Issue
Block a user