summaryrefslogtreecommitdiffstats
path: root/llvm/utils
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-01-12 19:35:54 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-01-12 19:35:54 +0000
commitbd1de8412184c9faae5e53ac3b397e3c1ee97c60 (patch)
tree5f67efb6cd1b69d16a22169e0f04b44d4e6c7efb /llvm/utils
parent3760e901cf2cf085d8063ff292a2ecb628a38175 (diff)
downloadbcm5719-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.cpp37
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") {
OpenPOWER on IntegriCloud