217 lines
7.3 KiB
LLVM
217 lines
7.3 KiB
LLVM
; 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
|
|
}
|