diff options
Diffstat (limited to 'test/CodeGen/X86/win64_eh.ll')
-rw-r--r-- | test/CodeGen/X86/win64_eh.ll | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/test/CodeGen/X86/win64_eh.ll b/test/CodeGen/X86/win64_eh.ll index f1f874e..b67ad58 100644 --- a/test/CodeGen/X86/win64_eh.ll +++ b/test/CodeGen/X86/win64_eh.ll @@ -1,5 +1,6 @@ -; RUN: llc < %s -O0 -mcpu=corei7 -mtriple=x86_64-pc-win32 | FileCheck %s -check-prefix=WIN64 -; RUN: llc < %s -O0 -mcpu=corei7 -mtriple=x86_64-pc-mingw32 | FileCheck %s -check-prefix=WIN64 +; RUN: llc < %s -O0 -mattr=sse2 -mtriple=x86_64-pc-windows-itanium | FileCheck %s -check-prefix=WIN64 -check-prefix=NORM +; RUN: llc < %s -O0 -mattr=sse2 -mtriple=x86_64-pc-mingw32 | FileCheck %s -check-prefix=WIN64 -check-prefix=NORM +; RUN: llc < %s -O0 -mattr=sse2 -mtriple=x86_64-pc-mingw32 -mcpu=atom | FileCheck %s -check-prefix=WIN64 -check-prefix=ATOM ; Check function without prolog define void @foo0() uwtable { @@ -20,7 +21,8 @@ entry: } ; WIN64-LABEL: foo1: ; WIN64: .seh_proc foo1 -; WIN64: subq $4000, %rsp +; NORM: subq $4000, %rsp +; ATOM: leaq -4000(%rsp), %rsp ; WIN64: .seh_stackalloc 4000 ; WIN64: .seh_endprologue ; WIN64: addq $4000, %rsp @@ -35,7 +37,7 @@ entry: } ; WIN64-LABEL: foo2: ; WIN64: .seh_proc foo2 -; WIN64: movabsq $8000, %rax +; WIN64: movl $8000, %eax ; WIN64: callq {{__chkstk|___chkstk_ms}} ; WIN64: subq %rax, %rsp ; WIN64: .seh_stackalloc 8000 @@ -83,7 +85,8 @@ entry: ; WIN64: .seh_proc foo3 ; WIN64: pushq %rsi ; WIN64: .seh_pushreg 6 -; WIN64: subq $24, %rsp +; NORM: subq $24, %rsp +; ATOM: leaq -24(%rsp), %rsp ; WIN64: .seh_stackalloc 24 ; WIN64: .seh_endprologue ; WIN64: addq $24, %rsp @@ -126,7 +129,8 @@ endtryfinally: ; WIN64-LABEL: foo4: ; WIN64: .seh_proc foo4 ; WIN64: .seh_handler _d_eh_personality, @unwind, @except -; WIN64: subq $56, %rsp +; NORM: subq $56, %rsp +; ATOM: leaq -56(%rsp), %rsp ; WIN64: .seh_stackalloc 56 ; WIN64: .seh_endprologue ; WIN64: addq $56, %rsp @@ -146,23 +150,24 @@ entry: ; WIN64: .seh_proc foo5 ; WIN64: pushq %rbp ; WIN64: .seh_pushreg 5 -; WIN64: movq %rsp, %rbp ; WIN64: pushq %rdi ; WIN64: .seh_pushreg 7 ; WIN64: pushq %rbx ; WIN64: .seh_pushreg 3 -; WIN64: andq $-64, %rsp -; WIN64: subq $128, %rsp -; WIN64: .seh_stackalloc 48 -; WIN64: .seh_setframe 5, 64 -; WIN64: movaps %xmm7, -32(%rbp) # 16-byte Spill -; WIN64: movaps %xmm6, -48(%rbp) # 16-byte Spill -; WIN64: .seh_savexmm 6, 16 -; WIN64: .seh_savexmm 7, 32 +; NORM: subq $96, %rsp +; ATOM: leaq -96(%rsp), %rsp +; WIN64: .seh_stackalloc 96 +; WIN64: leaq 96(%rsp), %rbp +; WIN64: .seh_setframe 5, 96 +; WIN64: movaps %xmm7, -16(%rbp) # 16-byte Spill +; WIN64: .seh_savexmm 7, 80 +; WIN64: movaps %xmm6, -32(%rbp) # 16-byte Spill +; WIN64: .seh_savexmm 6, 64 ; WIN64: .seh_endprologue -; WIN64: movaps -48(%rbp), %xmm6 # 16-byte Reload -; WIN64: movaps -32(%rbp), %xmm7 # 16-byte Reload -; WIN64: leaq -16(%rbp), %rsp +; WIN64: andq $-64, %rsp +; WIN64: movaps -32(%rbp), %xmm6 # 16-byte Reload +; WIN64: movaps -16(%rbp), %xmm7 # 16-byte Reload +; WIN64: movq %rbp, %rsp ; WIN64: popq %rbx ; WIN64: popq %rdi ; WIN64: popq %rbp |