xref: /llvm-project/llvm/test/CodeGen/X86/pr23258.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=HAS-RAX
3; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse | FileCheck %s --check-prefix=HAS-RAX
4; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=-sse | FileCheck %s --check-prefix=NO-RAX
5
6define void @foo() {
7; HAS-RAX-LABEL: foo:
8; HAS-RAX:       # %bb.0:
9; HAS-RAX-NEXT:    movl $1, %edi
10; HAS-RAX-NEXT:    xorl %eax, %eax
11; HAS-RAX-NEXT:    jmp bar@PLT # TAILCALL
12;
13; NO-RAX-LABEL: foo:
14; NO-RAX:       # %bb.0:
15; NO-RAX-NEXT:    movl $1, %edi
16; NO-RAX-NEXT:    jmp bar@PLT # TAILCALL
17  tail call void (i32, ...) @bar(i32 1)
18  ret void
19}
20
21define void @bar(i32, ...) nounwind {
22; HAS-RAX-LABEL: bar:
23; HAS-RAX:       # %bb.0:
24; HAS-RAX-NEXT:    subq $56, %rsp
25; HAS-RAX-NEXT:    movq %rsi, -{{[0-9]+}}(%rsp)
26; HAS-RAX-NEXT:    movq %rdx, -{{[0-9]+}}(%rsp)
27; HAS-RAX-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
28; HAS-RAX-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
29; HAS-RAX-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
30; HAS-RAX-NEXT:    testb %al, %al
31; HAS-RAX-NEXT:    je .LBB1_2
32; HAS-RAX-NEXT:  # %bb.1:
33; HAS-RAX-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
34; HAS-RAX-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
35; HAS-RAX-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)
36; HAS-RAX-NEXT:    movaps %xmm3, -{{[0-9]+}}(%rsp)
37; HAS-RAX-NEXT:    movaps %xmm4, -{{[0-9]+}}(%rsp)
38; HAS-RAX-NEXT:    movaps %xmm5, (%rsp)
39; HAS-RAX-NEXT:    movaps %xmm6, {{[0-9]+}}(%rsp)
40; HAS-RAX-NEXT:    movaps %xmm7, {{[0-9]+}}(%rsp)
41; HAS-RAX-NEXT:  .LBB1_2:
42; HAS-RAX-NEXT:    leaq {{[0-9]+}}(%rsp), %rax
43; HAS-RAX-NEXT:    movq %rax, 8
44; HAS-RAX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
45; HAS-RAX-NEXT:    movq %rax, 16
46; HAS-RAX-NEXT:    movl $8, 0
47; HAS-RAX-NEXT:    movl $48, 4
48; HAS-RAX-NEXT:    addq $56, %rsp
49; HAS-RAX-NEXT:    retq
50;
51; NO-RAX-LABEL: bar:
52; NO-RAX:       # %bb.0:
53; NO-RAX-NEXT:    movq %rsi, -{{[0-9]+}}(%rsp)
54; NO-RAX-NEXT:    movq %rdx, -{{[0-9]+}}(%rsp)
55; NO-RAX-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
56; NO-RAX-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
57; NO-RAX-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
58; NO-RAX-NEXT:    leaq {{[0-9]+}}(%rsp), %rax
59; NO-RAX-NEXT:    movq %rax, 8
60; NO-RAX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
61; NO-RAX-NEXT:    movq %rax, 16
62; NO-RAX-NEXT:    movl $8, 0
63; NO-RAX-NEXT:    movl $48, 4
64; NO-RAX-NEXT:    retq
65  call void @llvm.va_start(ptr null)
66  ret void
67}
68
69declare void @llvm.va_start(ptr)
70
71!llvm.module.flags = !{!0}
72!0 = !{i32 4, !"SkipRaxSetup", i32 1}
73