From: Dan Gohman Date: Wed, 20 Aug 2008 21:45:57 +0000 (+0000) Subject: Factor the code for determining the target-specific instruction X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1e0ee4bc38e9cdc7e7ac49968527e2c05f927904;p=oota-llvm.git Factor the code for determining the target-specific instruction namespace out of the isel emitters and into common code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55079 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp index d9f4c3e3413..4e7a10c1d81 100644 --- a/utils/TableGen/CodeGenTarget.cpp +++ b/utils/TableGen/CodeGenTarget.cpp @@ -135,6 +135,21 @@ const std::string &CodeGenTarget::getName() const { return TargetRec->getName(); } +std::string CodeGenTarget::getInstNamespace() const { + std::string InstNS; + + for (inst_iterator i = inst_begin(), e = inst_end(); i != e; ++i) { + InstNS = i->second.Namespace; + + // Make sure not to pick up "TargetInstrInfo" by accidentally getting + // the namespace off the PHI instruction or something. + if (InstNS != "TargetInstrInfo") + break; + } + + return InstNS; +} + Record *CodeGenTarget::getInstructionSet() const { return TargetRec->getValueAsDef("InstructionSet"); } diff --git a/utils/TableGen/CodeGenTarget.h b/utils/TableGen/CodeGenTarget.h index f53b6a99c15..ef46b6c6185 100644 --- a/utils/TableGen/CodeGenTarget.h +++ b/utils/TableGen/CodeGenTarget.h @@ -78,6 +78,10 @@ public: Record *getTargetRecord() const { return TargetRec; } const std::string &getName() const; + /// getInstNamespace - Return the target-specific instruction namespace. + /// + std::string getInstNamespace() const; + /// getInstructionSet - Return the InstructionSet object. /// Record *getInstructionSet() const; diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 9f0f155a7fc..12667d5656f 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -1604,17 +1604,8 @@ static std::string getLegalCName(std::string OpName) { void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { const CodeGenTarget &Target = CGP.getTargetInfo(); - // Get the namespace to insert instructions into. Make sure not to pick up - // "TargetInstrInfo" by accidentally getting the namespace off the PHI - // instruction or something. - std::string InstNS; - for (CodeGenTarget::inst_iterator i = Target.inst_begin(), - e = Target.inst_end(); i != e; ++i) { - InstNS = i->second.Namespace; - if (InstNS != "TargetInstrInfo") - break; - } - + // Get the namespace to insert instructions into. + std::string InstNS = Target.getInstNamespace(); if (!InstNS.empty()) InstNS += "::"; // Group the patterns by their top-level opcodes. diff --git a/utils/TableGen/FastISelEmitter.cpp b/utils/TableGen/FastISelEmitter.cpp index 9650ea8855b..7edd5fca420 100644 --- a/utils/TableGen/FastISelEmitter.cpp +++ b/utils/TableGen/FastISelEmitter.cpp @@ -157,13 +157,7 @@ void FastISelEmitter::run(std::ostream &OS) { // Get the namespace to insert instructions into. Make sure not to pick up // "TargetInstrInfo" by accidentally getting the namespace off the PHI // instruction or something. - std::string InstNS; - for (CodeGenTarget::inst_iterator i = Target.inst_begin(), - e = Target.inst_end(); i != e; ++i) { - InstNS = i->second.Namespace; - if (InstNS != "TargetInstrInfo") - break; - } + std::string InstNS = Target.getInstNamespace(); OS << "namespace llvm {\n"; OS << "namespace " << InstNS << " {\n";