aboutsummaryrefslogtreecommitdiff
path: root/utils/TableGen/CodeGenTarget.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-01-27 01:45:06 +0000
committerChris Lattner <sabre@nondot.org>2006-01-27 01:45:06 +0000
commitaa77d77a431ec5d2946df2bee33fe2023ca508d6 (patch)
tree9e392de10f3b9860eba0de676ae564f877255ff5 /utils/TableGen/CodeGenTarget.cpp
parentf52e2618f3992aa673c738aa1d2e6c046a0b6f5a (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.cpp30
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);
}