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