PHI and INLINEASM are now builtin instructions provided by Target.td
authorChris Lattner <sabre@nondot.org>
Fri, 27 Jan 2006 01:45:06 +0000 (01:45 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 27 Jan 2006 01:45:06 +0000 (01:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25673 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/CodeGenTarget.cpp
utils/TableGen/CodeGenTarget.h

index d7925480f0e50e83f70095f7b7982b8e0ded53a8..df271d15b14e7ec3859424b212789a6a61773bc9 100644 (file)
@@ -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);
 }
 
index c7958d5a4763f5d7d804554562982bf081f368f8..8a4367ad1dd54df83fb47cd184fc8314786501c7 100644 (file)
@@ -148,10 +148,6 @@ public:
                                                 &NumberedInstructions);
 
 
-  /// getPHIInstruction - Return the designated PHI instruction.
-  ///
-  const CodeGenInstruction &getPHIInstruction() const;
-
   /// isLittleEndianEncoding - are instruction bit patterns defined as  [0..n]?
   ///
   bool isLittleEndianEncoding() const;