; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=LIN-REF
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+push2pop2 | FileCheck %s --check-prefix=LIN
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=LIN-PPX
; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefix=WIN-REF
; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=+push2pop2 | FileCheck %s --check-prefix=WIN
; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=WIN-PPX
define i32 @csr6_alloc16(ptr %argv) {
; LIN-REF-LABEL: csr6_alloc16:
; LIN-REF: # %bb.0: # %entry
; LIN-REF-NEXT: pushq %rbp
; LIN-REF-NEXT: .cfi_def_cfa_offset 16
; LIN-REF-NEXT: pushq %r15
; LIN-REF-NEXT: .cfi_def_cfa_offset 24
; LIN-REF-NEXT: pushq %r14
; LIN-REF-NEXT: .cfi_def_cfa_offset 32
; LIN-REF-NEXT: pushq %r13
; LIN-REF-NEXT: .cfi_def_cfa_offset 40
; LIN-REF-NEXT: pushq %r12
; LIN-REF-NEXT: .cfi_def_cfa_offset 48
; LIN-REF-NEXT: pushq %rbx
; LIN-REF-NEXT: .cfi_def_cfa_offset 56
; LIN-REF-NEXT: subq $24, %rsp
; LIN-REF-NEXT: .cfi_def_cfa_offset 80
; LIN-REF-NEXT: .cfi_offset %rbx, -56
; LIN-REF-NEXT: .cfi_offset %r12, -48
; LIN-REF-NEXT: .cfi_offset %r13, -40
; LIN-REF-NEXT: .cfi_offset %r14, -32
; LIN-REF-NEXT: .cfi_offset %r15, -24
; LIN-REF-NEXT: .cfi_offset %rbp, -16
; LIN-REF-NEXT: #APP
; LIN-REF-NEXT: #NO_APP
; LIN-REF-NEXT: xorl %ecx, %ecx
; LIN-REF-NEXT: xorl %eax, %eax
; LIN-REF-NEXT: callq *%rcx
; LIN-REF-NEXT: addq $24, %rsp
; LIN-REF-NEXT: .cfi_def_cfa_offset 56
; LIN-REF-NEXT: popq %rbx
; LIN-REF-NEXT: .cfi_def_cfa_offset 48
; LIN-REF-NEXT: popq %r12
; LIN-REF-NEXT: .cfi_def_cfa_offset 40
; LIN-REF-NEXT: popq %r13
; LIN-REF-NEXT: .cfi_def_cfa_offset 32
; LIN-REF-NEXT: popq %r14
; LIN-REF-NEXT: .cfi_def_cfa_offset 24
; LIN-REF-NEXT: popq %r15
; LIN-REF-NEXT: .cfi_def_cfa_offset 16
; LIN-REF-NEXT: popq %rbp
; LIN-REF-NEXT: .cfi_def_cfa_offset 8
; LIN-REF-NEXT: retq
;
; LIN-LABEL: csr6_alloc16:
; LIN: # %bb.0: # %entry
; LIN-NEXT: pushq %rax
; LIN-NEXT: .cfi_def_cfa_offset 16
; LIN-NEXT: push2 %r15, %rbp
; LIN-NEXT: .cfi_def_cfa_offset 32
; LIN-NEXT: push2 %r13, %r14
; LIN-NEXT: .cfi_def_cfa_offset 48
; LIN-NEXT: push2 %rbx, %r12
; LIN-NEXT: .cfi_def_cfa_offset 64
; LIN-NEXT: subq $32, %rsp
; LIN-NEXT: .cfi_def_cfa_offset 96
; LIN-NEXT: .cfi_offset %rbx, -64
; LIN-NEXT: .cfi_offset %r12, -56
; LIN-NEXT: .cfi_offset %r13, -48
; LIN-NEXT: .cfi_offset %r14, -40
; LIN-NEXT: .cfi_offset %r15, -32
; LIN-NEXT: .cfi_offset %rbp, -24
; LIN-NEXT: #APP
; LIN-NEXT: #NO_APP
; LIN-NEXT: xorl %ecx, %ecx
; LIN-NEXT: xorl %eax, %eax
; LIN-NEXT: callq *%rcx
; LIN-NEXT: addq $32, %rsp
; LIN-NEXT: .cfi_def_cfa_offset 64
; LIN-NEXT: pop2 %r12, %rbx
; LIN-NEXT: .cfi_def_cfa_offset 48
; LIN-NEXT: pop2 %r14, %r13
; LIN-NEXT: .cfi_def_cfa_offset 32
; LIN-NEXT: pop2 %rbp, %r15
; LIN-NEXT: .cfi_def_cfa_offset 16
; LIN-NEXT: popq %rcx
; LIN-NEXT: .cfi_def_cfa_offset 8
; LIN-NEXT: retq
;
; LIN-PPX-LABEL: csr6_alloc16:
; LIN-PPX: # %bb.0: # %entry
; LIN-PPX-NEXT: pushq %rax
; LIN-PPX-NEXT: .cfi_def_cfa_offset 16
; LIN-PPX-NEXT: push2p %r15, %rbp
; LIN-PPX-NEXT: .cfi_def_cfa_offset 32
; LIN-PPX-NEXT: push2p %r13, %r14
; LIN-PPX-NEXT: .cfi_def_cfa_offset 48
; LIN-PPX-NEXT: push2p %rbx, %r12
; LIN-PPX-NEXT: .cfi_def_cfa_offset 64
; LIN-PPX-NEXT: subq $32, %rsp
; LIN-PPX-NEXT: .cfi_def_cfa_offset 96
; LIN-PPX-NEXT: .cfi_offset %rbx, -64
; LIN-PPX-NEXT: .cfi_offset %r12, -56
; LIN-PPX-NEXT: .cfi_offset %r13, -48
; LIN-PPX-NEXT: .cfi_offset %r14, -40
; LIN-PPX-NEXT: .cfi_offset %r15, -32
; LIN-PPX-NEXT: .cfi_offset %rbp, -24
; LIN-PPX-NEXT: #APP
; LIN-PPX-NEXT: #NO_APP
; LIN-PPX-NEXT: xorl %ecx, %ecx
; LIN-PPX-NEXT: xorl %eax, %eax
; LIN-PPX-NEXT: callq *%rcx
; LIN-PPX-NEXT: addq $32, %rsp
; LIN-PPX-NEXT: .cfi_def_cfa_offset 64
; LIN-PPX-NEXT: pop2p %r12, %rbx
; LIN-PPX-NEXT: .cfi_def_cfa_offset 48
; LIN-PPX-NEXT: pop2p %r14, %r13
; LIN-PPX-NEXT: .cfi_def_cfa_offset 32
; LIN-PPX-NEXT: pop2p %rbp, %r15
; LIN-PPX-NEXT: .cfi_def_cfa_offset 16
; LIN-PPX-NEXT: popq %rcx
; LIN-PPX-NEXT: .cfi_def_cfa_offset 8
; LIN-PPX-NEXT: retq
;
; WIN-REF-LABEL: csr6_alloc16:
; WIN-REF: # %bb.0: # %entry
; WIN-REF-NEXT: pushq %r15
; WIN-REF-NEXT: .seh_pushreg %r15
; WIN-REF-NEXT: pushq %r14
; WIN-REF-NEXT: .seh_pushreg %r14
; WIN-REF-NEXT: pushq %r13
; WIN-REF-NEXT: .seh_pushreg %r13
; WIN-REF-NEXT: pushq %r12
; WIN-REF-NEXT: .seh_pushreg %r12
; WIN-REF-NEXT: pushq %rbp
; WIN-REF-NEXT: .seh_pushreg %rbp
; WIN-REF-NEXT: pushq %rbx
; WIN-REF-NEXT: .seh_pushreg %rbx
; WIN-REF-NEXT: subq $56, %rsp
; WIN-REF-NEXT: .seh_stackalloc 56
; WIN-REF-NEXT: .seh_endprologue
; WIN-REF-NEXT: #APP
; WIN-REF-NEXT: #NO_APP
; WIN-REF-NEXT: xorl %eax, %eax
; WIN-REF-NEXT: callq *%rax
; WIN-REF-NEXT: nop
; WIN-REF-NEXT: addq $56, %rsp
; WIN-REF-NEXT: popq %rbx
; WIN-REF-NEXT: popq %rbp
; WIN-REF-NEXT: popq %r12
; WIN-REF-NEXT: popq %r13
; WIN-REF-NEXT: popq %r14
; WIN-REF-NEXT: popq %r15
; WIN-REF-NEXT: retq
; WIN-REF-NEXT: .seh_endproc
;
; WIN-LABEL: csr6_alloc16:
; WIN: # %bb.0: # %entry
; WIN-NEXT: pushq %rax
; WIN-NEXT: .seh_pushreg %rax
; WIN-NEXT: push2 %r14, %r15
; WIN-NEXT: .seh_pushreg %r15
; WIN-NEXT: .seh_pushreg %r14
; WIN-NEXT: push2 %r12, %r13
; WIN-NEXT: .seh_pushreg %r13
; WIN-NEXT: .seh_pushreg %r12
; WIN-NEXT: push2 %rbx, %rbp
; WIN-NEXT: .seh_pushreg %rbp
; WIN-NEXT: .seh_pushreg %rbx
; WIN-NEXT: subq $64, %rsp
; WIN-NEXT: .seh_stackalloc 64
; WIN-NEXT: .seh_endprologue
; WIN-NEXT: #APP
; WIN-NEXT: #NO_APP
; WIN-NEXT: xorl %eax, %eax
; WIN-NEXT: callq *%rax
; WIN-NEXT: nop
; WIN-NEXT: addq $64, %rsp
; WIN-NEXT: pop2 %rbp, %rbx
; WIN-NEXT: pop2 %r13, %r12
; WIN-NEXT: pop2 %r15, %r14
; WIN-NEXT: popq %rcx
; WIN-NEXT: retq
; WIN-NEXT: .seh_endproc
;
; WIN-PPX-LABEL: csr6_alloc16:
; WIN-PPX: # %bb.0: # %entry
; WIN-PPX-NEXT: pushq %rax
; WIN-PPX-NEXT: .seh_pushreg %rax
; WIN-PPX-NEXT: push2p %r14, %r15
; WIN-PPX-NEXT: .seh_pushreg %r15
; WIN-PPX-NEXT: .seh_pushreg %r14
; WIN-PPX-NEXT: push2p %r12, %r13
; WIN-PPX-NEXT: .seh_pushreg %r13
; WIN-PPX-NEXT: .seh_pushreg %r12
; WIN-PPX-NEXT: push2p %rbx, %rbp
; WIN-PPX-NEXT: .seh_pushreg %rbp
; WIN-PPX-NEXT: .seh_pushreg %rbx
; WIN-PPX-NEXT: subq $64, %rsp
; WIN-PPX-NEXT: .seh_stackalloc 64
; WIN-PPX-NEXT: .seh_endprologue
; WIN-PPX-NEXT: #APP
; WIN-PPX-NEXT: #NO_APP
; WIN-PPX-NEXT: xorl %eax, %eax
; WIN-PPX-NEXT: callq *%rax
; WIN-PPX-NEXT: nop
; WIN-PPX-NEXT: addq $64, %rsp
; WIN-PPX-NEXT: pop2p %rbp, %rbx
; WIN-PPX-NEXT: pop2p %r13, %r12
; WIN-PPX-NEXT: pop2p %r15, %r14
; WIN-PPX-NEXT: popq %rcx
; WIN-PPX-NEXT: retq
; WIN-PPX-NEXT: .seh_endproc
entry:
tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{r13},~{r12},~{rbx},~{dirflag},~{fpsr},~{flags}"()
%a = alloca [3 x ptr], align 8
%b = call ptr (...) null()
ret i32 undef
}