Move InstAlias check of argument types to a separate loop.
authorBob Wilson <bob.wilson@apple.com>
Thu, 20 Jan 2011 18:38:10 +0000 (18:38 +0000)
committerBob Wilson <bob.wilson@apple.com>
Thu, 20 Jan 2011 18:38:10 +0000 (18:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123934 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/CodeGenInstruction.cpp

index 59270412438e5676b37b94235e5ae351e83d02f9..241105f9bb89a512767a7004f9afd4b745454110 100644 (file)
@@ -403,6 +403,20 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) {
   // NameClass - If argument names are repeated, we need to verify they have
   // the same class.
   StringMap<Record*> NameClass;
+  for (unsigned i = 0, e = Result->getNumArgs(); i != e; ++i) {
+    DefInit *ADI = dynamic_cast<DefInit*>(Result->getArg(i));
+    if (!ADI || Result->getArgName(i).empty())
+      continue;
+    // Verify we don't have something like: (someinst GR16:$foo, GR32:$foo)
+    // $foo can exist multiple times in the result list, but it must have the
+    // same type.
+    Record *&Entry = NameClass[Result->getArgName(i)];
+    if (Entry && Entry != ADI->getDef())
+      throw TGError(R->getLoc(), "result value $" + Result->getArgName(i) +
+                    " is both " + Entry->getName() + " and " +
+                    ADI->getDef()->getName() + "!");
+    Entry = ADI->getDef();
+  }
     
   // Decode and validate the arguments of the result.
   unsigned AliasOpNo = 0;
@@ -474,17 +488,6 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) {
                       ", instruction operand is class " + 
                       ResultOpRec->getName());
       
-      // Verify we don't have something like: (someinst GR16:$foo, GR32:$foo)
-      // $foo can exist multiple times in the result list, but it must have the
-      // same type.
-      Record *&Entry = NameClass[Result->getArgName(AliasOpNo)];
-      if (Entry && Entry != ADI->getDef())
-        throw TGError(R->getLoc(), "result value $" +
-                      Result->getArgName(AliasOpNo) +
-                      " is both " + Entry->getName() + " and " +
-                      ADI->getDef()->getName() + "!");
-      Entry = ADI->getDef();
-      
       // Now that it is validated, add it.
       ResultOperands.push_back(ResultOperand(Result->getArgName(AliasOpNo),
                                              ADI->getDef()));