[PATCH] Upstream an MS inline assembly test from Mozilla's inline assembly code

Ehsan Akhgari ehsan.akhgari at gmail.com
Wed Jul 16 18:05:53 PDT 2014


On Wed, Jul 16, 2014 at 6:28 PM, Reid Kleckner <rnk at google.com> wrote:

> I'm in favor of more tests like this.


Thanks!  Should I submit more?  :-)


> Please commit with some minor touch ups.
>

Will do.


> 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.
>

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?


> ================
> 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140716/ab14d80e/attachment.html>


More information about the cfe-commits mailing list