<div dir="ltr">Hi Matt,<div><br></div><div>This looks sensible to me.</div><div><br></div><div>James</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, 30 Jul 2015 at 07:29 Matt Arsenault <<a href="mailto:Matthew.Arsenault@amd.com">Matthew.Arsenault@amd.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">arsenm created this revision.<br>
arsenm added a subscriber: llvm-commits.<br>
<br>
This is to fix an incorrect error when trying to initialize<br>
DwarfNumbers with a !cast<int> of a bits initializer.<br>
getValuesAsListOfInts("DwarfNumbers") would not see an IntInit<br>
and instead the cast, so would give up.<br>
<br>
It seems likely that this could be generalized to attempt<br>
the convertInitializerTo for any type. I'm not really sure<br>
why the existing code seems to special case the string cast cases<br>
when convertInitializerTo seems like it should generally handle this<br>
sort of thing.<br>
<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D11623&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FTt08Iju8Sif_Z0JI4Y8sf9ZjQTKG_mjoFx9cFa0PBQ&s=meSYFMhHq2AVGpmc03ZnH8wz2SXz1duPzAQnOZDI8tk&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D11623</a><br>
<br>
Files:<br>
  lib/TableGen/Record.cpp<br>
  test/TableGen/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cast-2Dlist-2Dinitializer.td&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FTt08Iju8Sif_Z0JI4Y8sf9ZjQTKG_mjoFx9cFa0PBQ&s=WC61Y6JE7X4anegTfpAUU_nNEcH-32fCLtcONBWWO68&e=" rel="noreferrer" target="_blank">cast-list-initializer.td</a><br>
<br>
Index: test/TableGen/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cast-2Dlist-2Dinitializer.td&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FTt08Iju8Sif_Z0JI4Y8sf9ZjQTKG_mjoFx9cFa0PBQ&s=WC61Y6JE7X4anegTfpAUU_nNEcH-32fCLtcONBWWO68&e=" rel="noreferrer" target="_blank">cast-list-initializer.td</a><br>
===================================================================<br>
--- /dev/null<br>
+++ test/TableGen/<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cast-2Dlist-2Dinitializer.td&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FTt08Iju8Sif_Z0JI4Y8sf9ZjQTKG_mjoFx9cFa0PBQ&s=WC61Y6JE7X4anegTfpAUU_nNEcH-32fCLtcONBWWO68&e=" rel="noreferrer" target="_blank">cast-list-initializer.td</a><br>
@@ -0,0 +1,10 @@<br>
+// RUN: llvm-tblgen %s | FileCheck %s<br>
+<br>
+class Foo<bits<8> b> {<br>
+// CHECK: list<int> ListOfInts = [170];<br>
+// CHECK: list<int> AnotherList = [170, 7];<br>
+  list<int> ListOfInts = [!cast<int>(b)];<br>
+  list<int> AnotherList = [!cast<int>(b), !cast<int>({1, 1, 1})];<br>
+}<br>
+<br>
+def : Foo<{1, 0, 1, 0, 1, 0, 1, 0}>;<br>
Index: lib/TableGen/Record.cpp<br>
===================================================================<br>
--- lib/TableGen/Record.cpp<br>
+++ lib/TableGen/Record.cpp<br>
@@ -673,6 +673,14 @@<br>
         PrintFatalError(CurRec->getLoc(),<br>
                         "Undefined reference:'" + Name + "'\n");<br>
       }<br>
+<br>
+      if (isa<IntRecTy>(getType())) {<br>
+        if (BitsInit *BI = dyn_cast<BitsInit>(LHS)) {<br>
+          if (Init *NewInit = BI->convertInitializerTo(IntRecTy::get()))<br>
+            return NewInit;<br>
+          break;<br>
+        }<br>
+      }<br>
     }<br>
     break;<br>
   }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>