From 851b1ee83f7a0e7f88cd378bf3849809b19dfd01 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Wed, 9 Jul 2008 11:11:47 +0000 Subject: [PATCH] LegalizeTypes support for powi soft float. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53285 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../SelectionDAG/LegalizeFloatTypes.cpp | 18 +++++++++++++++--- lib/CodeGen/SelectionDAG/LegalizeTypes.h | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp index 9b3f723a08e..a1489cd1015 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp @@ -71,9 +71,10 @@ void DAGTypeLegalizer::SoftenFloatResult(SDNode *N, unsigned ResNo) { case ISD::SINT_TO_FP: case ISD::UINT_TO_FP: R = SoftenFloatRes_XINT_TO_FP(N); break; - case ISD::FADD: R = SoftenFloatRes_FADD(N); break; - case ISD::FMUL: R = SoftenFloatRes_FMUL(N); break; - case ISD::FSUB: R = SoftenFloatRes_FSUB(N); break; + case ISD::FADD: R = SoftenFloatRes_FADD(N); break; + case ISD::FMUL: R = SoftenFloatRes_FMUL(N); break; + case ISD::FPOWI: R = SoftenFloatRes_FPOWI(N); break; + case ISD::FSUB: R = SoftenFloatRes_FSUB(N); break; } // If R is null, the sub-method took care of registering the result. @@ -201,6 +202,17 @@ SDOperand DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(SDNode *N) { return MakeLibCall(LC, NVT, &Op, 1, false); } +SDOperand DAGTypeLegalizer::SoftenFloatRes_FPOWI(SDNode *N) { + MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0)); + SDOperand Ops[2] = { GetSoftenedFloat(N->getOperand(0)), N->getOperand(1) }; + return MakeLibCall(GetFPLibCall(N->getValueType(0), + RTLIB::POWI_F32, + RTLIB::POWI_F64, + RTLIB::POWI_F80, + RTLIB::POWI_PPCF128), + NVT, Ops, 2, false); +} + SDOperand DAGTypeLegalizer::SoftenFloatRes_FSUB(SDNode *N) { MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0)); SDOperand Ops[2] = { GetSoftenedFloat(N->getOperand(0)), diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/lib/CodeGen/SelectionDAG/LegalizeTypes.h index eb65e8d7858..50e1e2b4cb4 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeTypes.h +++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.h @@ -336,6 +336,7 @@ private: SDOperand SoftenFloatRes_FMUL(SDNode *N); SDOperand SoftenFloatRes_FP_EXTEND(SDNode *N); SDOperand SoftenFloatRes_FP_ROUND(SDNode *N); + SDOperand SoftenFloatRes_FPOWI(SDNode *N); SDOperand SoftenFloatRes_FSUB(SDNode *N); SDOperand SoftenFloatRes_LOAD(SDNode *N); SDOperand SoftenFloatRes_SELECT(SDNode *N);