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