Add support for FMA to WidenVectorResult.

llvm-svn: 162893
This commit is contained in:
Craig Topper 2012-08-30 07:13:41 +00:00
parent e39ad7b549
commit c8f5d77e75
2 changed files with 14 additions and 0 deletions

View File

@ -625,6 +625,7 @@ private:
SDValue WidenVecRes_VECTOR_SHUFFLE(ShuffleVectorSDNode *N); SDValue WidenVecRes_VECTOR_SHUFFLE(ShuffleVectorSDNode *N);
SDValue WidenVecRes_VSETCC(SDNode* N); SDValue WidenVecRes_VSETCC(SDNode* N);
SDValue WidenVecRes_Ternary(SDNode *N);
SDValue WidenVecRes_Binary(SDNode *N); SDValue WidenVecRes_Binary(SDNode *N);
SDValue WidenVecRes_Convert(SDNode *N); SDValue WidenVecRes_Convert(SDNode *N);
SDValue WidenVecRes_POWI(SDNode *N); SDValue WidenVecRes_POWI(SDNode *N);

View File

@ -1366,6 +1366,9 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
case ISD::FTRUNC: case ISD::FTRUNC:
Res = WidenVecRes_Unary(N); Res = WidenVecRes_Unary(N);
break; break;
case ISD::FMA:
Res = WidenVecRes_Ternary(N);
break;
} }
// If Res is null, the sub-method took care of registering the result. // If Res is null, the sub-method took care of registering the result.
@ -1373,6 +1376,16 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
SetWidenedVector(SDValue(N, ResNo), Res); SetWidenedVector(SDValue(N, ResNo), Res);
} }
SDValue DAGTypeLegalizer::WidenVecRes_Ternary(SDNode *N) {
// Ternary op widening.
DebugLoc dl = N->getDebugLoc();
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
SDValue InOp1 = GetWidenedVector(N->getOperand(0));
SDValue InOp2 = GetWidenedVector(N->getOperand(1));
SDValue InOp3 = GetWidenedVector(N->getOperand(2));
return DAG.getNode(N->getOpcode(), dl, WidenVT, InOp1, InOp2, InOp3);
}
SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) { SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) {
// Binary op widening. // Binary op widening.
unsigned Opcode = N->getOpcode(); unsigned Opcode = N->getOpcode();