From ce8aba03eee5ab2eb86d6c21a1feab20433ae1c9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 8 Mar 2007 22:29:47 +0000 Subject: implement support for floating point constants used as inline asm memory operands. llvm-svn: 35033 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'llvm/lib/CodeGen') diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 581b402aeae..62ee06e9422 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -2882,9 +2882,14 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) { } else if (CTy == TargetLowering::C_Memory) { // Memory input. - // Check that the operand isn't a float. + // If the operand is a float, spill to a constant pool entry to get its + // address. + if (ConstantFP *Val = dyn_cast(I.getOperand(OpNum-1))) + InOperandVal = DAG.getConstantPool(Val, TLI.getPointerTy()); + if (!MVT::isInteger(InOperandVal.getValueType())) { - cerr << "Match failed, can't handle floats yet!\n"; + cerr << "Match failed, cannot handle this yet!\n"; + InOperandVal.Val->dump(); exit(1); } -- cgit v1.2.3