diff options
author | Chris Lattner <sabre@nondot.org> | 2007-10-20 22:57:56 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-10-20 22:57:56 +0000 |
commit | 36f06c80e661a61c4c8bfd4c4cd3d4e45ea9eca1 (patch) | |
tree | 47eab99fb50dbad79048d91c97edd2db9340ef30 /llvm/lib | |
parent | 18be874e6780db2aa074338b0c4286409505ecda (diff) | |
download | bcm5719-llvm-36f06c80e661a61c4c8bfd4c4cd3d4e45ea9eca1.tar.gz bcm5719-llvm-36f06c80e661a61c4c8bfd4c4cd3d4e45ea9eca1.zip |
Add promote operand support for [su]int_to_fp.
llvm-svn: 43204
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp index f24ecbac899..aa2a91426d2 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp @@ -185,6 +185,7 @@ private: SDOperand PromoteOperand_TRUNCATE(SDNode *N); SDOperand PromoteOperand_FP_EXTEND(SDNode *N); SDOperand PromoteOperand_FP_ROUND(SDNode *N); + SDOperand PromoteOperand_INT_TO_FP(SDNode *N); SDOperand PromoteOperand_SELECT(SDNode *N, unsigned OpNo); SDOperand PromoteOperand_BRCOND(SDNode *N, unsigned OpNo); SDOperand PromoteOperand_BR_CC(SDNode *N, unsigned OpNo); @@ -1326,6 +1327,8 @@ bool DAGTypeLegalizer::PromoteOperand(SDNode *N, unsigned OpNo) { case ISD::TRUNCATE: Res = PromoteOperand_TRUNCATE(N); break; case ISD::FP_EXTEND: Res = PromoteOperand_FP_EXTEND(N); break; case ISD::FP_ROUND: Res = PromoteOperand_FP_ROUND(N); break; + case ISD::SINT_TO_FP: + case ISD::UINT_TO_FP: Res = PromoteOperand_INT_TO_FP(N); break; case ISD::SELECT: Res = PromoteOperand_SELECT(N, OpNo); break; case ISD::BRCOND: Res = PromoteOperand_BRCOND(N, OpNo); break; @@ -1390,6 +1393,18 @@ SDOperand DAGTypeLegalizer::PromoteOperand_FP_ROUND(SDNode *N) { return DAG.getNode(ISD::FP_ROUND, N->getValueType(0), Op); } +SDOperand DAGTypeLegalizer::PromoteOperand_INT_TO_FP(SDNode *N) { + SDOperand In = GetPromotedOp(N->getOperand(0)); + MVT::ValueType OpVT = N->getOperand(0).getValueType(); + if (N->getOpcode() == ISD::UINT_TO_FP) + In = DAG.getZeroExtendInReg(In, OpVT); + else + In = DAG.getNode(ISD::SIGN_EXTEND_INREG, In.getValueType(), + In, DAG.getValueType(OpVT)); + + return DAG.UpdateNodeOperands(SDOperand(N, 0), In); +} + SDOperand DAGTypeLegalizer::PromoteOperand_SELECT(SDNode *N, unsigned OpNo) { assert(OpNo == 0 && "Only know how to promote condition"); |