From f805c2ed7f8e13c18913a90542f3084a30222e84 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Thu, 12 Jan 2006 19:35:54 +0000 Subject: Allow transformation from GlobalAddress to TargetGlobalAddress and ExternalSymbol to TargetExternalSymbol. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25252 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/DAGISelEmitter.cpp | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) (limited to 'utils/TableGen') diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index ca42679..97f7c15 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -1826,7 +1826,9 @@ private: unsigned PatternNo; std::ostream &OS; // Node to name mapping - std::map VariableMap; + std::map VariableMap; + // Node to operator mapping + std::map OperatorMap; // Names of all the folded nodes which produce chains. std::vector > 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(" - << Val << ")->getGlobal(), MVT::" << getEnumName(N->getTypeNum(0)) - << ");\n"; - } else if (!N->isLeaf() && N->getOperator()->getName() == "externalsym") { - OS << " SDOperand Tmp" << ResNo - << " = CurDAG->getTargetExternalSymbol(cast(" - << 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(" + << 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(" + << 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") { -- cgit v1.1