<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Aug 29, 2014 at 12:41 PM, Jean-Luc Duprat <span dir="ltr"><<a href="mailto:jduprat@apple.com" target="_blank">jduprat@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jduprat<br>
Date: Fri Aug 29 14:41:04 2014<br>
New Revision: 216757<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=216757&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=216757&view=rev</a><br>
Log:<br>
Tablegen fixes for new syntax when initializing bits from variables.<br>
Followup to r215086.<br>
<br>
<br>
Modified:<br>
    llvm/trunk/lib/TableGen/TGParser.cpp<br>
    llvm/trunk/test/TableGen/BitsInit.td<br>
<br>
Modified: llvm/trunk/lib/TableGen/TGParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/TGParser.cpp?rev=216757&r1=216756&r2=216757&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/TGParser.cpp?rev=216757&r1=216756&r2=216757&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/TableGen/TGParser.cpp (original)<br>
+++ llvm/trunk/lib/TableGen/TGParser.cpp Fri Aug 29 14:41:04 2014<br>
@@ -1321,6 +1321,15 @@ Init *TGParser::ParseSimpleValue(Record<br>
           NewBits.push_back(BI->getBit((e - i) - 1));<br>
         continue;<br>
       }<br>
+      // bits<n> can also come from variable initializers.<br>
+      if (VarInit *VI = dyn_cast<VarInit>(Vals[i])) {<br>
+        if (BitsRecTy *BitsRec = dyn_cast<BitsRecTy>(VI->getType())) {<br>
+          for (unsigned i = 0, e = BitsRec->getNumBits(); i != e; ++i)<br>
+            NewBits.push_back(VI->getBit((e - i) - 1));<br>
+          continue;<br>
+        }<br>
+        // Fallthrough to try convert this to a bit.<br>
+      }<br></blockquote><div><br></div><div>Please add a FIXME to this loop for removing the duplication with the one just above. That is a valuable use case that reduces the problem space for refactoring the Record.h API's.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       // All other values must be convertible to just a single bit.<br>
       Init *Bit = Vals[i]->convertInitializerTo(BitRecTy::get());<br>
       if (!Bit) {<br>
<br>
Modified: llvm/trunk/test/TableGen/BitsInit.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/BitsInit.td?rev=216757&r1=216756&r2=216757&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/BitsInit.td?rev=216757&r1=216756&r2=216757&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/TableGen/BitsInit.td (original)<br>
+++ llvm/trunk/test/TableGen/BitsInit.td Fri Aug 29 14:41:04 2014<br>
@@ -16,7 +16,7 @@ def a {<br>
 // CHECK:   bits<2> opc = { 0, 1 };<br>
 // CHECK:   bits<2> opc2 = { 1, 0 };<br>
 // CHECK:   bits<1> opc3 = { 1 };<br>
-// CHECK:   bits<2> a = { ?, ? };<br>
+// CHECK:   bits<2> a;<br></blockquote><div><br></div><div>Can you provide an explanation for why this is printing differently with this patch?</div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

 // CHECK:   bits<2> b = { 1, 0 };<br>
 // CHECK:   bits<2> c = { 1, 1 };<br>
 // CHECK: }<br>
@@ -51,6 +51,7 @@ def {<br>
<br>
   bits<16> H;<br>
   let H{15-0} = { { 0b11001100 }, 0b00110011 };<br>
+  bits<16> I = { G1, G2 };<br>
<br>
   // Make sure we can initialise ints with bits<> values.<br>
   int J = H;<br>
@@ -78,6 +79,7 @@ def {<br>
 // CHECK: bits<8> G2 = { 0, 1, 1, 0, 0, 1, 0, 0 };<br>
 // CHECK: bits<8> G3 = { 0, 1, 1, 0, 0, 1, 0, 0 };<br>
 // CHECK: bits<16> H = { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1 };<br>
+// CHECK: bits<16> I = { 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0 };<br>
 // CHECK: int J = 52275;<br>
 // CHECK: int K = 1;<br>
 // CHECK: }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>