1*cb112eb1SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=LIN-REF 3*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+push2pop2 | FileCheck %s --check-prefix=LIN 4*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=LIN-PPX 5*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefix=WIN-REF 6*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=+push2pop2 | FileCheck %s --check-prefix=WIN 7*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=WIN-PPX 8*cb112eb1SShengchen Kan 9*cb112eb1SShengchen Kandefine i32 @csr6_alloc16(ptr %argv) { 10*cb112eb1SShengchen Kan; LIN-REF-LABEL: csr6_alloc16: 11*cb112eb1SShengchen Kan; LIN-REF: # %bb.0: # %entry 12*cb112eb1SShengchen Kan; LIN-REF-NEXT: pushq %rbp 13*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 16 14*cb112eb1SShengchen Kan; LIN-REF-NEXT: pushq %r15 15*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 24 16*cb112eb1SShengchen Kan; LIN-REF-NEXT: pushq %r14 17*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 32 18*cb112eb1SShengchen Kan; LIN-REF-NEXT: pushq %r13 19*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 40 20*cb112eb1SShengchen Kan; LIN-REF-NEXT: pushq %r12 21*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 48 22*cb112eb1SShengchen Kan; LIN-REF-NEXT: pushq %rbx 23*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 56 24*cb112eb1SShengchen Kan; LIN-REF-NEXT: subq $24, %rsp 25*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 80 26*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_offset %rbx, -56 27*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_offset %r12, -48 28*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_offset %r13, -40 29*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_offset %r14, -32 30*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_offset %r15, -24 31*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_offset %rbp, -16 32*cb112eb1SShengchen Kan; LIN-REF-NEXT: #APP 33*cb112eb1SShengchen Kan; LIN-REF-NEXT: #NO_APP 34*cb112eb1SShengchen Kan; LIN-REF-NEXT: xorl %ecx, %ecx 35*cb112eb1SShengchen Kan; LIN-REF-NEXT: xorl %eax, %eax 36*cb112eb1SShengchen Kan; LIN-REF-NEXT: callq *%rcx 37*cb112eb1SShengchen Kan; LIN-REF-NEXT: addq $24, %rsp 38*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 56 39*cb112eb1SShengchen Kan; LIN-REF-NEXT: popq %rbx 40*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 48 41*cb112eb1SShengchen Kan; LIN-REF-NEXT: popq %r12 42*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 40 43*cb112eb1SShengchen Kan; LIN-REF-NEXT: popq %r13 44*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 32 45*cb112eb1SShengchen Kan; LIN-REF-NEXT: popq %r14 46*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 24 47*cb112eb1SShengchen Kan; LIN-REF-NEXT: popq %r15 48*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 16 49*cb112eb1SShengchen Kan; LIN-REF-NEXT: popq %rbp 50*cb112eb1SShengchen Kan; LIN-REF-NEXT: .cfi_def_cfa_offset 8 51*cb112eb1SShengchen Kan; LIN-REF-NEXT: retq 52*cb112eb1SShengchen Kan; 53*cb112eb1SShengchen Kan; LIN-LABEL: csr6_alloc16: 54*cb112eb1SShengchen Kan; LIN: # %bb.0: # %entry 55*cb112eb1SShengchen Kan; LIN-NEXT: pushq %rax 56*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 16 57*cb112eb1SShengchen Kan; LIN-NEXT: push2 %r15, %rbp 58*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 32 59*cb112eb1SShengchen Kan; LIN-NEXT: push2 %r13, %r14 60*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 48 61*cb112eb1SShengchen Kan; LIN-NEXT: push2 %rbx, %r12 62*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 64 63*cb112eb1SShengchen Kan; LIN-NEXT: subq $32, %rsp 64*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 96 65*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_offset %rbx, -64 66*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_offset %r12, -56 67*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_offset %r13, -48 68*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_offset %r14, -40 69*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_offset %r15, -32 70*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_offset %rbp, -24 71*cb112eb1SShengchen Kan; LIN-NEXT: #APP 72*cb112eb1SShengchen Kan; LIN-NEXT: #NO_APP 73*cb112eb1SShengchen Kan; LIN-NEXT: xorl %ecx, %ecx 74*cb112eb1SShengchen Kan; LIN-NEXT: xorl %eax, %eax 75*cb112eb1SShengchen Kan; LIN-NEXT: callq *%rcx 76*cb112eb1SShengchen Kan; LIN-NEXT: addq $32, %rsp 77*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 64 78*cb112eb1SShengchen Kan; LIN-NEXT: pop2 %r12, %rbx 79*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 48 80*cb112eb1SShengchen Kan; LIN-NEXT: pop2 %r14, %r13 81*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 32 82*cb112eb1SShengchen Kan; LIN-NEXT: pop2 %rbp, %r15 83*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 16 84*cb112eb1SShengchen Kan; LIN-NEXT: popq %rcx 85*cb112eb1SShengchen Kan; LIN-NEXT: .cfi_def_cfa_offset 8 86*cb112eb1SShengchen Kan; LIN-NEXT: retq 87*cb112eb1SShengchen Kan; 88*cb112eb1SShengchen Kan; LIN-PPX-LABEL: csr6_alloc16: 89*cb112eb1SShengchen Kan; LIN-PPX: # %bb.0: # %entry 90*cb112eb1SShengchen Kan; LIN-PPX-NEXT: pushq %rax 91*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 16 92*cb112eb1SShengchen Kan; LIN-PPX-NEXT: push2p %r15, %rbp 93*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 32 94*cb112eb1SShengchen Kan; LIN-PPX-NEXT: push2p %r13, %r14 95*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 48 96*cb112eb1SShengchen Kan; LIN-PPX-NEXT: push2p %rbx, %r12 97*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 64 98*cb112eb1SShengchen Kan; LIN-PPX-NEXT: subq $32, %rsp 99*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 96 100*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_offset %rbx, -64 101*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_offset %r12, -56 102*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_offset %r13, -48 103*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_offset %r14, -40 104*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_offset %r15, -32 105*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_offset %rbp, -24 106*cb112eb1SShengchen Kan; LIN-PPX-NEXT: #APP 107*cb112eb1SShengchen Kan; LIN-PPX-NEXT: #NO_APP 108*cb112eb1SShengchen Kan; LIN-PPX-NEXT: xorl %ecx, %ecx 109*cb112eb1SShengchen Kan; LIN-PPX-NEXT: xorl %eax, %eax 110*cb112eb1SShengchen Kan; LIN-PPX-NEXT: callq *%rcx 111*cb112eb1SShengchen Kan; LIN-PPX-NEXT: addq $32, %rsp 112*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 64 113*cb112eb1SShengchen Kan; LIN-PPX-NEXT: pop2p %r12, %rbx 114*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 48 115*cb112eb1SShengchen Kan; LIN-PPX-NEXT: pop2p %r14, %r13 116*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 32 117*cb112eb1SShengchen Kan; LIN-PPX-NEXT: pop2p %rbp, %r15 118*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 16 119*cb112eb1SShengchen Kan; LIN-PPX-NEXT: popq %rcx 120*cb112eb1SShengchen Kan; LIN-PPX-NEXT: .cfi_def_cfa_offset 8 121*cb112eb1SShengchen Kan; LIN-PPX-NEXT: retq 122*cb112eb1SShengchen Kan; 123*cb112eb1SShengchen Kan; WIN-REF-LABEL: csr6_alloc16: 124*cb112eb1SShengchen Kan; WIN-REF: # %bb.0: # %entry 125*cb112eb1SShengchen Kan; WIN-REF-NEXT: pushq %r15 126*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_pushreg %r15 127*cb112eb1SShengchen Kan; WIN-REF-NEXT: pushq %r14 128*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_pushreg %r14 129*cb112eb1SShengchen Kan; WIN-REF-NEXT: pushq %r13 130*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_pushreg %r13 131*cb112eb1SShengchen Kan; WIN-REF-NEXT: pushq %r12 132*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_pushreg %r12 133*cb112eb1SShengchen Kan; WIN-REF-NEXT: pushq %rbp 134*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_pushreg %rbp 135*cb112eb1SShengchen Kan; WIN-REF-NEXT: pushq %rbx 136*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_pushreg %rbx 137*cb112eb1SShengchen Kan; WIN-REF-NEXT: subq $56, %rsp 138*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_stackalloc 56 139*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_endprologue 140*cb112eb1SShengchen Kan; WIN-REF-NEXT: #APP 141*cb112eb1SShengchen Kan; WIN-REF-NEXT: #NO_APP 142*cb112eb1SShengchen Kan; WIN-REF-NEXT: xorl %eax, %eax 143*cb112eb1SShengchen Kan; WIN-REF-NEXT: callq *%rax 144*cb112eb1SShengchen Kan; WIN-REF-NEXT: nop 145*cb112eb1SShengchen Kan; WIN-REF-NEXT: addq $56, %rsp 146*cb112eb1SShengchen Kan; WIN-REF-NEXT: popq %rbx 147*cb112eb1SShengchen Kan; WIN-REF-NEXT: popq %rbp 148*cb112eb1SShengchen Kan; WIN-REF-NEXT: popq %r12 149*cb112eb1SShengchen Kan; WIN-REF-NEXT: popq %r13 150*cb112eb1SShengchen Kan; WIN-REF-NEXT: popq %r14 151*cb112eb1SShengchen Kan; WIN-REF-NEXT: popq %r15 152*cb112eb1SShengchen Kan; WIN-REF-NEXT: retq 153*cb112eb1SShengchen Kan; WIN-REF-NEXT: .seh_endproc 154*cb112eb1SShengchen Kan; 155*cb112eb1SShengchen Kan; WIN-LABEL: csr6_alloc16: 156*cb112eb1SShengchen Kan; WIN: # %bb.0: # %entry 157*cb112eb1SShengchen Kan; WIN-NEXT: pushq %rax 158*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %rax 159*cb112eb1SShengchen Kan; WIN-NEXT: push2 %r14, %r15 160*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %r15 161*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %r14 162*cb112eb1SShengchen Kan; WIN-NEXT: push2 %r12, %r13 163*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %r13 164*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %r12 165*cb112eb1SShengchen Kan; WIN-NEXT: push2 %rbx, %rbp 166*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %rbp 167*cb112eb1SShengchen Kan; WIN-NEXT: .seh_pushreg %rbx 168*cb112eb1SShengchen Kan; WIN-NEXT: subq $64, %rsp 169*cb112eb1SShengchen Kan; WIN-NEXT: .seh_stackalloc 64 170*cb112eb1SShengchen Kan; WIN-NEXT: .seh_endprologue 171*cb112eb1SShengchen Kan; WIN-NEXT: #APP 172*cb112eb1SShengchen Kan; WIN-NEXT: #NO_APP 173*cb112eb1SShengchen Kan; WIN-NEXT: xorl %eax, %eax 174*cb112eb1SShengchen Kan; WIN-NEXT: callq *%rax 175*cb112eb1SShengchen Kan; WIN-NEXT: nop 176*cb112eb1SShengchen Kan; WIN-NEXT: addq $64, %rsp 177*cb112eb1SShengchen Kan; WIN-NEXT: pop2 %rbp, %rbx 178*cb112eb1SShengchen Kan; WIN-NEXT: pop2 %r13, %r12 179*cb112eb1SShengchen Kan; WIN-NEXT: pop2 %r15, %r14 180*cb112eb1SShengchen Kan; WIN-NEXT: popq %rcx 181*cb112eb1SShengchen Kan; WIN-NEXT: retq 182*cb112eb1SShengchen Kan; WIN-NEXT: .seh_endproc 183*cb112eb1SShengchen Kan; 184*cb112eb1SShengchen Kan; WIN-PPX-LABEL: csr6_alloc16: 185*cb112eb1SShengchen Kan; WIN-PPX: # %bb.0: # %entry 186*cb112eb1SShengchen Kan; WIN-PPX-NEXT: pushq %rax 187*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %rax 188*cb112eb1SShengchen Kan; WIN-PPX-NEXT: push2p %r14, %r15 189*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %r15 190*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %r14 191*cb112eb1SShengchen Kan; WIN-PPX-NEXT: push2p %r12, %r13 192*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %r13 193*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %r12 194*cb112eb1SShengchen Kan; WIN-PPX-NEXT: push2p %rbx, %rbp 195*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %rbp 196*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_pushreg %rbx 197*cb112eb1SShengchen Kan; WIN-PPX-NEXT: subq $64, %rsp 198*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_stackalloc 64 199*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_endprologue 200*cb112eb1SShengchen Kan; WIN-PPX-NEXT: #APP 201*cb112eb1SShengchen Kan; WIN-PPX-NEXT: #NO_APP 202*cb112eb1SShengchen Kan; WIN-PPX-NEXT: xorl %eax, %eax 203*cb112eb1SShengchen Kan; WIN-PPX-NEXT: callq *%rax 204*cb112eb1SShengchen Kan; WIN-PPX-NEXT: nop 205*cb112eb1SShengchen Kan; WIN-PPX-NEXT: addq $64, %rsp 206*cb112eb1SShengchen Kan; WIN-PPX-NEXT: pop2p %rbp, %rbx 207*cb112eb1SShengchen Kan; WIN-PPX-NEXT: pop2p %r13, %r12 208*cb112eb1SShengchen Kan; WIN-PPX-NEXT: pop2p %r15, %r14 209*cb112eb1SShengchen Kan; WIN-PPX-NEXT: popq %rcx 210*cb112eb1SShengchen Kan; WIN-PPX-NEXT: retq 211*cb112eb1SShengchen Kan; WIN-PPX-NEXT: .seh_endproc 212*cb112eb1SShengchen Kanentry: 213*cb112eb1SShengchen Kan tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{r13},~{r12},~{rbx},~{dirflag},~{fpsr},~{flags}"() 214*cb112eb1SShengchen Kan %a = alloca [3 x ptr], align 8 215*cb112eb1SShengchen Kan %b = call ptr (...) null() 216*cb112eb1SShengchen Kan ret i32 undef 217*cb112eb1SShengchen Kan} 218