mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-11 06:38:20 +00:00
Make the PPC backend use a legal type for the operands to the BUILD_VECTOR
nodes it generates. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72356 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -698,15 +698,13 @@ SDValue PPC::get_VSPLTI_elt(SDNode *N, unsigned ByteSize, SelectionDAG &DAG) {
|
|||||||
|
|
||||||
if (OpVal.getNode() == 0) return SDValue(); // All UNDEF: use implicit def.
|
if (OpVal.getNode() == 0) return SDValue(); // All UNDEF: use implicit def.
|
||||||
|
|
||||||
unsigned ValSizeInBytes = 0;
|
unsigned ValSizeInBytes = EltSize;
|
||||||
uint64_t Value = 0;
|
uint64_t Value = 0;
|
||||||
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) {
|
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) {
|
||||||
Value = CN->getZExtValue();
|
Value = CN->getZExtValue();
|
||||||
ValSizeInBytes = CN->getValueType(0).getSizeInBits()/8;
|
|
||||||
} else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) {
|
} else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) {
|
||||||
assert(CN->getValueType(0) == MVT::f32 && "Only one legal FP vector type!");
|
assert(CN->getValueType(0) == MVT::f32 && "Only one legal FP vector type!");
|
||||||
Value = FloatToBits(CN->getValueAPF().convertToFloat());
|
Value = FloatToBits(CN->getValueAPF().convertToFloat());
|
||||||
ValSizeInBytes = 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the splat value is larger than the element value, then we can never do
|
// If the splat value is larger than the element value, then we can never do
|
||||||
@ -3113,7 +3111,7 @@ static SDValue BuildSplatI(int Val, unsigned SplatSize, MVT VT,
|
|||||||
MVT CanonicalVT = VTys[SplatSize-1];
|
MVT CanonicalVT = VTys[SplatSize-1];
|
||||||
|
|
||||||
// Build a canonical splat for this value.
|
// Build a canonical splat for this value.
|
||||||
SDValue Elt = DAG.getConstant(Val, CanonicalVT.getVectorElementType());
|
SDValue Elt = DAG.getConstant(Val, MVT::i32);
|
||||||
SmallVector<SDValue, 8> Ops;
|
SmallVector<SDValue, 8> Ops;
|
||||||
Ops.assign(CanonicalVT.getVectorNumElements(), Elt);
|
Ops.assign(CanonicalVT.getVectorNumElements(), Elt);
|
||||||
SDValue Res = DAG.getNode(ISD::BUILD_VECTOR, dl, CanonicalVT,
|
SDValue Res = DAG.getNode(ISD::BUILD_VECTOR, dl, CanonicalVT,
|
||||||
@ -3515,7 +3513,7 @@ SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
|
|||||||
|
|
||||||
for (unsigned j = 0; j != BytesPerElement; ++j)
|
for (unsigned j = 0; j != BytesPerElement; ++j)
|
||||||
ResultMask.push_back(DAG.getConstant(SrcElt*BytesPerElement+j,
|
ResultMask.push_back(DAG.getConstant(SrcElt*BytesPerElement+j,
|
||||||
MVT::i8));
|
MVT::i32));
|
||||||
}
|
}
|
||||||
|
|
||||||
SDValue VPermMask = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v16i8,
|
SDValue VPermMask = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v16i8,
|
||||||
|
Reference in New Issue
Block a user