I'm in favor of more tests like this.  Please commit with some minor touch ups.

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.

================
Comment at: test/CodeGen/mozilla-ms-inline-asm.c:10
@@ +9,3 @@
+// CHECK: @invoke
+// CHECK: %that.addr = alloca i8*, align 4
+// CHECK: %methodIndex.addr = alloca i32, align 4
----------------
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.

================
Comment at: test/CodeGen/mozilla-ms-inline-asm.c:18
@@ +17,3 @@
+// CHECK: store i8* %params, i8** %params.addr, align 4
+// 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
+// CHECK: ret void
----------------
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:

  // CHECK: call void asm sideeffect inteldialect
  // CHECK: mov edx,dword ptr $1
  // CHECK: mov ecx,dword ptr $2
  // CHECK: mov eax,dword ptr $3
  // CHECK: call dword ptr[edx+eax*$$4]
  // CHECK: 
"=*m,*m,*m,*m,~{eax},~{ebp},~{ecx},~{edx},~{flags},~{esp},~{dirflag},~{fpsr},~{flags}"
  // CHECK: (i8** %params.addr, i32* %paramCount.addr, i8** %that.addr, i32* 
%methodIndex.addr)

http://reviews.llvm.org/D4508



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to