<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 16, 2014 at 6:28 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I'm in favor of more tests like this.</blockquote><div><br></div><div>Thanks!  Should I submit more?  :-)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Please commit with some minor touch ups.<br></blockquote><div><br></div><div>Will do.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Going forward, I wonder if we can test this on the LLVM side by adding some kind of utility that parses a .test file with some "inline assembly" in a dirt simple language that mostly consists of canned lookup results.  Then we could actually test the Intel inline assembly parser changes in LLVM instead of in Clang.  Right now it's completely untestable.<br>

</blockquote><div><br></div><div>Yeah I was wondering what we can do to test these things in LLVM too.  I like your idea but I'm not sure how much time and effort doing that would take...  Are there any similar tools that I can take a look at to get an idea?<br>

</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
================<br>
Comment at: test/CodeGen/mozilla-ms-inline-asm.c:10<br>
@@ +9,3 @@<br>
<div class="">+// CHECK: @invoke<br>
+// CHECK: %that.addr = alloca i8*, align 4<br>
+// CHECK: %methodIndex.addr = alloca i32, align 4<br>
</div>----------------<br>
Most of these LLVM IR value names are elided in a no-asserts (NDEBUG) build.  You can approximate this effect without doing a complete release build and test cycle by piping the IR through 'opt -strip -S' before FileCheck.<br>


<br>
================<br>
Comment at: test/CodeGen/mozilla-ms-inline-asm.c:18<br>
@@ +17,3 @@<br>
<div class="">+// CHECK: store i8* %params, i8** %params.addr, align 4<br>
+// CHECK: call void asm sideeffect inteldialect "mov edx,dword ptr $1\0A\09test edx,edx\0A\09jz noparams\0A\09mov eax,edx\0A\09shl eax,$$3\0A\09sub esp,eax\0A\09mov ecx,esp\0A\09push dword ptr $0\0A\09call invoke_copy_to_stack\0A\09noparams:\0A\09mov ecx,dword ptr $2\0A\09push ecx\0A\09mov edx,[ecx]\0A\09mov eax,dword ptr $3\0A\09call dword ptr[edx+eax*$$4]\0A\09mov esp,ebp\0A\09pop ebp\0A\09ret", "=*m,*m,*m,*m,~{eax},~{ebp},~{ecx},~{edx},~{flags},~{esp},~{dirflag},~{fpsr},~{flags}"(i8** %params.addr, i32* %paramCount.addr, i8** %that.addr, i32* %methodIndex.addr) #1<br>


+// CHECK: ret void<br>
</div>----------------<br>
I would wildcard most of the string literal contents.  The only thing worth testing is the instructions that got rewritten and the constraints.  Maybe some CHECK lines like:<br>
<div class=""><br>
  // CHECK: call void asm sideeffect inteldialect<br>
</div>  // CHECK: mov edx,dword ptr $1<br>
  // CHECK: mov ecx,dword ptr $2<br>
  // CHECK: mov eax,dword ptr $3<br>
  // CHECK: call dword ptr[edx+eax*$$4]<br>
  // CHECK: "=*m,*m,*m,*m,~{eax},~{ebp},~{ecx},~{edx},~{flags},~{esp},~{dirflag},~{fpsr},~{flags}"<br>
  // CHECK: (i8** %params.addr, i32* %paramCount.addr, i8** %that.addr, i32* %methodIndex.addr)<br>
<br>
<a href="http://reviews.llvm.org/D4508" target="_blank">http://reviews.llvm.org/D4508</a><br>
<br>
<br>
</blockquote></div><br></div></div>