mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
bug 3610: Floating point vaarg not softened.
llvm-svn: 65239
This commit is contained in:
parent
17e17c7b44
commit
7a2ebd7d09
@ -88,6 +88,7 @@ void DAGTypeLegalizer::SoftenFloatResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::SELECT_CC: R = SoftenFloatRes_SELECT_CC(N); break;
|
||||
case ISD::SINT_TO_FP:
|
||||
case ISD::UINT_TO_FP: R = SoftenFloatRes_XINT_TO_FP(N); break;
|
||||
case ISD::VAARG: R = SoftenFloatRes_VAARG(N); break;
|
||||
}
|
||||
|
||||
// If R is null, the sub-method took care of registering the result.
|
||||
@ -454,6 +455,22 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_SELECT_CC(SDNode *N) {
|
||||
N->getOperand(1), LHS, RHS, N->getOperand(4));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_VAARG(SDNode *N) {
|
||||
SDValue Chain = N->getOperand(0); // Get the chain.
|
||||
SDValue Ptr = N->getOperand(1); // Get the pointer.
|
||||
MVT VT = N->getValueType(0);
|
||||
MVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
SDValue NewVAARG;
|
||||
NewVAARG = DAG.getVAArg(NVT, dl, Chain, Ptr, N->getOperand(2));
|
||||
|
||||
// Legalized the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
ReplaceValueWith(SDValue(N, 1), NewVAARG.getValue(1));
|
||||
return NewVAARG;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_XINT_TO_FP(SDNode *N) {
|
||||
bool Signed = N->getOpcode() == ISD::SINT_TO_FP;
|
||||
MVT SVT = N->getOperand(0).getValueType();
|
||||
|
@ -417,6 +417,7 @@ private:
|
||||
SDValue SoftenFloatRes_LOAD(SDNode *N);
|
||||
SDValue SoftenFloatRes_SELECT(SDNode *N);
|
||||
SDValue SoftenFloatRes_SELECT_CC(SDNode *N);
|
||||
SDValue SoftenFloatRes_VAARG(SDNode *N);
|
||||
SDValue SoftenFloatRes_XINT_TO_FP(SDNode *N);
|
||||
|
||||
// Operand Float to Integer Conversion.
|
||||
|
Loading…
x
Reference in New Issue
Block a user