1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00

Fix some corner cases with vectors in copyToRegs and copyFromRegs.

llvm-svn: 42907
This commit is contained in:
Dan Gohman 2007-10-12 14:33:11 +00:00
parent b0b156e238
commit 330b7915da

View File

@ -648,7 +648,15 @@ static SDOperand getCopyFromParts(SelectionDAG &DAG,
if (MVT::isVector(PartVT)) {
assert(MVT::isVector(ValueVT) && "Unknown vector conversion!");
return DAG.getNode(ISD::BIT_CONVERT, PartVT, Val);
return DAG.getNode(ISD::BIT_CONVERT, ValueVT, Val);
}
if (MVT::isVector(ValueVT)) {
assert(NumParts == 1 &&
MVT::getVectorElementType(ValueVT) == PartVT &&
MVT::getVectorNumElements(ValueVT) == 1 &&
"Only trivial scalar-to-vector conversions should get here!");
return DAG.getNode(ISD::BUILD_VECTOR, ValueVT, Val);
}
if (MVT::isInteger(PartVT) &&
@ -746,6 +754,13 @@ static void getCopyToParts(SelectionDAG &DAG,
assert(MVT::isVector(ValueVT) &&
"Not a vector-vector cast?");
Val = DAG.getNode(ISD::BIT_CONVERT, PartVT, Val);
} else if (MVT::isVector(ValueVT)) {
assert(NumParts == 1 &&
MVT::getVectorElementType(ValueVT) == PartVT &&
MVT::getVectorNumElements(ValueVT) == 1 &&
"Only trivial vector-to-scalar conversions should get here!");
Val = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, PartVT, Val,
DAG.getConstant(0, PtrVT));
} else if (MVT::isInteger(PartVT) && MVT::isInteger(ValueVT)) {
if (PartVT < ValueVT)
Val = DAG.getNode(ISD::TRUNCATE, PartVT, Val);