[llvm-commits] [llvm] r106570 - in /llvm/trunk: test/TableGen/defmclass.td utils/TableGen/TGParser.cpp

Bruno Cardoso Lopes bruno.cardoso at gmail.com
Tue Jun 22 13:30:51 PDT 2010


Author: bruno
Date: Tue Jun 22 15:30:50 2010
New Revision: 106570

URL: http://llvm.org/viewvc/llvm-project?rev=106570&view=rev
Log:
Fix a subtle multiclass bug: when using class inheritance on
a toplevel 'defm', make sure to properly resolve references.


Modified:
    llvm/trunk/test/TableGen/defmclass.td
    llvm/trunk/utils/TableGen/TGParser.cpp

Modified: llvm/trunk/test/TableGen/defmclass.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/defmclass.td?rev=106570&r1=106569&r2=106570&view=diff
==============================================================================
--- llvm/trunk/test/TableGen/defmclass.td (original)
+++ llvm/trunk/test/TableGen/defmclass.td Tue Jun 22 15:30:50 2010
@@ -16,6 +16,7 @@
 class I<bits<4> op> : BaseI {
   bits<4> opcode = op;
   int val = !if(!eq(Prefix, xd.Prefix), 7, 21);
+  int check = !if(hasVEX_4VPrefix, 0, 10);
 }
 
 multiclass R {
@@ -33,4 +34,5 @@
   defm SD : R, M, XS;
 }
 
+// CHECK: int check = 0;
 defm Instr : Y, VEX;

Modified: llvm/trunk/utils/TableGen/TGParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGParser.cpp?rev=106570&r1=106569&r2=106570&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/TGParser.cpp (original)
+++ llvm/trunk/utils/TableGen/TGParser.cpp Tue Jun 22 15:30:50 2010
@@ -2020,7 +2020,6 @@
         }
       } else {
         Records.addDef(CurRec);
-        CurRec->resolveReferences();
       }
 
       NewRecDefs.push_back(CurRec);
@@ -2064,9 +2063,6 @@
             if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
                          LetStack[i][j].Bits, LetStack[i][j].Value))
               return true;
-
-        if (!CurMultiClass)
-          CurRec->resolveReferences();
       }
 
       if (Lex.getCode() != tgtok::comma) break;
@@ -2075,6 +2071,10 @@
     }
   }
 
+  if (!CurMultiClass)
+    for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i)
+      NewRecDefs[i]->resolveReferences();
+
   if (Lex.getCode() != tgtok::semi)
     return TokError("expected ';' at end of defm");
   Lex.Lex();





More information about the llvm-commits mailing list