LegalizeTypes support for powi soft float.
authorDuncan Sands <baldrick@free.fr>
Wed, 9 Jul 2008 11:11:47 +0000 (11:11 +0000)
committerDuncan Sands <baldrick@free.fr>
Wed, 9 Jul 2008 11:11:47 +0000 (11:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53285 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
lib/CodeGen/SelectionDAG/LegalizeTypes.h

index 9b3f723a08e9f8180a21f9400f50cb18f7d59a45..a1489cd101503422a9cccda0a536085570c1af0a 100644 (file)
@@ -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)),
index eb65e8d78588d541de16693548ae4ac32e67d002..50e1e2b4cb46b38dec056f2b69f0befe73ceff97 100644 (file)
@@ -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);