mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-28 06:24:57 +00:00
Rejected 169195. As Duncan commented, bitcasting to proper type is wrong approach. We need to insert some valid TRANCATE node here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162354 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -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.
|
||||
|
Reference in New Issue
Block a user