diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2006-01-12 19:35:54 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-12 19:35:54 +0000 |
| commit | bd1de8412184c9faae5e53ac3b397e3c1ee97c60 (patch) | |
| tree | 5f67efb6cd1b69d16a22169e0f04b44d4e6c7efb /llvm/utils | |
| parent | 3760e901cf2cf085d8063ff292a2ecb628a38175 (diff) | |
| download | bcm5719-llvm-bd1de8412184c9faae5e53ac3b397e3c1ee97c60.tar.gz bcm5719-llvm-bd1de8412184c9faae5e53ac3b397e3c1ee97c60.zip | |
Allow transformation from GlobalAddress to TargetGlobalAddress and
ExternalSymbol to TargetExternalSymbol.
llvm-svn: 25252
Diffstat (limited to 'llvm/utils')
| -rw-r--r-- | llvm/utils/TableGen/DAGISelEmitter.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/llvm/utils/TableGen/DAGISelEmitter.cpp b/llvm/utils/TableGen/DAGISelEmitter.cpp index ca42679a236..97f7c155253 100644 --- a/llvm/utils/TableGen/DAGISelEmitter.cpp +++ b/llvm/utils/TableGen/DAGISelEmitter.cpp @@ -1826,7 +1826,9 @@ private: unsigned PatternNo; std::ostream &OS; // Node to name mapping - std::map<std::string,std::string> VariableMap; + std::map<std::string, std::string> VariableMap; + // Node to operator mapping + std::map<std::string, Record*> OperatorMap; // Names of all the folded nodes which produce chains. std::vector<std::pair<std::string, unsigned> > FoldedChains; unsigned TmpNo; @@ -1892,6 +1894,9 @@ public: << ") goto P" << PatternNo << "Fail;\n"; return; } + + if (!N->isLeaf()) + OperatorMap[N->getName()] = N->getOperator(); } @@ -2023,20 +2028,26 @@ public: OS << " SDOperand Tmp" << utostr(ResNo) << " = CurDAG->getTargetConstant(Tmp" << ResNo << "C, MVT::" << getEnumName(N->getTypeNum(0)) << ");\n"; - } else if (!N->isLeaf() && N->getOperator()->getName() == "globaladdr") { - OS << " SDOperand Tmp" << ResNo - << " = CurDAG->getTargetGlobalAddress(cast<GlobalAddressSDNode>(" - << Val << ")->getGlobal(), MVT::" << getEnumName(N->getTypeNum(0)) - << ");\n"; - } else if (!N->isLeaf() && N->getOperator()->getName() == "externalsym") { - OS << " SDOperand Tmp" << ResNo - << " = CurDAG->getTargetExternalSymbol(cast<ExternalSymbolSDNode>(" - << Val << ")->getSymbol(), MVT::" << getEnumName(N->getTypeNum(0)) - << ");\n"; } else if (!N->isLeaf() && N->getOperator()->getName() == "texternalsym"){ - OS << " SDOperand Tmp" << ResNo << " = " << Val << ";\n"; + Record *Op = OperatorMap[N->getName()]; + // Transform ExternalSymbol to TargetExternalSymbol + if (Op && Op->getName() == "externalsym") { + OS << " SDOperand Tmp" << ResNo + << " = CurDAG->getTargetExternalSymbol(cast<ExternalSymbolSDNode>(" + << Val << ")->getSymbol(), MVT::" << getEnumName(N->getTypeNum(0)) + << ");\n"; + } else + OS << " SDOperand Tmp" << ResNo << " = " << Val << ";\n"; } else if (!N->isLeaf() && N->getOperator()->getName() == "tglobaladdr") { - OS << " SDOperand Tmp" << ResNo << " = " << Val << ";\n"; + Record *Op = OperatorMap[N->getName()]; + // Transform GlobalAddress to TargetGlobalAddress + if (Op && Op->getName() == "globaladdr") { + OS << " SDOperand Tmp" << ResNo + << " = CurDAG->getTargetGlobalAddress(cast<GlobalAddressSDNode>(" + << Val << ")->getGlobal(), MVT::" << getEnumName(N->getTypeNum(0)) + << ");\n"; + } else + OS << " SDOperand Tmp" << ResNo << " = " << Val << ";\n"; } else if (!N->isLeaf() && N->getOperator()->getName() == "texternalsym"){ OS << " SDOperand Tmp" << ResNo << " = " << Val << ";\n"; } else if (!N->isLeaf() && N->getOperator()->getName() == "tconstpool") { |

