diff options
author | Chris Lattner <sabre@nondot.org> | 2005-09-28 16:58:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-09-28 16:58:06 +0000 |
commit | f6f941636355652c60349fdb33bf5c5aa01226fa (patch) | |
tree | fe7b24c8ad29425209ccb6dbad68252afa817c3f | |
parent | 32643d8e057b8ef58b1d8c915e458926f3593bdf (diff) |
Select Constant nodes to TargetConstant nodes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23488 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | utils/TableGen/DAGISelEmitter.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 27c0dfab2e..e915ee5793 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -1088,14 +1088,28 @@ CodeGenPatternResult(TreePatternNode *N, unsigned &Ctr, if (Val[0] == 'T' && Val[1] == 'm' && Val[2] == 'p') { // Already selected this operand, just return the tmpval. return atoi(Val.c_str()+3); + } + + unsigned ResNo = Ctr++; + if (!N->isLeaf() && N->getOperator()->getName() == "imm") { + switch (N->getType()) { + default: assert(0 && "Unknown type for constant node!"); + case MVT::i1: OS << " bool Tmp"; break; + case MVT::i8: OS << " unsigned char Tmp"; break; + case MVT::i16: OS << " unsigned short Tmp"; break; + case MVT::i32: OS << " unsigned Tmp"; break; + case MVT::i64: OS << " uint64_t Tmp"; break; + } + OS << ResNo << "C = cast<ConstantSDNode>(" << Val << ")->getValue();\n"; + OS << " SDOperand Tmp" << ResNo << " = CurDAG->getTargetConstant(Tmp" + << ResNo << "C, MVT::" << getEnumName(N->getType()) << ");\n"; } else { - unsigned ResNo = Ctr++; OS << " SDOperand Tmp" << ResNo << " = Select(" << Val << ");\n"; - // Add Tmp<ResNo> to VariableMap, so that we don't multiply select this - // value if used multiple times by this pattern result. - Val = "Tmp"+utostr(ResNo); - return ResNo; } + // Add Tmp<ResNo> to VariableMap, so that we don't multiply select this + // value if used multiple times by this pattern result. + Val = "Tmp"+utostr(ResNo); + return ResNo; } if (N->isLeaf()) { |