Implement some more missing promotions.
authorChris Lattner <sabre@nondot.org>
Sun, 16 Jan 2005 05:06:12 +0000 (05:06 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 16 Jan 2005 05:06:12 +0000 (05:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19606 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index d71eb7e433cf104a4b98f200d31746870f6bbe43..754d5a881c65345fd11423e26aae6811bc333dee 100644 (file)
@@ -248,9 +248,12 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
       
       SDOperand CPIdx = DAG.getConstantPool(CP->getConstantPoolIndex(LLVMC),
                                             TLI.getPointerTy());
-      Result = DAG.getLoad(VT, DAG.getEntryNode(), CPIdx);
-      
-      if (Extend) Result = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Result);
+      if (Extend) {
+        Result = DAG.getNode(ISD::EXTLOAD, MVT::f64, DAG.getEntryNode(), CPIdx,
+                             MVT::f32);
+      } else {
+        Result = DAG.getLoad(VT, DAG.getEntryNode(), CPIdx);
+      }
     }
     break;
   }
@@ -745,15 +748,23 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
           Result = DAG.getNode(ISD::FP_EXTEND, Op.getValueType(), Result);
         break;
       case ISD::FP_ROUND:
-        Result = PromoteOp(Node->getOperand(0));
-        Result = DAG.getNode(ISD::FP_ROUND, Op.getValueType(), Result);
-        break;
       case ISD::FP_TO_SINT:
       case ISD::FP_TO_UINT:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(Node->getOpcode(), Op.getValueType(), Result);
+        break;
       case ISD::SINT_TO_FP:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
+                             Result, Node->getOperand(0).getValueType());
+        Result = DAG.getNode(ISD::SINT_TO_FP, Op.getValueType(), Result);
+        break;
       case ISD::UINT_TO_FP:
-        Node->dump();
-        assert(0 && "Do not know how to promote this yet!");
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::ZERO_EXTEND_INREG, Result.getValueType(),
+                             Result, Node->getOperand(0).getValueType());
+        Result = DAG.getNode(ISD::UINT_TO_FP, Op.getValueType(), Result);
+        break;
       }
     }
     break;