Add, and start using, the CodeGenInstruction class. This class represents

an instance of the Instruction tablegen class.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15385 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2004-08-01 05:04:00 +00:00
parent c139203f04
commit ec3524064c
5 changed files with 144 additions and 47 deletions

View File

@ -97,3 +97,39 @@ Record *CodeGenTarget::getInstructionSet() const {
return TargetRec->getValueAsDef("InstructionSet");
}
void CodeGenTarget::ReadInstructions() const {
std::vector<Record*> Insts = Records.getAllDerivedDefinitions("Instruction");
if (Insts.size() == 0)
throw std::string("No 'Instruction' subclasses defined!");
for (unsigned i = 0, e = Insts.size(); i != e; ++i)
Instructions.insert(std::make_pair(Insts[i]->getName(), Insts[i]));
}
/// 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;
}
CodeGenInstruction::CodeGenInstruction(Record *R) : TheDef(R) {
Name = R->getValueAsString("Name");
Namespace = R->getValueAsString("Namespace");
AsmString = R->getValueAsString("AsmString");
//TODO: Parse OperandList
isReturn = R->getValueAsBit("isReturn");
isBranch = R->getValueAsBit("isBranch");
isBarrier = R->getValueAsBit("isBarrier");
isCall = R->getValueAsBit("isCall");
isTwoAddress = R->getValueAsBit("isTwoAddress");
isTerminator = R->getValueAsBit("isTerminator");
}