diff options
author | Chris Lattner <sabre@nondot.org> | 2006-01-27 01:45:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-01-27 01:45:06 +0000 |
commit | aa77d77a431ec5d2946df2bee33fe2023ca508d6 (patch) | |
tree | 9e392de10f3b9860eba0de676ae564f877255ff5 /utils/TableGen/CodeGenTarget.cpp | |
parent | f52e2618f3992aa673c738aa1d2e6c046a0b6f5a (diff) |
PHI and INLINEASM are now builtin instructions provided by Target.td
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25673 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenTarget.cpp')
-rw-r--r-- | utils/TableGen/CodeGenTarget.cpp | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp index d7925480f0..df271d15b1 100644 --- a/utils/TableGen/CodeGenTarget.cpp +++ b/utils/TableGen/CodeGenTarget.cpp @@ -205,10 +205,10 @@ void CodeGenTarget::ReadLegalValueTypes() const { void CodeGenTarget::ReadInstructions() const { std::vector<Record*> Insts = Records.getAllDerivedDefinitions("Instruction"); - - if (Insts.empty()) + if (Insts.size() <= 2) throw std::string("No 'Instruction' subclasses defined!"); + // Parse the instructions defined in the .td file. std::string InstFormatName = getAsmWriter()->getValueAsString("InstFormatName"); @@ -219,29 +219,25 @@ void CodeGenTarget::ReadInstructions() const { } } -/// getPHIInstruction - Return the designated PHI instruction. -/// -const CodeGenInstruction &CodeGenTarget::getPHIInstruction() const { - Record *PHI = getInstructionSet()->getValueAsDef("PHIInst"); - std::map<std::string, CodeGenInstruction>::const_iterator I = - getInstructions().find(PHI->getName()); - if (I == Instructions.end()) - throw "Could not find PHI instruction named '" + PHI->getName() + "'!"; - return I->second; -} - /// getInstructionsByEnumValue - Return all of the instructions defined by the /// target, ordered by their enum value. void CodeGenTarget:: getInstructionsByEnumValue(std::vector<const CodeGenInstruction*> &NumberedInstructions) { - + std::map<std::string, CodeGenInstruction>::const_iterator I; + I = getInstructions().find("PHI"); + if (I == Instructions.end()) throw "Could not find 'PHI' instruction!"; + const CodeGenInstruction *PHI = &I->second; + + I = getInstructions().find("INLINEASM"); + if (I == Instructions.end()) throw "Could not find 'INLINEASM' instruction!"; + const CodeGenInstruction *INLINEASM = &I->second; + // Print out the rest of the instructions now. - unsigned i = 0; - const CodeGenInstruction *PHI = &getPHIInstruction(); NumberedInstructions.push_back(PHI); + NumberedInstructions.push_back(INLINEASM); for (inst_iterator II = inst_begin(), E = inst_end(); II != E; ++II) - if (&II->second != PHI) + if (&II->second != PHI &&&II->second != INLINEASM) NumberedInstructions.push_back(&II->second); } |