diff options
Diffstat (limited to 'test/CodeGen/X86/win64_nonvol.ll')
-rw-r--r-- | test/CodeGen/X86/win64_nonvol.ll | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGen/X86/win64_nonvol.ll b/test/CodeGen/X86/win64_nonvol.ll new file mode 100644 index 0000000..8e5f6ce --- /dev/null +++ b/test/CodeGen/X86/win64_nonvol.ll @@ -0,0 +1,28 @@ +; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck %s +; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck %s + +; Check that, if a Win64 ABI function calls a SysV ABI function, all the +; Win64 nonvolatile registers get saved. + +; CHECK-LABEL: bar: +define x86_64_win64cc void @bar(i32 %a, i32 %b) { +; CHECK-DAG: pushq %rdi +; CHECK-DAG: pushq %rsi +; CHECK-DAG: movaps %xmm6, +; CHECK-DAG: movaps %xmm7, +; CHECK-DAG: movaps %xmm8, +; CHECK-DAG: movaps %xmm9, +; CHECK-DAG: movaps %xmm10, +; CHECK-DAG: movaps %xmm11, +; CHECK-DAG: movaps %xmm12, +; CHECK-DAG: movaps %xmm13, +; CHECK-DAG: movaps %xmm14, +; CHECK-DAG: movaps %xmm15, +; CHECK: callq foo +; CHECK: ret + call x86_64_sysvcc void @foo(i32 %a, i32 %b) + ret void +} + +declare x86_64_sysvcc void @foo(i32 %a, i32 %b) + |