forked from OSchip/llvm-project
Rejected 169195. As Duncan commented, bitcasting to proper type is wrong approach. We need to insert some valid TRANCATE node here.
llvm-svn: 162354
This commit is contained in:
parent
9b4e440c44
commit
99120e04be
|
@ -7876,29 +7876,9 @@ SDValue DAGCombiner::visitBUILD_VECTOR(SDNode *N) {
|
|||
if (VecIn1.getValueType().getSizeInBits()*2 != VT.getSizeInBits())
|
||||
return SDValue();
|
||||
|
||||
// If the element type of the input vector is not the same as
|
||||
// the output element type, make concat_vectors based on input element
|
||||
// type and then bitcast it to the output vector type.
|
||||
//
|
||||
// In another words avoid nodes like this:
|
||||
// <NODE> v16i8 = concat_vectors v4i16 v4i16
|
||||
// Replace it with this one:
|
||||
// <NODE0> v8i16 = concat_vectors v4i16 v4i16
|
||||
// <NODE1> v16i8 = bitcast NODE0
|
||||
EVT ItemType = VecIn1.getValueType().getVectorElementType();
|
||||
if (ItemType != VT.getVectorElementType()) {
|
||||
EVT ConcatVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
ItemType,
|
||||
VecIn1.getValueType().getVectorNumElements()*2);
|
||||
// Widen the input vector by adding undef values.
|
||||
VecIn1 = DAG.getNode(ISD::CONCAT_VECTORS, dl, ConcatVT,
|
||||
VecIn1, DAG.getUNDEF(VecIn1.getValueType()));
|
||||
VecIn1 = DAG.getNode(ISD::BITCAST, dl, VT, VecIn1);
|
||||
} else
|
||||
// Widen the input vector by adding undef values.
|
||||
VecIn1 = DAG.getNode(ISD::CONCAT_VECTORS, dl, VT,
|
||||
VecIn1, DAG.getUNDEF(VecIn1.getValueType()));
|
||||
|
||||
// Widen the input vector by adding undef values.
|
||||
VecIn1 = DAG.getNode(ISD::CONCAT_VECTORS, N->getDebugLoc(), VT,
|
||||
VecIn1, DAG.getUNDEF(VecIn1.getValueType()));
|
||||
}
|
||||
|
||||
// If VecIn2 is unused then change it to undef.
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
; RUN: llc < %s -mtriple=armv7--
|
||||
|
||||
declare void @g(<16 x i8>)
|
||||
define void @f(<4 x i8> %param1, <4 x i8> %param2) {
|
||||
%y1 = shufflevector <4 x i8> %param1, <4 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
|
||||
%y2 = shufflevector <4 x i8> %param2, <4 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
|
||||
%z = shufflevector <16 x i8> %y1, <16 x i8> %y2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>
|
||||
call void @g(<16 x i8> %z)
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue