Changes in directory llvm/lib/CodeGen/SelectionDAG:
LegalizeDAG.cpp updated: 1.436 -> 1.437 --- Log message: Expand f32 / f64 to i32 / i64 conversion to soft-fp library calls. --- Diffs of the changes: (+23 -2) LegalizeDAG.cpp | 25 +++++++++++++++++++++++-- 1 files changed, 23 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.436 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.437 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.436 Tue Dec 12 16:19:28 2006 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Tue Dec 12 19:57:55 2006 @@ -2860,8 +2860,29 @@ break; } break; - case Expand: - assert(0 && "Shouldn't need to expand other operators here!"); + case Expand: { + // Convert f32 / f64 to i32 / i64. + MVT::ValueType VT = Op.getValueType(); + const char *FnName = 0; + switch (Node->getOpcode()) { + case ISD::FP_TO_SINT: + if (Node->getOperand(0).getValueType() == MVT::f32) + FnName = (VT == MVT::i32) ? "__fixsfsi" : "__fixsfdi"; + else + FnName = (VT == MVT::i32) ? "__fixdfsi" : "__fixdfdi"; + break; + case ISD::FP_TO_UINT: + if (Node->getOperand(0).getValueType() == MVT::f32) + FnName = (VT == MVT::i32) ? "__fixunssfsi" : "__fixunssfdi"; + else + FnName = (VT == MVT::i32) ? "__fixunsdfsi" : "__fixunsdfdi"; + break; + default: assert(0 && "Unreachable!"); + } + SDOperand Dummy; + Result = ExpandLibCall(FnName, Node, Dummy); + break; + } case Promote: Tmp1 = PromoteOp(Node->getOperand(0)); Result = DAG.UpdateNodeOperands(Result, LegalizeOp(Tmp1)); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits