diff options
Diffstat (limited to 'lib/CodeGen/SelectionDAG/LegalizeTypes.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index d13fefab43..cc9caf0718 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -79,6 +79,9 @@ void DAGTypeLegalizer::run() { case Expand: ExpandResult(N, i); goto NodeDone; + case FloatToInt: + FloatToIntResult(N, i); + goto NodeDone; case Scalarize: ScalarizeResult(N, i); goto NodeDone; @@ -106,6 +109,9 @@ void DAGTypeLegalizer::run() { case Expand: NeedsRevisit = ExpandOperand(N, i); break; + case FloatToInt: + NeedsRevisit = FloatToIntOperand(N, i); + break; case Scalarize: NeedsRevisit = ScalarizeOperand(N, i); break; @@ -355,6 +361,14 @@ void DAGTypeLegalizer::SetPromotedOp(SDOperand Op, SDOperand Result) { OpEntry = Result; } +void DAGTypeLegalizer::SetIntegerOp(SDOperand Op, SDOperand Result) { + AnalyzeNewNode(Result.Val); + + SDOperand &OpEntry = FloatToIntedNodes[Op]; + assert(OpEntry.Val == 0 && "Node is already converted to integer!"); + OpEntry = Result; +} + void DAGTypeLegalizer::SetScalarizedOp(SDOperand Op, SDOperand Result) { AnalyzeNewNode(Result.Val); @@ -363,7 +377,6 @@ void DAGTypeLegalizer::SetScalarizedOp(SDOperand Op, SDOperand Result) { OpEntry = Result; } - void DAGTypeLegalizer::GetExpandedOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi) { std::pair<SDOperand, SDOperand> &Entry = ExpandedNodes[Op]; @@ -408,6 +421,13 @@ void DAGTypeLegalizer::SetSplitOp(SDOperand Op, SDOperand Lo, SDOperand Hi) { } +/// BitConvertToInteger - Convert to an integer of the same size. +SDOperand DAGTypeLegalizer::BitConvertToInteger(SDOperand Op) { + return DAG.getNode(ISD::BIT_CONVERT, + MVT::getIntegerType(MVT::getSizeInBits(Op.getValueType())), + Op); +} + SDOperand DAGTypeLegalizer::CreateStackStoreLoad(SDOperand Op, MVT::ValueType DestVT) { // Create the stack frame object. |