Handle the constantfp created during post-legalization dag combiner phase.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78594 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/ARM/ARMISelDAGToDAG.cpp b/lib/Target/ARM/ARMISelDAGToDAG.cpp
index 3304900..823ae2f 100644
--- a/lib/Target/ARM/ARMISelDAGToDAG.cpp
+++ b/lib/Target/ARM/ARMISelDAGToDAG.cpp
@@ -988,6 +988,24 @@
     // Other cases are autogenerated.
     break;
   }
+  case ISD::ConstantFP: {
+    ConstantFPSDNode *CFP = cast<ConstantFPSDNode>(N);
+    MVT VT = CFP->getValueType(0);
+    ConstantFP *LLVMC = const_cast<ConstantFP*>(CFP->getConstantFPValue());
+    SDValue CPIdx = CurDAG->getTargetConstantPool(LLVMC, TLI.getPointerTy());
+    SDNode *ResNode;
+    SDValue Ops[] = {
+      CPIdx, 
+      CurDAG->getTargetConstant(0, MVT::i32),
+      getAL(CurDAG),
+      CurDAG->getRegister(0, MVT::i32),
+      CurDAG->getEntryNode()
+    };
+    unsigned Opc = (VT == MVT::f32) ? ARM::FLDS : ARM::FLDD;
+    ResNode=CurDAG->getTargetNode(Opc, dl, VT, MVT::Other, Ops, 5);
+    ReplaceUses(Op, SDValue(ResNode, 0));
+    return NULL;
+  }
   case ISD::FrameIndex: {
     // Selects to ADDri FI, 0 which in turn will become ADDri SP, imm.
     int FI = cast<FrameIndexSDNode>(N)->getIndex();