Fix some ppcf128 regressions: make ExpandFloatRes_LOAD

work correctly, and bring over a late change to ppcf128
SetCC handling.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58642 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dale Johannesen 2008-11-03 20:47:45 +00:00
parent d821726a91
commit 283c6965d0

View File

@ -885,16 +885,16 @@ void DAGTypeLegalizer::ExpandFloatRes_LOAD(SDNode *N, SDValue &Lo,
assert(NVT.isByteSized() && "Expanded type not byte sized!"); assert(NVT.isByteSized() && "Expanded type not byte sized!");
assert(LD->getMemoryVT().bitsLE(NVT) && "Float type not round?"); assert(LD->getMemoryVT().bitsLE(NVT) && "Float type not round?");
Lo = DAG.getExtLoad(LD->getExtensionType(), NVT, Chain, Ptr, Hi = DAG.getExtLoad(LD->getExtensionType(), NVT, Chain, Ptr,
LD->getSrcValue(), LD->getSrcValueOffset(), LD->getSrcValue(), LD->getSrcValueOffset(),
LD->getMemoryVT(), LD->getMemoryVT(),
LD->isVolatile(), LD->getAlignment()); LD->isVolatile(), LD->getAlignment());
// Remember the chain. // Remember the chain.
Chain = Lo.getValue(1); Chain = Hi.getValue(1);
// The high part is undefined. // The low part is zero.
Hi = DAG.getNode(ISD::UNDEF, NVT); Lo = DAG.getConstantFP(APFloat(APInt(NVT.getSizeInBits(), 0)), NVT);
// Modified the chain - switch anything that used the old chain to use the // Modified the chain - switch anything that used the old chain to use the
// new one. // new one.
@ -1039,15 +1039,15 @@ void DAGTypeLegalizer::FloatExpandSetCCOperands(SDValue &NewLHS,
assert(VT == MVT::ppcf128 && "Unsupported setcc type!"); assert(VT == MVT::ppcf128 && "Unsupported setcc type!");
// FIXME: This generated code sucks. We want to generate // FIXME: This generated code sucks. We want to generate
// FCMP crN, hi1, hi2 // FCMPU crN, hi1, hi2
// BNE crN, L: // BNE crN, L:
// FCMP crN, lo1, lo2 // FCMPU crN, lo1, lo2
// The following can be improved, but not that much. // The following can be improved, but not that much.
SDValue Tmp1, Tmp2, Tmp3; SDValue Tmp1, Tmp2, Tmp3;
Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, ISD::SETEQ); Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, ISD::SETOEQ);
Tmp2 = DAG.getSetCC(TLI.getSetCCResultType(LHSLo), LHSLo, RHSLo, CCCode); Tmp2 = DAG.getSetCC(TLI.getSetCCResultType(LHSLo), LHSLo, RHSLo, CCCode);
Tmp3 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2); Tmp3 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2);
Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, ISD::SETNE); Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, ISD::SETUNE);
Tmp2 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, CCCode); Tmp2 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, CCCode);
Tmp1 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2); Tmp1 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2);
NewLHS = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp3); NewLHS = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp3);