1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X86-Linux 3; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux 4; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -code-model=large -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux-Large 5; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=X32ABI 6; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X86-Darwin 7; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X64-Darwin 8; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X86-MinGW 9; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -verify-machineinstrs | FileCheck %s -check-prefix=X64-FreeBSD 10; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X86-DFlyBSD 11; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X64-DFlyBSD 12; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X64-MinGW 13 14; We used to crash with filetype=obj 15; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -filetype=obj -o /dev/null 16; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj -o /dev/null 17; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj -o /dev/null 18; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -filetype=obj -o /dev/null 19; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -filetype=obj -o /dev/null 20; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -filetype=obj -o /dev/null 21; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -filetype=obj -o /dev/null 22; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -filetype=obj -o /dev/null 23; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -filetype=obj -o /dev/null 24; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -filetype=obj -o /dev/null 25 26; RUN: not --crash llc < %s -mcpu=generic -mtriple=x86_64-solaris 2> %t.log 27; RUN: FileCheck %s -input-file=%t.log -check-prefix=X64-Solaris 28; RUN: not --crash llc < %s -mcpu=generic -mtriple=i686-freebsd 2> %t.log 29; RUN: FileCheck %s -input-file=%t.log -check-prefix=X86-FreeBSD 30 31; X64-Solaris: Segmented stacks not supported on this platform 32; X86-FreeBSD: Segmented stacks not supported on FreeBSD i386 33 34; Just to prevent the alloca from being optimized away 35declare void @dummy_use(ptr, i32) 36 37define void @test_basic() #0 { 38; X86-Linux-LABEL: test_basic: 39; X86-Linux: # %bb.0: 40; X86-Linux-NEXT: cmpl %gs:48, %esp 41; X86-Linux-NEXT: jbe .LBB0_1 42; X86-Linux-NEXT: .LBB0_2: 43; X86-Linux-NEXT: subl $52, %esp 44; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52 45; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 46; X86-Linux-NEXT: pushl $10 47; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 48; X86-Linux-NEXT: pushl %eax 49; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 50; X86-Linux-NEXT: calll dummy_use@PLT 51; X86-Linux-NEXT: addl $60, %esp 52; X86-Linux-NEXT: .cfi_adjust_cfa_offset -60 53; X86-Linux-NEXT: retl 54; X86-Linux-NEXT: .LBB0_1: 55; X86-Linux-NEXT: pushl $0 56; X86-Linux-NEXT: pushl $44 57; X86-Linux-NEXT: calll __morestack 58; X86-Linux-NEXT: retl 59; X86-Linux-NEXT: jmp .LBB0_2 60; 61; X64-Linux-LABEL: test_basic: 62; X64-Linux: # %bb.0: 63; X64-Linux-NEXT: cmpq %fs:112, %rsp 64; X64-Linux-NEXT: jbe .LBB0_1 65; X64-Linux-NEXT: .LBB0_2: 66; X64-Linux-NEXT: subq $40, %rsp 67; X64-Linux-NEXT: .cfi_def_cfa_offset 48 68; X64-Linux-NEXT: movq %rsp, %rdi 69; X64-Linux-NEXT: movl $10, %esi 70; X64-Linux-NEXT: callq dummy_use@PLT 71; X64-Linux-NEXT: addq $40, %rsp 72; X64-Linux-NEXT: .cfi_def_cfa_offset 8 73; X64-Linux-NEXT: retq 74; X64-Linux-NEXT: .LBB0_1: 75; X64-Linux-NEXT: movl $40, %r10d 76; X64-Linux-NEXT: movl $0, %r11d 77; X64-Linux-NEXT: callq __morestack 78; X64-Linux-NEXT: retq 79; X64-Linux-NEXT: jmp .LBB0_2 80; 81; X64-Linux-Large-LABEL: test_basic: 82; X64-Linux-Large: # %bb.0: 83; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp 84; X64-Linux-Large-NEXT: jbe .LBB0_1 85; X64-Linux-Large-NEXT: .LBB0_2: 86; X64-Linux-Large-NEXT: subq $40, %rsp 87; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48 88; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 89; X64-Linux-Large-NEXT: movq %rsp, %rdi 90; X64-Linux-Large-NEXT: movl $10, %esi 91; X64-Linux-Large-NEXT: callq *%rax 92; X64-Linux-Large-NEXT: addq $40, %rsp 93; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 94; X64-Linux-Large-NEXT: retq 95; X64-Linux-Large-NEXT: .LBB0_1: 96; X64-Linux-Large-NEXT: movl $40, %r10d 97; X64-Linux-Large-NEXT: movl $0, %r11d 98; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 99; X64-Linux-Large-NEXT: retq 100; X64-Linux-Large-NEXT: jmp .LBB0_2 101; 102; X32ABI-LABEL: test_basic: 103; X32ABI: # %bb.0: 104; X32ABI-NEXT: cmpl %fs:64, %esp 105; X32ABI-NEXT: jbe .LBB0_1 106; X32ABI-NEXT: .LBB0_2: 107; X32ABI-NEXT: subl $40, %esp 108; X32ABI-NEXT: .cfi_def_cfa_offset 48 109; X32ABI-NEXT: movl %esp, %edi 110; X32ABI-NEXT: movl $10, %esi 111; X32ABI-NEXT: callq dummy_use@PLT 112; X32ABI-NEXT: addl $40, %esp 113; X32ABI-NEXT: .cfi_def_cfa_offset 8 114; X32ABI-NEXT: retq 115; X32ABI-NEXT: .LBB0_1: 116; X32ABI-NEXT: movl $40, %r10d 117; X32ABI-NEXT: movl $0, %r11d 118; X32ABI-NEXT: callq __morestack 119; X32ABI-NEXT: retq 120; X32ABI-NEXT: jmp .LBB0_2 121; 122; X86-Darwin-LABEL: test_basic: 123; X86-Darwin: ## %bb.0: 124; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 125; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp 126; X86-Darwin-NEXT: jbe LBB0_1 127; X86-Darwin-NEXT: LBB0_2: 128; X86-Darwin-NEXT: subl $60, %esp 129; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 130; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 131; X86-Darwin-NEXT: movl %eax, (%esp) 132; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) 133; X86-Darwin-NEXT: calll _dummy_use 134; X86-Darwin-NEXT: addl $60, %esp 135; X86-Darwin-NEXT: retl 136; X86-Darwin-NEXT: LBB0_1: 137; X86-Darwin-NEXT: pushl $0 138; X86-Darwin-NEXT: pushl $60 139; X86-Darwin-NEXT: calll ___morestack 140; X86-Darwin-NEXT: retl 141; X86-Darwin-NEXT: jmp LBB0_2 142; 143; X64-Darwin-LABEL: test_basic: 144; X64-Darwin: ## %bb.0: 145; X64-Darwin-NEXT: cmpq %gs:816, %rsp 146; X64-Darwin-NEXT: jbe LBB0_1 147; X64-Darwin-NEXT: LBB0_2: 148; X64-Darwin-NEXT: subq $40, %rsp 149; X64-Darwin-NEXT: .cfi_def_cfa_offset 48 150; X64-Darwin-NEXT: movq %rsp, %rdi 151; X64-Darwin-NEXT: movl $10, %esi 152; X64-Darwin-NEXT: callq _dummy_use 153; X64-Darwin-NEXT: addq $40, %rsp 154; X64-Darwin-NEXT: retq 155; X64-Darwin-NEXT: LBB0_1: 156; X64-Darwin-NEXT: movl $40, %r10d 157; X64-Darwin-NEXT: movl $0, %r11d 158; X64-Darwin-NEXT: callq ___morestack 159; X64-Darwin-NEXT: retq 160; X64-Darwin-NEXT: jmp LBB0_2 161; 162; X86-MinGW-LABEL: test_basic: 163; X86-MinGW: # %bb.0: 164; X86-MinGW-NEXT: cmpl %fs:20, %esp 165; X86-MinGW-NEXT: jbe LBB0_1 166; X86-MinGW-NEXT: LBB0_2: 167; X86-MinGW-NEXT: subl $40, %esp 168; X86-MinGW-NEXT: .cfi_def_cfa_offset 44 169; X86-MinGW-NEXT: movl %esp, %eax 170; X86-MinGW-NEXT: pushl $10 171; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 172; X86-MinGW-NEXT: pushl %eax 173; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 174; X86-MinGW-NEXT: calll _dummy_use 175; X86-MinGW-NEXT: addl $48, %esp 176; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -48 177; X86-MinGW-NEXT: retl 178; X86-MinGW-NEXT: LBB0_1: 179; X86-MinGW-NEXT: pushl $0 180; X86-MinGW-NEXT: pushl $40 181; X86-MinGW-NEXT: calll ___morestack 182; X86-MinGW-NEXT: retl 183; X86-MinGW-NEXT: jmp LBB0_2 184; 185; X64-FreeBSD-LABEL: test_basic: 186; X64-FreeBSD: # %bb.0: 187; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp 188; X64-FreeBSD-NEXT: jbe .LBB0_1 189; X64-FreeBSD-NEXT: .LBB0_2: 190; X64-FreeBSD-NEXT: subq $40, %rsp 191; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48 192; X64-FreeBSD-NEXT: movq %rsp, %rdi 193; X64-FreeBSD-NEXT: movl $10, %esi 194; X64-FreeBSD-NEXT: callq dummy_use@PLT 195; X64-FreeBSD-NEXT: addq $40, %rsp 196; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 197; X64-FreeBSD-NEXT: retq 198; X64-FreeBSD-NEXT: .LBB0_1: 199; X64-FreeBSD-NEXT: movl $40, %r10d 200; X64-FreeBSD-NEXT: movl $0, %r11d 201; X64-FreeBSD-NEXT: callq __morestack 202; X64-FreeBSD-NEXT: retq 203; X64-FreeBSD-NEXT: jmp .LBB0_2 204; 205; X86-DFlyBSD-LABEL: test_basic: 206; X86-DFlyBSD: # %bb.0: 207; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp 208; X86-DFlyBSD-NEXT: jbe .LBB0_1 209; X86-DFlyBSD-NEXT: .LBB0_2: 210; X86-DFlyBSD-NEXT: subl $40, %esp 211; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44 212; X86-DFlyBSD-NEXT: movl %esp, %eax 213; X86-DFlyBSD-NEXT: pushl $10 214; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 215; X86-DFlyBSD-NEXT: pushl %eax 216; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 217; X86-DFlyBSD-NEXT: calll dummy_use@PLT 218; X86-DFlyBSD-NEXT: addl $48, %esp 219; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -48 220; X86-DFlyBSD-NEXT: retl 221; X86-DFlyBSD-NEXT: .LBB0_1: 222; X86-DFlyBSD-NEXT: pushl $0 223; X86-DFlyBSD-NEXT: pushl $40 224; X86-DFlyBSD-NEXT: calll __morestack 225; X86-DFlyBSD-NEXT: retl 226; X86-DFlyBSD-NEXT: jmp .LBB0_2 227; 228; X64-DFlyBSD-LABEL: test_basic: 229; X64-DFlyBSD: # %bb.0: 230; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp 231; X64-DFlyBSD-NEXT: jbe .LBB0_1 232; X64-DFlyBSD-NEXT: .LBB0_2: 233; X64-DFlyBSD-NEXT: subq $40, %rsp 234; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 235; X64-DFlyBSD-NEXT: movq %rsp, %rdi 236; X64-DFlyBSD-NEXT: movl $10, %esi 237; X64-DFlyBSD-NEXT: callq dummy_use@PLT 238; X64-DFlyBSD-NEXT: addq $40, %rsp 239; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 240; X64-DFlyBSD-NEXT: retq 241; X64-DFlyBSD-NEXT: .LBB0_1: 242; X64-DFlyBSD-NEXT: movl $40, %r10d 243; X64-DFlyBSD-NEXT: movl $0, %r11d 244; X64-DFlyBSD-NEXT: callq __morestack 245; X64-DFlyBSD-NEXT: retq 246; X64-DFlyBSD-NEXT: jmp .LBB0_2 247; 248; X64-MinGW-LABEL: test_basic: 249; X64-MinGW: # %bb.0: 250; X64-MinGW-NEXT: cmpq %gs:40, %rsp 251; X64-MinGW-NEXT: jbe .LBB0_1 252; X64-MinGW-NEXT: .LBB0_2: 253; X64-MinGW-NEXT: subq $72, %rsp 254; X64-MinGW-NEXT: .seh_stackalloc 72 255; X64-MinGW-NEXT: .seh_endprologue 256; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 257; X64-MinGW-NEXT: movl $10, %edx 258; X64-MinGW-NEXT: callq dummy_use 259; X64-MinGW-NEXT: nop 260; X64-MinGW-NEXT: addq $72, %rsp 261; X64-MinGW-NEXT: retq 262; X64-MinGW-NEXT: .LBB0_1: 263; X64-MinGW-NEXT: movl $72, %r10d 264; X64-MinGW-NEXT: movl $32, %r11d 265; X64-MinGW-NEXT: callq __morestack 266; X64-MinGW-NEXT: retq 267; X64-MinGW-NEXT: jmp .LBB0_2 268; X64-MinGW-NEXT: .seh_endproc 269 %mem = alloca i32, i32 10 270 call void @dummy_use (ptr %mem, i32 10) 271 ret void 272} 273 274define i32 @test_nested(ptr nest %closure, i32 %other) #0 { 275; X86-Linux-LABEL: test_nested: 276; X86-Linux: # %bb.0: 277; X86-Linux-NEXT: cmpl %gs:48, %esp 278; X86-Linux-NEXT: jbe .LBB1_1 279; X86-Linux-NEXT: .LBB1_2: 280; X86-Linux-NEXT: pushl %esi 281; X86-Linux-NEXT: .cfi_def_cfa_offset 8 282; X86-Linux-NEXT: subl $40, %esp 283; X86-Linux-NEXT: .cfi_def_cfa_offset 48 284; X86-Linux-NEXT: .cfi_offset %esi, -8 285; X86-Linux-NEXT: movl {{[0-9]+}}(%esp), %esi 286; X86-Linux-NEXT: addl (%ecx), %esi 287; X86-Linux-NEXT: subl $8, %esp 288; X86-Linux-NEXT: .cfi_adjust_cfa_offset 8 289; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 290; X86-Linux-NEXT: pushl $10 291; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 292; X86-Linux-NEXT: pushl %eax 293; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 294; X86-Linux-NEXT: calll dummy_use@PLT 295; X86-Linux-NEXT: addl $16, %esp 296; X86-Linux-NEXT: .cfi_adjust_cfa_offset -16 297; X86-Linux-NEXT: movl %esi, %eax 298; X86-Linux-NEXT: addl $40, %esp 299; X86-Linux-NEXT: .cfi_def_cfa_offset 8 300; X86-Linux-NEXT: popl %esi 301; X86-Linux-NEXT: .cfi_def_cfa_offset 4 302; X86-Linux-NEXT: retl 303; X86-Linux-NEXT: .LBB1_1: 304; X86-Linux-NEXT: .cfi_restore %esi 305; X86-Linux-NEXT: pushl $4 306; X86-Linux-NEXT: pushl $44 307; X86-Linux-NEXT: calll __morestack 308; X86-Linux-NEXT: retl 309; X86-Linux-NEXT: jmp .LBB1_2 310; 311; X64-Linux-LABEL: test_nested: 312; X64-Linux: # %bb.0: 313; X64-Linux-NEXT: cmpq %fs:112, %rsp 314; X64-Linux-NEXT: jbe .LBB1_1 315; X64-Linux-NEXT: .LBB1_2: 316; X64-Linux-NEXT: pushq %rbx 317; X64-Linux-NEXT: .cfi_def_cfa_offset 16 318; X64-Linux-NEXT: subq $48, %rsp 319; X64-Linux-NEXT: .cfi_def_cfa_offset 64 320; X64-Linux-NEXT: .cfi_offset %rbx, -16 321; X64-Linux-NEXT: movl %edi, %ebx 322; X64-Linux-NEXT: addl (%r10), %ebx 323; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 324; X64-Linux-NEXT: movl $10, %esi 325; X64-Linux-NEXT: callq dummy_use@PLT 326; X64-Linux-NEXT: movl %ebx, %eax 327; X64-Linux-NEXT: addq $48, %rsp 328; X64-Linux-NEXT: .cfi_def_cfa_offset 16 329; X64-Linux-NEXT: popq %rbx 330; X64-Linux-NEXT: .cfi_def_cfa_offset 8 331; X64-Linux-NEXT: retq 332; X64-Linux-NEXT: .LBB1_1: 333; X64-Linux-NEXT: .cfi_restore %rbx 334; X64-Linux-NEXT: movq %r10, %rax 335; X64-Linux-NEXT: movl $56, %r10d 336; X64-Linux-NEXT: movl $0, %r11d 337; X64-Linux-NEXT: callq __morestack 338; X64-Linux-NEXT: retq 339; X64-Linux-NEXT: movq %rax, %r10 340; X64-Linux-NEXT: jmp .LBB1_2 341; 342; X64-Linux-Large-LABEL: test_nested: 343; X64-Linux-Large: # %bb.0: 344; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp 345; X64-Linux-Large-NEXT: jbe .LBB1_1 346; X64-Linux-Large-NEXT: .LBB1_2: 347; X64-Linux-Large-NEXT: pushq %rbx 348; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 16 349; X64-Linux-Large-NEXT: subq $48, %rsp 350; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 64 351; X64-Linux-Large-NEXT: .cfi_offset %rbx, -16 352; X64-Linux-Large-NEXT: movl %edi, %ebx 353; X64-Linux-Large-NEXT: addl (%r10), %ebx 354; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 355; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 356; X64-Linux-Large-NEXT: movl $10, %esi 357; X64-Linux-Large-NEXT: callq *%rax 358; X64-Linux-Large-NEXT: movl %ebx, %eax 359; X64-Linux-Large-NEXT: addq $48, %rsp 360; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 16 361; X64-Linux-Large-NEXT: popq %rbx 362; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 363; X64-Linux-Large-NEXT: retq 364; X64-Linux-Large-NEXT: .LBB1_1: 365; X64-Linux-Large-NEXT: .cfi_restore %rbx 366; X64-Linux-Large-NEXT: movq %r10, %rax 367; X64-Linux-Large-NEXT: movl $56, %r10d 368; X64-Linux-Large-NEXT: movl $0, %r11d 369; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 370; X64-Linux-Large-NEXT: retq 371; X64-Linux-Large-NEXT: movq %rax, %r10 372; X64-Linux-Large-NEXT: jmp .LBB1_2 373; 374; X32ABI-LABEL: test_nested: 375; X32ABI: # %bb.0: 376; X32ABI-NEXT: cmpl %fs:64, %esp 377; X32ABI-NEXT: jbe .LBB1_1 378; X32ABI-NEXT: .LBB1_2: 379; X32ABI-NEXT: pushq %rbx 380; X32ABI-NEXT: .cfi_def_cfa_offset 16 381; X32ABI-NEXT: subl $48, %esp 382; X32ABI-NEXT: .cfi_def_cfa_offset 64 383; X32ABI-NEXT: .cfi_offset %rbx, -16 384; X32ABI-NEXT: movl %edi, %ebx 385; X32ABI-NEXT: addl (%r10d), %ebx 386; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi 387; X32ABI-NEXT: movl $10, %esi 388; X32ABI-NEXT: callq dummy_use@PLT 389; X32ABI-NEXT: movl %ebx, %eax 390; X32ABI-NEXT: addl $48, %esp 391; X32ABI-NEXT: .cfi_def_cfa_offset 16 392; X32ABI-NEXT: popq %rbx 393; X32ABI-NEXT: .cfi_def_cfa_offset 8 394; X32ABI-NEXT: retq 395; X32ABI-NEXT: .LBB1_1: 396; X32ABI-NEXT: .cfi_restore %rbx 397; X32ABI-NEXT: movl %r10d, %eax 398; X32ABI-NEXT: movl $56, %r10d 399; X32ABI-NEXT: movl $0, %r11d 400; X32ABI-NEXT: callq __morestack 401; X32ABI-NEXT: retq 402; X32ABI-NEXT: movq %rax, %r10 403; X32ABI-NEXT: jmp .LBB1_2 404; 405; X86-Darwin-LABEL: test_nested: 406; X86-Darwin: ## %bb.0: 407; X86-Darwin-NEXT: movl $432, %edx ## imm = 0x1B0 408; X86-Darwin-NEXT: cmpl %gs:(%edx), %esp 409; X86-Darwin-NEXT: jbe LBB1_1 410; X86-Darwin-NEXT: LBB1_2: 411; X86-Darwin-NEXT: pushl %esi 412; X86-Darwin-NEXT: .cfi_def_cfa_offset 8 413; X86-Darwin-NEXT: subl $56, %esp 414; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 415; X86-Darwin-NEXT: .cfi_offset %esi, -8 416; X86-Darwin-NEXT: movl {{[0-9]+}}(%esp), %esi 417; X86-Darwin-NEXT: addl (%ecx), %esi 418; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 419; X86-Darwin-NEXT: movl %eax, (%esp) 420; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) 421; X86-Darwin-NEXT: calll _dummy_use 422; X86-Darwin-NEXT: movl %esi, %eax 423; X86-Darwin-NEXT: addl $56, %esp 424; X86-Darwin-NEXT: popl %esi 425; X86-Darwin-NEXT: retl 426; X86-Darwin-NEXT: LBB1_1: 427; X86-Darwin-NEXT: pushl $4 428; X86-Darwin-NEXT: pushl $60 429; X86-Darwin-NEXT: calll ___morestack 430; X86-Darwin-NEXT: retl 431; X86-Darwin-NEXT: jmp LBB1_2 432; 433; X64-Darwin-LABEL: test_nested: 434; X64-Darwin: ## %bb.0: 435; X64-Darwin-NEXT: cmpq %gs:816, %rsp 436; X64-Darwin-NEXT: jbe LBB1_1 437; X64-Darwin-NEXT: LBB1_2: 438; X64-Darwin-NEXT: pushq %rbx 439; X64-Darwin-NEXT: .cfi_def_cfa_offset 16 440; X64-Darwin-NEXT: subq $48, %rsp 441; X64-Darwin-NEXT: .cfi_def_cfa_offset 64 442; X64-Darwin-NEXT: .cfi_offset %rbx, -16 443; X64-Darwin-NEXT: movl %edi, %ebx 444; X64-Darwin-NEXT: addl (%r10), %ebx 445; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 446; X64-Darwin-NEXT: movl $10, %esi 447; X64-Darwin-NEXT: callq _dummy_use 448; X64-Darwin-NEXT: movl %ebx, %eax 449; X64-Darwin-NEXT: addq $48, %rsp 450; X64-Darwin-NEXT: popq %rbx 451; X64-Darwin-NEXT: retq 452; X64-Darwin-NEXT: LBB1_1: 453; X64-Darwin-NEXT: movq %r10, %rax 454; X64-Darwin-NEXT: movl $56, %r10d 455; X64-Darwin-NEXT: movl $0, %r11d 456; X64-Darwin-NEXT: callq ___morestack 457; X64-Darwin-NEXT: retq 458; X64-Darwin-NEXT: movq %rax, %r10 459; X64-Darwin-NEXT: jmp LBB1_2 460; 461; X86-MinGW-LABEL: test_nested: 462; X86-MinGW: # %bb.0: 463; X86-MinGW-NEXT: cmpl %fs:20, %esp 464; X86-MinGW-NEXT: jbe LBB1_1 465; X86-MinGW-NEXT: LBB1_2: 466; X86-MinGW-NEXT: pushl %esi 467; X86-MinGW-NEXT: .cfi_def_cfa_offset 8 468; X86-MinGW-NEXT: subl $40, %esp 469; X86-MinGW-NEXT: .cfi_def_cfa_offset 48 470; X86-MinGW-NEXT: .cfi_offset %esi, -8 471; X86-MinGW-NEXT: movl {{[0-9]+}}(%esp), %esi 472; X86-MinGW-NEXT: addl (%ecx), %esi 473; X86-MinGW-NEXT: movl %esp, %eax 474; X86-MinGW-NEXT: pushl $10 475; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 476; X86-MinGW-NEXT: pushl %eax 477; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 478; X86-MinGW-NEXT: calll _dummy_use 479; X86-MinGW-NEXT: addl $8, %esp 480; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -8 481; X86-MinGW-NEXT: movl %esi, %eax 482; X86-MinGW-NEXT: addl $40, %esp 483; X86-MinGW-NEXT: popl %esi 484; X86-MinGW-NEXT: retl 485; X86-MinGW-NEXT: LBB1_1: 486; X86-MinGW-NEXT: .cfi_def_cfa_offset 4 487; X86-MinGW-NEXT: .cfi_restore %esi 488; X86-MinGW-NEXT: pushl $4 489; X86-MinGW-NEXT: pushl $44 490; X86-MinGW-NEXT: calll ___morestack 491; X86-MinGW-NEXT: retl 492; X86-MinGW-NEXT: jmp LBB1_2 493; 494; X64-FreeBSD-LABEL: test_nested: 495; X64-FreeBSD: # %bb.0: 496; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp 497; X64-FreeBSD-NEXT: jbe .LBB1_1 498; X64-FreeBSD-NEXT: .LBB1_2: 499; X64-FreeBSD-NEXT: pushq %rbx 500; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 16 501; X64-FreeBSD-NEXT: subq $48, %rsp 502; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 64 503; X64-FreeBSD-NEXT: .cfi_offset %rbx, -16 504; X64-FreeBSD-NEXT: movl %edi, %ebx 505; X64-FreeBSD-NEXT: addl (%r10), %ebx 506; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 507; X64-FreeBSD-NEXT: movl $10, %esi 508; X64-FreeBSD-NEXT: callq dummy_use@PLT 509; X64-FreeBSD-NEXT: movl %ebx, %eax 510; X64-FreeBSD-NEXT: addq $48, %rsp 511; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 16 512; X64-FreeBSD-NEXT: popq %rbx 513; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 514; X64-FreeBSD-NEXT: retq 515; X64-FreeBSD-NEXT: .LBB1_1: 516; X64-FreeBSD-NEXT: .cfi_restore %rbx 517; X64-FreeBSD-NEXT: movq %r10, %rax 518; X64-FreeBSD-NEXT: movl $56, %r10d 519; X64-FreeBSD-NEXT: movl $0, %r11d 520; X64-FreeBSD-NEXT: callq __morestack 521; X64-FreeBSD-NEXT: retq 522; X64-FreeBSD-NEXT: movq %rax, %r10 523; X64-FreeBSD-NEXT: jmp .LBB1_2 524; 525; X86-DFlyBSD-LABEL: test_nested: 526; X86-DFlyBSD: # %bb.0: 527; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp 528; X86-DFlyBSD-NEXT: jbe .LBB1_1 529; X86-DFlyBSD-NEXT: .LBB1_2: 530; X86-DFlyBSD-NEXT: pushl %esi 531; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 532; X86-DFlyBSD-NEXT: subl $40, %esp 533; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 534; X86-DFlyBSD-NEXT: .cfi_offset %esi, -8 535; X86-DFlyBSD-NEXT: movl {{[0-9]+}}(%esp), %esi 536; X86-DFlyBSD-NEXT: addl (%ecx), %esi 537; X86-DFlyBSD-NEXT: movl %esp, %eax 538; X86-DFlyBSD-NEXT: pushl $10 539; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 540; X86-DFlyBSD-NEXT: pushl %eax 541; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 542; X86-DFlyBSD-NEXT: calll dummy_use@PLT 543; X86-DFlyBSD-NEXT: addl $8, %esp 544; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -8 545; X86-DFlyBSD-NEXT: movl %esi, %eax 546; X86-DFlyBSD-NEXT: addl $40, %esp 547; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 548; X86-DFlyBSD-NEXT: popl %esi 549; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 4 550; X86-DFlyBSD-NEXT: retl 551; X86-DFlyBSD-NEXT: .LBB1_1: 552; X86-DFlyBSD-NEXT: .cfi_restore %esi 553; X86-DFlyBSD-NEXT: pushl $4 554; X86-DFlyBSD-NEXT: pushl $44 555; X86-DFlyBSD-NEXT: calll __morestack 556; X86-DFlyBSD-NEXT: retl 557; X86-DFlyBSD-NEXT: jmp .LBB1_2 558; 559; X64-DFlyBSD-LABEL: test_nested: 560; X64-DFlyBSD: # %bb.0: 561; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp 562; X64-DFlyBSD-NEXT: jbe .LBB1_1 563; X64-DFlyBSD-NEXT: .LBB1_2: 564; X64-DFlyBSD-NEXT: pushq %rbx 565; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 16 566; X64-DFlyBSD-NEXT: subq $48, %rsp 567; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 64 568; X64-DFlyBSD-NEXT: .cfi_offset %rbx, -16 569; X64-DFlyBSD-NEXT: movl %edi, %ebx 570; X64-DFlyBSD-NEXT: addl (%r10), %ebx 571; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 572; X64-DFlyBSD-NEXT: movl $10, %esi 573; X64-DFlyBSD-NEXT: callq dummy_use@PLT 574; X64-DFlyBSD-NEXT: movl %ebx, %eax 575; X64-DFlyBSD-NEXT: addq $48, %rsp 576; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 16 577; X64-DFlyBSD-NEXT: popq %rbx 578; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 579; X64-DFlyBSD-NEXT: retq 580; X64-DFlyBSD-NEXT: .LBB1_1: 581; X64-DFlyBSD-NEXT: .cfi_restore %rbx 582; X64-DFlyBSD-NEXT: movq %r10, %rax 583; X64-DFlyBSD-NEXT: movl $56, %r10d 584; X64-DFlyBSD-NEXT: movl $0, %r11d 585; X64-DFlyBSD-NEXT: callq __morestack 586; X64-DFlyBSD-NEXT: retq 587; X64-DFlyBSD-NEXT: movq %rax, %r10 588; X64-DFlyBSD-NEXT: jmp .LBB1_2 589; 590; X64-MinGW-LABEL: test_nested: 591; X64-MinGW: # %bb.0: 592; X64-MinGW-NEXT: cmpq %gs:40, %rsp 593; X64-MinGW-NEXT: jbe .LBB1_1 594; X64-MinGW-NEXT: .LBB1_2: 595; X64-MinGW-NEXT: pushq %rsi 596; X64-MinGW-NEXT: .seh_pushreg %rsi 597; X64-MinGW-NEXT: subq $80, %rsp 598; X64-MinGW-NEXT: .seh_stackalloc 80 599; X64-MinGW-NEXT: .seh_endprologue 600; X64-MinGW-NEXT: movl %ecx, %esi 601; X64-MinGW-NEXT: addl (%r10), %esi 602; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 603; X64-MinGW-NEXT: movl $10, %edx 604; X64-MinGW-NEXT: callq dummy_use 605; X64-MinGW-NEXT: movl %esi, %eax 606; X64-MinGW-NEXT: addq $80, %rsp 607; X64-MinGW-NEXT: popq %rsi 608; X64-MinGW-NEXT: retq 609; X64-MinGW-NEXT: .LBB1_1: 610; X64-MinGW-NEXT: movq %r10, %rax 611; X64-MinGW-NEXT: movl $88, %r10d 612; X64-MinGW-NEXT: movl $32, %r11d 613; X64-MinGW-NEXT: callq __morestack 614; X64-MinGW-NEXT: retq 615; X64-MinGW-NEXT: movq %rax, %r10 616; X64-MinGW-NEXT: jmp .LBB1_2 617; X64-MinGW-NEXT: .seh_endproc 618 %addend = load i32 , ptr %closure 619 %result = add i32 %other, %addend 620 %mem = alloca i32, i32 10 621 call void @dummy_use (ptr %mem, i32 10) 622 ret i32 %result 623} 624 625define void @test_large() #0 { 626; X86-Linux-LABEL: test_large: 627; X86-Linux: # %bb.0: 628; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %ecx 629; X86-Linux-NEXT: cmpl %gs:48, %ecx 630; X86-Linux-NEXT: jbe .LBB2_1 631; X86-Linux-NEXT: .LBB2_2: 632; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54 633; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020 634; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 635; X86-Linux-NEXT: pushl $3 636; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 637; X86-Linux-NEXT: pushl %eax 638; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 639; X86-Linux-NEXT: calll dummy_use@PLT 640; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C 641; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028 642; X86-Linux-NEXT: retl 643; X86-Linux-NEXT: .LBB2_1: 644; X86-Linux-NEXT: pushl $0 645; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C 646; X86-Linux-NEXT: calll __morestack 647; X86-Linux-NEXT: retl 648; X86-Linux-NEXT: jmp .LBB2_2 649; 650; X64-Linux-LABEL: test_large: 651; X64-Linux: # %bb.0: 652; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 653; X64-Linux-NEXT: cmpq %fs:112, %r11 654; X64-Linux-NEXT: jbe .LBB2_1 655; X64-Linux-NEXT: .LBB2_2: 656; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48 657; X64-Linux-NEXT: .cfi_def_cfa_offset 40016 658; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 659; X64-Linux-NEXT: movl $3, %esi 660; X64-Linux-NEXT: callq dummy_use@PLT 661; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48 662; X64-Linux-NEXT: .cfi_def_cfa_offset 8 663; X64-Linux-NEXT: retq 664; X64-Linux-NEXT: .LBB2_1: 665; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48 666; X64-Linux-NEXT: movl $0, %r11d 667; X64-Linux-NEXT: callq __morestack 668; X64-Linux-NEXT: retq 669; X64-Linux-NEXT: jmp .LBB2_2 670; 671; X64-Linux-Large-LABEL: test_large: 672; X64-Linux-Large: # %bb.0: 673; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 674; X64-Linux-Large-NEXT: cmpq %fs:112, %r11 675; X64-Linux-Large-NEXT: jbe .LBB2_1 676; X64-Linux-Large-NEXT: .LBB2_2: 677; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48 678; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016 679; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 680; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 681; X64-Linux-Large-NEXT: movl $3, %esi 682; X64-Linux-Large-NEXT: callq *%rax 683; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48 684; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 685; X64-Linux-Large-NEXT: retq 686; X64-Linux-Large-NEXT: .LBB2_1: 687; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48 688; X64-Linux-Large-NEXT: movl $0, %r11d 689; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 690; X64-Linux-Large-NEXT: retq 691; X64-Linux-Large-NEXT: jmp .LBB2_2 692; 693; X32ABI-LABEL: test_large: 694; X32ABI: # %bb.0: 695; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d 696; X32ABI-NEXT: cmpl %fs:64, %r11d 697; X32ABI-NEXT: jbe .LBB2_1 698; X32ABI-NEXT: .LBB2_2: 699; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48 700; X32ABI-NEXT: .cfi_def_cfa_offset 40016 701; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi 702; X32ABI-NEXT: movl $3, %esi 703; X32ABI-NEXT: callq dummy_use@PLT 704; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48 705; X32ABI-NEXT: .cfi_def_cfa_offset 8 706; X32ABI-NEXT: retq 707; X32ABI-NEXT: .LBB2_1: 708; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48 709; X32ABI-NEXT: movl $0, %r11d 710; X32ABI-NEXT: callq __morestack 711; X32ABI-NEXT: retq 712; X32ABI-NEXT: jmp .LBB2_2 713; 714; X86-Darwin-LABEL: test_large: 715; X86-Darwin: ## %bb.0: 716; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %ecx 717; X86-Darwin-NEXT: movl $432, %eax ## imm = 0x1B0 718; X86-Darwin-NEXT: cmpl %gs:(%eax), %ecx 719; X86-Darwin-NEXT: jbe LBB2_1 720; X86-Darwin-NEXT: LBB2_2: 721; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C 722; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016 723; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 724; X86-Darwin-NEXT: movl %eax, (%esp) 725; X86-Darwin-NEXT: movl $3, {{[0-9]+}}(%esp) 726; X86-Darwin-NEXT: calll _dummy_use 727; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C 728; X86-Darwin-NEXT: retl 729; X86-Darwin-NEXT: LBB2_1: 730; X86-Darwin-NEXT: pushl $0 731; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C 732; X86-Darwin-NEXT: calll ___morestack 733; X86-Darwin-NEXT: retl 734; X86-Darwin-NEXT: jmp LBB2_2 735; 736; X64-Darwin-LABEL: test_large: 737; X64-Darwin: ## %bb.0: 738; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 739; X64-Darwin-NEXT: cmpq %gs:816, %r11 740; X64-Darwin-NEXT: jbe LBB2_1 741; X64-Darwin-NEXT: LBB2_2: 742; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48 743; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016 744; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 745; X64-Darwin-NEXT: movl $3, %esi 746; X64-Darwin-NEXT: callq _dummy_use 747; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48 748; X64-Darwin-NEXT: retq 749; X64-Darwin-NEXT: LBB2_1: 750; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48 751; X64-Darwin-NEXT: movl $0, %r11d 752; X64-Darwin-NEXT: callq ___morestack 753; X64-Darwin-NEXT: retq 754; X64-Darwin-NEXT: jmp LBB2_2 755; 756; X86-MinGW-LABEL: test_large: 757; X86-MinGW: # %bb.0: 758; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %ecx 759; X86-MinGW-NEXT: cmpl %fs:20, %ecx 760; X86-MinGW-NEXT: jbe LBB2_1 761; X86-MinGW-NEXT: LBB2_2: 762; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40 763; X86-MinGW-NEXT: calll __alloca 764; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004 765; X86-MinGW-NEXT: movl %esp, %eax 766; X86-MinGW-NEXT: pushl $3 767; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 768; X86-MinGW-NEXT: pushl %eax 769; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 770; X86-MinGW-NEXT: calll _dummy_use 771; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48 772; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008 773; X86-MinGW-NEXT: retl 774; X86-MinGW-NEXT: LBB2_1: 775; X86-MinGW-NEXT: pushl $0 776; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40 777; X86-MinGW-NEXT: calll ___morestack 778; X86-MinGW-NEXT: retl 779; X86-MinGW-NEXT: jmp LBB2_2 780; 781; X64-FreeBSD-LABEL: test_large: 782; X64-FreeBSD: # %bb.0: 783; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 784; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 785; X64-FreeBSD-NEXT: jbe .LBB2_1 786; X64-FreeBSD-NEXT: .LBB2_2: 787; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 788; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016 789; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 790; X64-FreeBSD-NEXT: movl $3, %esi 791; X64-FreeBSD-NEXT: callq dummy_use@PLT 792; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 793; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 794; X64-FreeBSD-NEXT: retq 795; X64-FreeBSD-NEXT: .LBB2_1: 796; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 797; X64-FreeBSD-NEXT: movl $0, %r11d 798; X64-FreeBSD-NEXT: callq __morestack 799; X64-FreeBSD-NEXT: retq 800; X64-FreeBSD-NEXT: jmp .LBB2_2 801; 802; X86-DFlyBSD-LABEL: test_large: 803; X86-DFlyBSD: # %bb.0: 804; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %ecx 805; X86-DFlyBSD-NEXT: cmpl %fs:16, %ecx 806; X86-DFlyBSD-NEXT: jbe .LBB2_1 807; X86-DFlyBSD-NEXT: .LBB2_2: 808; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40 809; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004 810; X86-DFlyBSD-NEXT: movl %esp, %eax 811; X86-DFlyBSD-NEXT: pushl $3 812; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 813; X86-DFlyBSD-NEXT: pushl %eax 814; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 815; X86-DFlyBSD-NEXT: calll dummy_use@PLT 816; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48 817; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008 818; X86-DFlyBSD-NEXT: retl 819; X86-DFlyBSD-NEXT: .LBB2_1: 820; X86-DFlyBSD-NEXT: pushl $0 821; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40 822; X86-DFlyBSD-NEXT: calll __morestack 823; X86-DFlyBSD-NEXT: retl 824; X86-DFlyBSD-NEXT: jmp .LBB2_2 825; 826; X64-DFlyBSD-LABEL: test_large: 827; X64-DFlyBSD: # %bb.0: 828; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 829; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 830; X64-DFlyBSD-NEXT: jbe .LBB2_1 831; X64-DFlyBSD-NEXT: .LBB2_2: 832; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 833; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016 834; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 835; X64-DFlyBSD-NEXT: movl $3, %esi 836; X64-DFlyBSD-NEXT: callq dummy_use@PLT 837; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 838; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 839; X64-DFlyBSD-NEXT: retq 840; X64-DFlyBSD-NEXT: .LBB2_1: 841; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 842; X64-DFlyBSD-NEXT: movl $0, %r11d 843; X64-DFlyBSD-NEXT: callq __morestack 844; X64-DFlyBSD-NEXT: retq 845; X64-DFlyBSD-NEXT: jmp .LBB2_2 846; 847; X64-MinGW-LABEL: test_large: 848; X64-MinGW: # %bb.0: 849; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 850; X64-MinGW-NEXT: cmpq %gs:40, %r11 851; X64-MinGW-NEXT: jbe .LBB2_1 852; X64-MinGW-NEXT: .LBB2_2: 853; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68 854; X64-MinGW-NEXT: callq ___chkstk_ms 855; X64-MinGW-NEXT: subq %rax, %rsp 856; X64-MinGW-NEXT: .seh_stackalloc 40040 857; X64-MinGW-NEXT: .seh_endprologue 858; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 859; X64-MinGW-NEXT: movl $3, %edx 860; X64-MinGW-NEXT: callq dummy_use 861; X64-MinGW-NEXT: nop 862; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68 863; X64-MinGW-NEXT: retq 864; X64-MinGW-NEXT: .LBB2_1: 865; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68 866; X64-MinGW-NEXT: movl $32, %r11d 867; X64-MinGW-NEXT: callq __morestack 868; X64-MinGW-NEXT: retq 869; X64-MinGW-NEXT: jmp .LBB2_2 870; X64-MinGW-NEXT: .seh_endproc 871 %mem = alloca i32, i32 10000 872 call void @dummy_use (ptr %mem, i32 3) 873 ret void 874} 875 876define fastcc void @test_fastcc() #0 { 877; X86-Linux-LABEL: test_fastcc: 878; X86-Linux: # %bb.0: 879; X86-Linux-NEXT: cmpl %gs:48, %esp 880; X86-Linux-NEXT: jbe .LBB3_1 881; X86-Linux-NEXT: .LBB3_2: 882; X86-Linux-NEXT: subl $52, %esp 883; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52 884; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 885; X86-Linux-NEXT: pushl $10 886; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 887; X86-Linux-NEXT: pushl %eax 888; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 889; X86-Linux-NEXT: calll dummy_use@PLT 890; X86-Linux-NEXT: addl $60, %esp 891; X86-Linux-NEXT: .cfi_adjust_cfa_offset -60 892; X86-Linux-NEXT: retl 893; X86-Linux-NEXT: .LBB3_1: 894; X86-Linux-NEXT: pushl $0 895; X86-Linux-NEXT: pushl $44 896; X86-Linux-NEXT: calll __morestack 897; X86-Linux-NEXT: retl 898; X86-Linux-NEXT: jmp .LBB3_2 899; 900; X64-Linux-LABEL: test_fastcc: 901; X64-Linux: # %bb.0: 902; X64-Linux-NEXT: cmpq %fs:112, %rsp 903; X64-Linux-NEXT: jbe .LBB3_1 904; X64-Linux-NEXT: .LBB3_2: 905; X64-Linux-NEXT: subq $40, %rsp 906; X64-Linux-NEXT: .cfi_def_cfa_offset 48 907; X64-Linux-NEXT: movq %rsp, %rdi 908; X64-Linux-NEXT: movl $10, %esi 909; X64-Linux-NEXT: callq dummy_use@PLT 910; X64-Linux-NEXT: addq $40, %rsp 911; X64-Linux-NEXT: .cfi_def_cfa_offset 8 912; X64-Linux-NEXT: retq 913; X64-Linux-NEXT: .LBB3_1: 914; X64-Linux-NEXT: movl $40, %r10d 915; X64-Linux-NEXT: movl $0, %r11d 916; X64-Linux-NEXT: callq __morestack 917; X64-Linux-NEXT: retq 918; X64-Linux-NEXT: jmp .LBB3_2 919; 920; X64-Linux-Large-LABEL: test_fastcc: 921; X64-Linux-Large: # %bb.0: 922; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp 923; X64-Linux-Large-NEXT: jbe .LBB3_1 924; X64-Linux-Large-NEXT: .LBB3_2: 925; X64-Linux-Large-NEXT: subq $40, %rsp 926; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48 927; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 928; X64-Linux-Large-NEXT: movq %rsp, %rdi 929; X64-Linux-Large-NEXT: movl $10, %esi 930; X64-Linux-Large-NEXT: callq *%rax 931; X64-Linux-Large-NEXT: addq $40, %rsp 932; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 933; X64-Linux-Large-NEXT: retq 934; X64-Linux-Large-NEXT: .LBB3_1: 935; X64-Linux-Large-NEXT: movl $40, %r10d 936; X64-Linux-Large-NEXT: movl $0, %r11d 937; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 938; X64-Linux-Large-NEXT: retq 939; X64-Linux-Large-NEXT: jmp .LBB3_2 940; 941; X32ABI-LABEL: test_fastcc: 942; X32ABI: # %bb.0: 943; X32ABI-NEXT: cmpl %fs:64, %esp 944; X32ABI-NEXT: jbe .LBB3_1 945; X32ABI-NEXT: .LBB3_2: 946; X32ABI-NEXT: subl $40, %esp 947; X32ABI-NEXT: .cfi_def_cfa_offset 48 948; X32ABI-NEXT: movl %esp, %edi 949; X32ABI-NEXT: movl $10, %esi 950; X32ABI-NEXT: callq dummy_use@PLT 951; X32ABI-NEXT: addl $40, %esp 952; X32ABI-NEXT: .cfi_def_cfa_offset 8 953; X32ABI-NEXT: retq 954; X32ABI-NEXT: .LBB3_1: 955; X32ABI-NEXT: movl $40, %r10d 956; X32ABI-NEXT: movl $0, %r11d 957; X32ABI-NEXT: callq __morestack 958; X32ABI-NEXT: retq 959; X32ABI-NEXT: jmp .LBB3_2 960; 961; X86-Darwin-LABEL: test_fastcc: 962; X86-Darwin: ## %bb.0: 963; X86-Darwin-NEXT: movl $432, %eax ## imm = 0x1B0 964; X86-Darwin-NEXT: cmpl %gs:(%eax), %esp 965; X86-Darwin-NEXT: jbe LBB3_1 966; X86-Darwin-NEXT: LBB3_2: 967; X86-Darwin-NEXT: subl $60, %esp 968; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 969; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 970; X86-Darwin-NEXT: movl %eax, (%esp) 971; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) 972; X86-Darwin-NEXT: calll _dummy_use 973; X86-Darwin-NEXT: addl $60, %esp 974; X86-Darwin-NEXT: retl 975; X86-Darwin-NEXT: LBB3_1: 976; X86-Darwin-NEXT: pushl $0 977; X86-Darwin-NEXT: pushl $60 978; X86-Darwin-NEXT: calll ___morestack 979; X86-Darwin-NEXT: retl 980; X86-Darwin-NEXT: jmp LBB3_2 981; 982; X64-Darwin-LABEL: test_fastcc: 983; X64-Darwin: ## %bb.0: 984; X64-Darwin-NEXT: cmpq %gs:816, %rsp 985; X64-Darwin-NEXT: jbe LBB3_1 986; X64-Darwin-NEXT: LBB3_2: 987; X64-Darwin-NEXT: subq $40, %rsp 988; X64-Darwin-NEXT: .cfi_def_cfa_offset 48 989; X64-Darwin-NEXT: movq %rsp, %rdi 990; X64-Darwin-NEXT: movl $10, %esi 991; X64-Darwin-NEXT: callq _dummy_use 992; X64-Darwin-NEXT: addq $40, %rsp 993; X64-Darwin-NEXT: retq 994; X64-Darwin-NEXT: LBB3_1: 995; X64-Darwin-NEXT: movl $40, %r10d 996; X64-Darwin-NEXT: movl $0, %r11d 997; X64-Darwin-NEXT: callq ___morestack 998; X64-Darwin-NEXT: retq 999; X64-Darwin-NEXT: jmp LBB3_2 1000; 1001; X86-MinGW-LABEL: test_fastcc: 1002; X86-MinGW: # %bb.0: 1003; X86-MinGW-NEXT: cmpl %fs:20, %esp 1004; X86-MinGW-NEXT: jbe LBB3_1 1005; X86-MinGW-NEXT: LBB3_2: 1006; X86-MinGW-NEXT: subl $40, %esp 1007; X86-MinGW-NEXT: .cfi_def_cfa_offset 44 1008; X86-MinGW-NEXT: movl %esp, %eax 1009; X86-MinGW-NEXT: pushl $10 1010; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1011; X86-MinGW-NEXT: pushl %eax 1012; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1013; X86-MinGW-NEXT: calll _dummy_use 1014; X86-MinGW-NEXT: addl $48, %esp 1015; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -48 1016; X86-MinGW-NEXT: retl 1017; X86-MinGW-NEXT: LBB3_1: 1018; X86-MinGW-NEXT: pushl $0 1019; X86-MinGW-NEXT: pushl $40 1020; X86-MinGW-NEXT: calll ___morestack 1021; X86-MinGW-NEXT: retl 1022; X86-MinGW-NEXT: jmp LBB3_2 1023; 1024; X64-FreeBSD-LABEL: test_fastcc: 1025; X64-FreeBSD: # %bb.0: 1026; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp 1027; X64-FreeBSD-NEXT: jbe .LBB3_1 1028; X64-FreeBSD-NEXT: .LBB3_2: 1029; X64-FreeBSD-NEXT: subq $40, %rsp 1030; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48 1031; X64-FreeBSD-NEXT: movq %rsp, %rdi 1032; X64-FreeBSD-NEXT: movl $10, %esi 1033; X64-FreeBSD-NEXT: callq dummy_use@PLT 1034; X64-FreeBSD-NEXT: addq $40, %rsp 1035; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 1036; X64-FreeBSD-NEXT: retq 1037; X64-FreeBSD-NEXT: .LBB3_1: 1038; X64-FreeBSD-NEXT: movl $40, %r10d 1039; X64-FreeBSD-NEXT: movl $0, %r11d 1040; X64-FreeBSD-NEXT: callq __morestack 1041; X64-FreeBSD-NEXT: retq 1042; X64-FreeBSD-NEXT: jmp .LBB3_2 1043; 1044; X86-DFlyBSD-LABEL: test_fastcc: 1045; X86-DFlyBSD: # %bb.0: 1046; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp 1047; X86-DFlyBSD-NEXT: jbe .LBB3_1 1048; X86-DFlyBSD-NEXT: .LBB3_2: 1049; X86-DFlyBSD-NEXT: subl $40, %esp 1050; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44 1051; X86-DFlyBSD-NEXT: movl %esp, %eax 1052; X86-DFlyBSD-NEXT: pushl $10 1053; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 1054; X86-DFlyBSD-NEXT: pushl %eax 1055; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 1056; X86-DFlyBSD-NEXT: calll dummy_use@PLT 1057; X86-DFlyBSD-NEXT: addl $48, %esp 1058; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -48 1059; X86-DFlyBSD-NEXT: retl 1060; X86-DFlyBSD-NEXT: .LBB3_1: 1061; X86-DFlyBSD-NEXT: pushl $0 1062; X86-DFlyBSD-NEXT: pushl $40 1063; X86-DFlyBSD-NEXT: calll __morestack 1064; X86-DFlyBSD-NEXT: retl 1065; X86-DFlyBSD-NEXT: jmp .LBB3_2 1066; 1067; X64-DFlyBSD-LABEL: test_fastcc: 1068; X64-DFlyBSD: # %bb.0: 1069; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp 1070; X64-DFlyBSD-NEXT: jbe .LBB3_1 1071; X64-DFlyBSD-NEXT: .LBB3_2: 1072; X64-DFlyBSD-NEXT: subq $40, %rsp 1073; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 1074; X64-DFlyBSD-NEXT: movq %rsp, %rdi 1075; X64-DFlyBSD-NEXT: movl $10, %esi 1076; X64-DFlyBSD-NEXT: callq dummy_use@PLT 1077; X64-DFlyBSD-NEXT: addq $40, %rsp 1078; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 1079; X64-DFlyBSD-NEXT: retq 1080; X64-DFlyBSD-NEXT: .LBB3_1: 1081; X64-DFlyBSD-NEXT: movl $40, %r10d 1082; X64-DFlyBSD-NEXT: movl $0, %r11d 1083; X64-DFlyBSD-NEXT: callq __morestack 1084; X64-DFlyBSD-NEXT: retq 1085; X64-DFlyBSD-NEXT: jmp .LBB3_2 1086; 1087; X64-MinGW-LABEL: test_fastcc: 1088; X64-MinGW: # %bb.0: 1089; X64-MinGW-NEXT: cmpq %gs:40, %rsp 1090; X64-MinGW-NEXT: jbe .LBB3_1 1091; X64-MinGW-NEXT: .LBB3_2: 1092; X64-MinGW-NEXT: subq $72, %rsp 1093; X64-MinGW-NEXT: .seh_stackalloc 72 1094; X64-MinGW-NEXT: .seh_endprologue 1095; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 1096; X64-MinGW-NEXT: movl $10, %edx 1097; X64-MinGW-NEXT: callq dummy_use 1098; X64-MinGW-NEXT: nop 1099; X64-MinGW-NEXT: addq $72, %rsp 1100; X64-MinGW-NEXT: retq 1101; X64-MinGW-NEXT: .LBB3_1: 1102; X64-MinGW-NEXT: movl $72, %r10d 1103; X64-MinGW-NEXT: movl $32, %r11d 1104; X64-MinGW-NEXT: callq __morestack 1105; X64-MinGW-NEXT: retq 1106; X64-MinGW-NEXT: jmp .LBB3_2 1107; X64-MinGW-NEXT: .seh_endproc 1108 %mem = alloca i32, i32 10 1109 call void @dummy_use (ptr %mem, i32 10) 1110 ret void 1111} 1112 1113define fastcc void @test_fastcc_large() #0 { 1114; X86-Linux-LABEL: test_fastcc_large: 1115; X86-Linux: # %bb.0: 1116; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %eax 1117; X86-Linux-NEXT: cmpl %gs:48, %eax 1118; X86-Linux-NEXT: jbe .LBB4_1 1119; X86-Linux-NEXT: .LBB4_2: 1120; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54 1121; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020 1122; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 1123; X86-Linux-NEXT: pushl $3 1124; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 1125; X86-Linux-NEXT: pushl %eax 1126; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 1127; X86-Linux-NEXT: calll dummy_use@PLT 1128; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C 1129; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028 1130; X86-Linux-NEXT: retl 1131; X86-Linux-NEXT: .LBB4_1: 1132; X86-Linux-NEXT: pushl $0 1133; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C 1134; X86-Linux-NEXT: calll __morestack 1135; X86-Linux-NEXT: retl 1136; X86-Linux-NEXT: jmp .LBB4_2 1137; 1138; X64-Linux-LABEL: test_fastcc_large: 1139; X64-Linux: # %bb.0: 1140; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1141; X64-Linux-NEXT: cmpq %fs:112, %r11 1142; X64-Linux-NEXT: jbe .LBB4_1 1143; X64-Linux-NEXT: .LBB4_2: 1144; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48 1145; X64-Linux-NEXT: .cfi_def_cfa_offset 40016 1146; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1147; X64-Linux-NEXT: movl $3, %esi 1148; X64-Linux-NEXT: callq dummy_use@PLT 1149; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48 1150; X64-Linux-NEXT: .cfi_def_cfa_offset 8 1151; X64-Linux-NEXT: retq 1152; X64-Linux-NEXT: .LBB4_1: 1153; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48 1154; X64-Linux-NEXT: movl $0, %r11d 1155; X64-Linux-NEXT: callq __morestack 1156; X64-Linux-NEXT: retq 1157; X64-Linux-NEXT: jmp .LBB4_2 1158; 1159; X64-Linux-Large-LABEL: test_fastcc_large: 1160; X64-Linux-Large: # %bb.0: 1161; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1162; X64-Linux-Large-NEXT: cmpq %fs:112, %r11 1163; X64-Linux-Large-NEXT: jbe .LBB4_1 1164; X64-Linux-Large-NEXT: .LBB4_2: 1165; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48 1166; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016 1167; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 1168; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1169; X64-Linux-Large-NEXT: movl $3, %esi 1170; X64-Linux-Large-NEXT: callq *%rax 1171; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48 1172; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 1173; X64-Linux-Large-NEXT: retq 1174; X64-Linux-Large-NEXT: .LBB4_1: 1175; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48 1176; X64-Linux-Large-NEXT: movl $0, %r11d 1177; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 1178; X64-Linux-Large-NEXT: retq 1179; X64-Linux-Large-NEXT: jmp .LBB4_2 1180; 1181; X32ABI-LABEL: test_fastcc_large: 1182; X32ABI: # %bb.0: 1183; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d 1184; X32ABI-NEXT: cmpl %fs:64, %r11d 1185; X32ABI-NEXT: jbe .LBB4_1 1186; X32ABI-NEXT: .LBB4_2: 1187; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48 1188; X32ABI-NEXT: .cfi_def_cfa_offset 40016 1189; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi 1190; X32ABI-NEXT: movl $3, %esi 1191; X32ABI-NEXT: callq dummy_use@PLT 1192; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48 1193; X32ABI-NEXT: .cfi_def_cfa_offset 8 1194; X32ABI-NEXT: retq 1195; X32ABI-NEXT: .LBB4_1: 1196; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48 1197; X32ABI-NEXT: movl $0, %r11d 1198; X32ABI-NEXT: callq __morestack 1199; X32ABI-NEXT: retq 1200; X32ABI-NEXT: jmp .LBB4_2 1201; 1202; X86-Darwin-LABEL: test_fastcc_large: 1203; X86-Darwin: ## %bb.0: 1204; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %eax 1205; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 1206; X86-Darwin-NEXT: cmpl %gs:(%ecx), %eax 1207; X86-Darwin-NEXT: jbe LBB4_1 1208; X86-Darwin-NEXT: LBB4_2: 1209; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C 1210; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016 1211; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 1212; X86-Darwin-NEXT: movl %eax, (%esp) 1213; X86-Darwin-NEXT: movl $3, {{[0-9]+}}(%esp) 1214; X86-Darwin-NEXT: calll _dummy_use 1215; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C 1216; X86-Darwin-NEXT: retl 1217; X86-Darwin-NEXT: LBB4_1: 1218; X86-Darwin-NEXT: pushl $0 1219; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C 1220; X86-Darwin-NEXT: calll ___morestack 1221; X86-Darwin-NEXT: retl 1222; X86-Darwin-NEXT: jmp LBB4_2 1223; 1224; X64-Darwin-LABEL: test_fastcc_large: 1225; X64-Darwin: ## %bb.0: 1226; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1227; X64-Darwin-NEXT: cmpq %gs:816, %r11 1228; X64-Darwin-NEXT: jbe LBB4_1 1229; X64-Darwin-NEXT: LBB4_2: 1230; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48 1231; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016 1232; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1233; X64-Darwin-NEXT: movl $3, %esi 1234; X64-Darwin-NEXT: callq _dummy_use 1235; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48 1236; X64-Darwin-NEXT: retq 1237; X64-Darwin-NEXT: LBB4_1: 1238; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48 1239; X64-Darwin-NEXT: movl $0, %r11d 1240; X64-Darwin-NEXT: callq ___morestack 1241; X64-Darwin-NEXT: retq 1242; X64-Darwin-NEXT: jmp LBB4_2 1243; 1244; X86-MinGW-LABEL: test_fastcc_large: 1245; X86-MinGW: # %bb.0: 1246; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %eax 1247; X86-MinGW-NEXT: cmpl %fs:20, %eax 1248; X86-MinGW-NEXT: jbe LBB4_1 1249; X86-MinGW-NEXT: LBB4_2: 1250; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40 1251; X86-MinGW-NEXT: calll __alloca 1252; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004 1253; X86-MinGW-NEXT: movl %esp, %eax 1254; X86-MinGW-NEXT: pushl $3 1255; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1256; X86-MinGW-NEXT: pushl %eax 1257; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1258; X86-MinGW-NEXT: calll _dummy_use 1259; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48 1260; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008 1261; X86-MinGW-NEXT: retl 1262; X86-MinGW-NEXT: LBB4_1: 1263; X86-MinGW-NEXT: pushl $0 1264; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40 1265; X86-MinGW-NEXT: calll ___morestack 1266; X86-MinGW-NEXT: retl 1267; X86-MinGW-NEXT: jmp LBB4_2 1268; 1269; X64-FreeBSD-LABEL: test_fastcc_large: 1270; X64-FreeBSD: # %bb.0: 1271; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1272; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 1273; X64-FreeBSD-NEXT: jbe .LBB4_1 1274; X64-FreeBSD-NEXT: .LBB4_2: 1275; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 1276; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016 1277; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1278; X64-FreeBSD-NEXT: movl $3, %esi 1279; X64-FreeBSD-NEXT: callq dummy_use@PLT 1280; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 1281; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 1282; X64-FreeBSD-NEXT: retq 1283; X64-FreeBSD-NEXT: .LBB4_1: 1284; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 1285; X64-FreeBSD-NEXT: movl $0, %r11d 1286; X64-FreeBSD-NEXT: callq __morestack 1287; X64-FreeBSD-NEXT: retq 1288; X64-FreeBSD-NEXT: jmp .LBB4_2 1289; 1290; X86-DFlyBSD-LABEL: test_fastcc_large: 1291; X86-DFlyBSD: # %bb.0: 1292; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %eax 1293; X86-DFlyBSD-NEXT: cmpl %fs:16, %eax 1294; X86-DFlyBSD-NEXT: jbe .LBB4_1 1295; X86-DFlyBSD-NEXT: .LBB4_2: 1296; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40 1297; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004 1298; X86-DFlyBSD-NEXT: movl %esp, %eax 1299; X86-DFlyBSD-NEXT: pushl $3 1300; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 1301; X86-DFlyBSD-NEXT: pushl %eax 1302; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 1303; X86-DFlyBSD-NEXT: calll dummy_use@PLT 1304; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48 1305; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008 1306; X86-DFlyBSD-NEXT: retl 1307; X86-DFlyBSD-NEXT: .LBB4_1: 1308; X86-DFlyBSD-NEXT: pushl $0 1309; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40 1310; X86-DFlyBSD-NEXT: calll __morestack 1311; X86-DFlyBSD-NEXT: retl 1312; X86-DFlyBSD-NEXT: jmp .LBB4_2 1313; 1314; X64-DFlyBSD-LABEL: test_fastcc_large: 1315; X64-DFlyBSD: # %bb.0: 1316; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1317; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 1318; X64-DFlyBSD-NEXT: jbe .LBB4_1 1319; X64-DFlyBSD-NEXT: .LBB4_2: 1320; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 1321; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016 1322; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1323; X64-DFlyBSD-NEXT: movl $3, %esi 1324; X64-DFlyBSD-NEXT: callq dummy_use@PLT 1325; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 1326; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 1327; X64-DFlyBSD-NEXT: retq 1328; X64-DFlyBSD-NEXT: .LBB4_1: 1329; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 1330; X64-DFlyBSD-NEXT: movl $0, %r11d 1331; X64-DFlyBSD-NEXT: callq __morestack 1332; X64-DFlyBSD-NEXT: retq 1333; X64-DFlyBSD-NEXT: jmp .LBB4_2 1334; 1335; X64-MinGW-LABEL: test_fastcc_large: 1336; X64-MinGW: # %bb.0: 1337; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1338; X64-MinGW-NEXT: cmpq %gs:40, %r11 1339; X64-MinGW-NEXT: jbe .LBB4_1 1340; X64-MinGW-NEXT: .LBB4_2: 1341; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68 1342; X64-MinGW-NEXT: callq ___chkstk_ms 1343; X64-MinGW-NEXT: subq %rax, %rsp 1344; X64-MinGW-NEXT: .seh_stackalloc 40040 1345; X64-MinGW-NEXT: .seh_endprologue 1346; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 1347; X64-MinGW-NEXT: movl $3, %edx 1348; X64-MinGW-NEXT: callq dummy_use 1349; X64-MinGW-NEXT: nop 1350; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68 1351; X64-MinGW-NEXT: retq 1352; X64-MinGW-NEXT: .LBB4_1: 1353; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68 1354; X64-MinGW-NEXT: movl $32, %r11d 1355; X64-MinGW-NEXT: callq __morestack 1356; X64-MinGW-NEXT: retq 1357; X64-MinGW-NEXT: jmp .LBB4_2 1358; X64-MinGW-NEXT: .seh_endproc 1359 %mem = alloca i32, i32 10000 1360 call void @dummy_use (ptr %mem, i32 3) 1361 ret void 1362} 1363 1364; This is testing that the Mac implementation preserves ecx 1365 1366define fastcc void @test_fastcc_large_with_ecx_arg(i32 %a) #0 { 1367; X86-Linux-LABEL: test_fastcc_large_with_ecx_arg: 1368; X86-Linux: # %bb.0: 1369; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %eax 1370; X86-Linux-NEXT: cmpl %gs:48, %eax 1371; X86-Linux-NEXT: jbe .LBB5_1 1372; X86-Linux-NEXT: .LBB5_2: 1373; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54 1374; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020 1375; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 1376; X86-Linux-NEXT: pushl %ecx 1377; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 1378; X86-Linux-NEXT: pushl %eax 1379; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 1380; X86-Linux-NEXT: calll dummy_use@PLT 1381; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C 1382; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028 1383; X86-Linux-NEXT: retl 1384; X86-Linux-NEXT: .LBB5_1: 1385; X86-Linux-NEXT: pushl $0 1386; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C 1387; X86-Linux-NEXT: calll __morestack 1388; X86-Linux-NEXT: retl 1389; X86-Linux-NEXT: jmp .LBB5_2 1390; 1391; X64-Linux-LABEL: test_fastcc_large_with_ecx_arg: 1392; X64-Linux: # %bb.0: 1393; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1394; X64-Linux-NEXT: cmpq %fs:112, %r11 1395; X64-Linux-NEXT: jbe .LBB5_1 1396; X64-Linux-NEXT: .LBB5_2: 1397; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48 1398; X64-Linux-NEXT: .cfi_def_cfa_offset 40016 1399; X64-Linux-NEXT: movl %edi, %esi 1400; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1401; X64-Linux-NEXT: callq dummy_use@PLT 1402; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48 1403; X64-Linux-NEXT: .cfi_def_cfa_offset 8 1404; X64-Linux-NEXT: retq 1405; X64-Linux-NEXT: .LBB5_1: 1406; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48 1407; X64-Linux-NEXT: movl $0, %r11d 1408; X64-Linux-NEXT: callq __morestack 1409; X64-Linux-NEXT: retq 1410; X64-Linux-NEXT: jmp .LBB5_2 1411; 1412; X64-Linux-Large-LABEL: test_fastcc_large_with_ecx_arg: 1413; X64-Linux-Large: # %bb.0: 1414; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1415; X64-Linux-Large-NEXT: cmpq %fs:112, %r11 1416; X64-Linux-Large-NEXT: jbe .LBB5_1 1417; X64-Linux-Large-NEXT: .LBB5_2: 1418; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48 1419; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016 1420; X64-Linux-Large-NEXT: movl %edi, %esi 1421; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 1422; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1423; X64-Linux-Large-NEXT: callq *%rax 1424; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48 1425; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 1426; X64-Linux-Large-NEXT: retq 1427; X64-Linux-Large-NEXT: .LBB5_1: 1428; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48 1429; X64-Linux-Large-NEXT: movl $0, %r11d 1430; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 1431; X64-Linux-Large-NEXT: retq 1432; X64-Linux-Large-NEXT: jmp .LBB5_2 1433; 1434; X32ABI-LABEL: test_fastcc_large_with_ecx_arg: 1435; X32ABI: # %bb.0: 1436; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d 1437; X32ABI-NEXT: cmpl %fs:64, %r11d 1438; X32ABI-NEXT: jbe .LBB5_1 1439; X32ABI-NEXT: .LBB5_2: 1440; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48 1441; X32ABI-NEXT: .cfi_def_cfa_offset 40016 1442; X32ABI-NEXT: movl %edi, %esi 1443; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi 1444; X32ABI-NEXT: callq dummy_use@PLT 1445; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48 1446; X32ABI-NEXT: .cfi_def_cfa_offset 8 1447; X32ABI-NEXT: retq 1448; X32ABI-NEXT: .LBB5_1: 1449; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48 1450; X32ABI-NEXT: movl $0, %r11d 1451; X32ABI-NEXT: callq __morestack 1452; X32ABI-NEXT: retq 1453; X32ABI-NEXT: jmp .LBB5_2 1454; 1455; X86-Darwin-LABEL: test_fastcc_large_with_ecx_arg: 1456; X86-Darwin: ## %bb.0: 1457; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %eax 1458; X86-Darwin-NEXT: pushl %ecx 1459; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 1460; X86-Darwin-NEXT: cmpl %gs:(%ecx), %eax 1461; X86-Darwin-NEXT: popl %ecx 1462; X86-Darwin-NEXT: jbe LBB5_1 1463; X86-Darwin-NEXT: LBB5_2: 1464; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C 1465; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016 1466; X86-Darwin-NEXT: movl %ecx, {{[0-9]+}}(%esp) 1467; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 1468; X86-Darwin-NEXT: movl %eax, (%esp) 1469; X86-Darwin-NEXT: calll _dummy_use 1470; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C 1471; X86-Darwin-NEXT: retl 1472; X86-Darwin-NEXT: LBB5_1: 1473; X86-Darwin-NEXT: pushl $0 1474; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C 1475; X86-Darwin-NEXT: calll ___morestack 1476; X86-Darwin-NEXT: retl 1477; X86-Darwin-NEXT: jmp LBB5_2 1478; 1479; X64-Darwin-LABEL: test_fastcc_large_with_ecx_arg: 1480; X64-Darwin: ## %bb.0: 1481; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1482; X64-Darwin-NEXT: cmpq %gs:816, %r11 1483; X64-Darwin-NEXT: jbe LBB5_1 1484; X64-Darwin-NEXT: LBB5_2: 1485; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48 1486; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016 1487; X64-Darwin-NEXT: movl %edi, %esi 1488; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1489; X64-Darwin-NEXT: callq _dummy_use 1490; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48 1491; X64-Darwin-NEXT: retq 1492; X64-Darwin-NEXT: LBB5_1: 1493; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48 1494; X64-Darwin-NEXT: movl $0, %r11d 1495; X64-Darwin-NEXT: callq ___morestack 1496; X64-Darwin-NEXT: retq 1497; X64-Darwin-NEXT: jmp LBB5_2 1498; 1499; X86-MinGW-LABEL: test_fastcc_large_with_ecx_arg: 1500; X86-MinGW: # %bb.0: 1501; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %eax 1502; X86-MinGW-NEXT: cmpl %fs:20, %eax 1503; X86-MinGW-NEXT: jbe LBB5_1 1504; X86-MinGW-NEXT: LBB5_2: 1505; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40 1506; X86-MinGW-NEXT: calll __alloca 1507; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004 1508; X86-MinGW-NEXT: movl %esp, %eax 1509; X86-MinGW-NEXT: pushl %ecx 1510; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1511; X86-MinGW-NEXT: pushl %eax 1512; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1513; X86-MinGW-NEXT: calll _dummy_use 1514; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48 1515; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008 1516; X86-MinGW-NEXT: retl 1517; X86-MinGW-NEXT: LBB5_1: 1518; X86-MinGW-NEXT: pushl $0 1519; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40 1520; X86-MinGW-NEXT: calll ___morestack 1521; X86-MinGW-NEXT: retl 1522; X86-MinGW-NEXT: jmp LBB5_2 1523; 1524; X64-FreeBSD-LABEL: test_fastcc_large_with_ecx_arg: 1525; X64-FreeBSD: # %bb.0: 1526; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1527; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 1528; X64-FreeBSD-NEXT: jbe .LBB5_1 1529; X64-FreeBSD-NEXT: .LBB5_2: 1530; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 1531; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016 1532; X64-FreeBSD-NEXT: movl %edi, %esi 1533; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1534; X64-FreeBSD-NEXT: callq dummy_use@PLT 1535; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 1536; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 1537; X64-FreeBSD-NEXT: retq 1538; X64-FreeBSD-NEXT: .LBB5_1: 1539; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 1540; X64-FreeBSD-NEXT: movl $0, %r11d 1541; X64-FreeBSD-NEXT: callq __morestack 1542; X64-FreeBSD-NEXT: retq 1543; X64-FreeBSD-NEXT: jmp .LBB5_2 1544; 1545; X86-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg: 1546; X86-DFlyBSD: # %bb.0: 1547; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %eax 1548; X86-DFlyBSD-NEXT: cmpl %fs:16, %eax 1549; X86-DFlyBSD-NEXT: jbe .LBB5_1 1550; X86-DFlyBSD-NEXT: .LBB5_2: 1551; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40 1552; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004 1553; X86-DFlyBSD-NEXT: movl %esp, %eax 1554; X86-DFlyBSD-NEXT: pushl %ecx 1555; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 1556; X86-DFlyBSD-NEXT: pushl %eax 1557; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 1558; X86-DFlyBSD-NEXT: calll dummy_use@PLT 1559; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48 1560; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008 1561; X86-DFlyBSD-NEXT: retl 1562; X86-DFlyBSD-NEXT: .LBB5_1: 1563; X86-DFlyBSD-NEXT: pushl $0 1564; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40 1565; X86-DFlyBSD-NEXT: calll __morestack 1566; X86-DFlyBSD-NEXT: retl 1567; X86-DFlyBSD-NEXT: jmp .LBB5_2 1568; 1569; X64-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg: 1570; X64-DFlyBSD: # %bb.0: 1571; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1572; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 1573; X64-DFlyBSD-NEXT: jbe .LBB5_1 1574; X64-DFlyBSD-NEXT: .LBB5_2: 1575; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48 1576; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016 1577; X64-DFlyBSD-NEXT: movl %edi, %esi 1578; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi 1579; X64-DFlyBSD-NEXT: callq dummy_use@PLT 1580; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48 1581; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 1582; X64-DFlyBSD-NEXT: retq 1583; X64-DFlyBSD-NEXT: .LBB5_1: 1584; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48 1585; X64-DFlyBSD-NEXT: movl $0, %r11d 1586; X64-DFlyBSD-NEXT: callq __morestack 1587; X64-DFlyBSD-NEXT: retq 1588; X64-DFlyBSD-NEXT: jmp .LBB5_2 1589; 1590; X64-MinGW-LABEL: test_fastcc_large_with_ecx_arg: 1591; X64-MinGW: # %bb.0: 1592; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11 1593; X64-MinGW-NEXT: cmpq %gs:40, %r11 1594; X64-MinGW-NEXT: jbe .LBB5_1 1595; X64-MinGW-NEXT: .LBB5_2: 1596; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68 1597; X64-MinGW-NEXT: callq ___chkstk_ms 1598; X64-MinGW-NEXT: subq %rax, %rsp 1599; X64-MinGW-NEXT: .seh_stackalloc 40040 1600; X64-MinGW-NEXT: .seh_endprologue 1601; X64-MinGW-NEXT: movl %ecx, %edx 1602; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 1603; X64-MinGW-NEXT: callq dummy_use 1604; X64-MinGW-NEXT: nop 1605; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68 1606; X64-MinGW-NEXT: retq 1607; X64-MinGW-NEXT: .LBB5_1: 1608; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68 1609; X64-MinGW-NEXT: movl $32, %r11d 1610; X64-MinGW-NEXT: callq __morestack 1611; X64-MinGW-NEXT: retq 1612; X64-MinGW-NEXT: jmp .LBB5_2 1613; X64-MinGW-NEXT: .seh_endproc 1614 %mem = alloca i32, i32 10000 1615 call void @dummy_use (ptr %mem, i32 %a) 1616 ret void 1617} 1618 1619define void @test_nostack() #0 { 1620; X86-Linux-LABEL: test_nostack: 1621; X86-Linux: # %bb.0: 1622; X86-Linux-NEXT: retl 1623; 1624; X64-Linux-LABEL: test_nostack: 1625; X64-Linux: # %bb.0: 1626; X64-Linux-NEXT: retq 1627; 1628; X64-Linux-Large-LABEL: test_nostack: 1629; X64-Linux-Large: # %bb.0: 1630; X64-Linux-Large-NEXT: retq 1631; 1632; X32ABI-LABEL: test_nostack: 1633; X32ABI: # %bb.0: 1634; X32ABI-NEXT: retq 1635; 1636; X86-Darwin-LABEL: test_nostack: 1637; X86-Darwin: ## %bb.0: 1638; X86-Darwin-NEXT: retl 1639; 1640; X64-Darwin-LABEL: test_nostack: 1641; X64-Darwin: ## %bb.0: 1642; X64-Darwin-NEXT: retq 1643; 1644; X86-MinGW-LABEL: test_nostack: 1645; X86-MinGW: # %bb.0: 1646; X86-MinGW-NEXT: retl 1647; 1648; X64-FreeBSD-LABEL: test_nostack: 1649; X64-FreeBSD: # %bb.0: 1650; X64-FreeBSD-NEXT: retq 1651; 1652; X86-DFlyBSD-LABEL: test_nostack: 1653; X86-DFlyBSD: # %bb.0: 1654; X86-DFlyBSD-NEXT: retl 1655; 1656; X64-DFlyBSD-LABEL: test_nostack: 1657; X64-DFlyBSD: # %bb.0: 1658; X64-DFlyBSD-NEXT: retq 1659; 1660; X64-MinGW-LABEL: test_nostack: 1661; X64-MinGW: # %bb.0: 1662; X64-MinGW-NEXT: retq 1663 ret void 1664} 1665 1666define void @test_nosplitstck() { 1667; X86-Linux-LABEL: test_nosplitstck: 1668; X86-Linux: # %bb.0: 1669; X86-Linux-NEXT: retl 1670; 1671; X64-Linux-LABEL: test_nosplitstck: 1672; X64-Linux: # %bb.0: 1673; X64-Linux-NEXT: retq 1674; 1675; X64-Linux-Large-LABEL: test_nosplitstck: 1676; X64-Linux-Large: # %bb.0: 1677; X64-Linux-Large-NEXT: retq 1678; 1679; X32ABI-LABEL: test_nosplitstck: 1680; X32ABI: # %bb.0: 1681; X32ABI-NEXT: retq 1682; 1683; X86-Darwin-LABEL: test_nosplitstck: 1684; X86-Darwin: ## %bb.0: 1685; X86-Darwin-NEXT: retl 1686; 1687; X64-Darwin-LABEL: test_nosplitstck: 1688; X64-Darwin: ## %bb.0: 1689; X64-Darwin-NEXT: retq 1690; 1691; X86-MinGW-LABEL: test_nosplitstck: 1692; X86-MinGW: # %bb.0: 1693; X86-MinGW-NEXT: retl 1694; 1695; X64-FreeBSD-LABEL: test_nosplitstck: 1696; X64-FreeBSD: # %bb.0: 1697; X64-FreeBSD-NEXT: retq 1698; 1699; X86-DFlyBSD-LABEL: test_nosplitstck: 1700; X86-DFlyBSD: # %bb.0: 1701; X86-DFlyBSD-NEXT: retl 1702; 1703; X64-DFlyBSD-LABEL: test_nosplitstck: 1704; X64-DFlyBSD: # %bb.0: 1705; X64-DFlyBSD-NEXT: retq 1706; 1707; X64-MinGW-LABEL: test_nosplitstck: 1708; X64-MinGW: # %bb.0: 1709; X64-MinGW-NEXT: retq 1710 ret void 1711} 1712 1713; Test to make sure that a morestack call is generated if there is a 1714; sibling call, even if the function in question has no stack frame 1715; (PR37807). 1716 1717declare i32 @callee(i32) 1718 1719define i32 @test_sibling_call_empty_frame(i32 %x) #0 { 1720; X86-Linux-LABEL: test_sibling_call_empty_frame: 1721; X86-Linux: # %bb.0: 1722; X86-Linux-NEXT: cmpl %gs:48, %esp 1723; X86-Linux-NEXT: ja callee@PLT # TAILCALL 1724; X86-Linux-NEXT: # %bb.1: 1725; X86-Linux-NEXT: pushl $4 1726; X86-Linux-NEXT: pushl $0 1727; X86-Linux-NEXT: calll __morestack 1728; X86-Linux-NEXT: retl 1729; X86-Linux-NEXT: jmp callee@PLT # TAILCALL 1730; 1731; X64-Linux-LABEL: test_sibling_call_empty_frame: 1732; X64-Linux: # %bb.0: 1733; X64-Linux-NEXT: cmpq %fs:112, %rsp 1734; X64-Linux-NEXT: ja callee@PLT # TAILCALL 1735; X64-Linux-NEXT: # %bb.1: 1736; X64-Linux-NEXT: movl $0, %r10d 1737; X64-Linux-NEXT: movl $0, %r11d 1738; X64-Linux-NEXT: callq __morestack 1739; X64-Linux-NEXT: retq 1740; X64-Linux-NEXT: jmp callee@PLT # TAILCALL 1741; 1742; X64-Linux-Large-LABEL: test_sibling_call_empty_frame: 1743; X64-Linux-Large: # %bb.0: 1744; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp 1745; X64-Linux-Large-NEXT: jbe .LBB8_1 1746; X64-Linux-Large-NEXT: # %bb.2: 1747; X64-Linux-Large-NEXT: movabsq $callee, %rax 1748; X64-Linux-Large-NEXT: jmpq *%rax # TAILCALL 1749; X64-Linux-Large-NEXT: .LBB8_1: 1750; X64-Linux-Large-NEXT: movl $0, %r10d 1751; X64-Linux-Large-NEXT: movl $0, %r11d 1752; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 1753; X64-Linux-Large-NEXT: retq 1754; X64-Linux-Large-NEXT: movabsq $callee, %rax 1755; X64-Linux-Large-NEXT: jmpq *%rax # TAILCALL 1756; 1757; X32ABI-LABEL: test_sibling_call_empty_frame: 1758; X32ABI: # %bb.0: 1759; X32ABI-NEXT: cmpl %fs:64, %esp 1760; X32ABI-NEXT: ja callee@PLT # TAILCALL 1761; X32ABI-NEXT: # %bb.1: 1762; X32ABI-NEXT: movl $0, %r10d 1763; X32ABI-NEXT: movl $0, %r11d 1764; X32ABI-NEXT: callq __morestack 1765; X32ABI-NEXT: retq 1766; X32ABI-NEXT: jmp callee@PLT # TAILCALL 1767; 1768; X86-Darwin-LABEL: test_sibling_call_empty_frame: 1769; X86-Darwin: ## %bb.0: 1770; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 1771; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp 1772; X86-Darwin-NEXT: ja _callee ## TAILCALL 1773; X86-Darwin-NEXT: ## %bb.1: 1774; X86-Darwin-NEXT: pushl $4 1775; X86-Darwin-NEXT: pushl $0 1776; X86-Darwin-NEXT: calll ___morestack 1777; X86-Darwin-NEXT: retl 1778; X86-Darwin-NEXT: jmp _callee ## TAILCALL 1779; 1780; X64-Darwin-LABEL: test_sibling_call_empty_frame: 1781; X64-Darwin: ## %bb.0: 1782; X64-Darwin-NEXT: cmpq %gs:816, %rsp 1783; X64-Darwin-NEXT: ja _callee ## TAILCALL 1784; X64-Darwin-NEXT: ## %bb.1: 1785; X64-Darwin-NEXT: movl $0, %r10d 1786; X64-Darwin-NEXT: movl $0, %r11d 1787; X64-Darwin-NEXT: callq ___morestack 1788; X64-Darwin-NEXT: retq 1789; X64-Darwin-NEXT: jmp _callee ## TAILCALL 1790; 1791; X86-MinGW-LABEL: test_sibling_call_empty_frame: 1792; X86-MinGW: # %bb.0: 1793; X86-MinGW-NEXT: cmpl %fs:20, %esp 1794; X86-MinGW-NEXT: ja _callee # TAILCALL 1795; X86-MinGW-NEXT: # %bb.1: 1796; X86-MinGW-NEXT: pushl $4 1797; X86-MinGW-NEXT: pushl $0 1798; X86-MinGW-NEXT: calll ___morestack 1799; X86-MinGW-NEXT: retl 1800; X86-MinGW-NEXT: jmp _callee # TAILCALL 1801; 1802; X64-FreeBSD-LABEL: test_sibling_call_empty_frame: 1803; X64-FreeBSD: # %bb.0: 1804; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp 1805; X64-FreeBSD-NEXT: ja callee@PLT # TAILCALL 1806; X64-FreeBSD-NEXT: # %bb.1: 1807; X64-FreeBSD-NEXT: movl $0, %r10d 1808; X64-FreeBSD-NEXT: movl $0, %r11d 1809; X64-FreeBSD-NEXT: callq __morestack 1810; X64-FreeBSD-NEXT: retq 1811; X64-FreeBSD-NEXT: jmp callee@PLT # TAILCALL 1812; 1813; X86-DFlyBSD-LABEL: test_sibling_call_empty_frame: 1814; X86-DFlyBSD: # %bb.0: 1815; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp 1816; X86-DFlyBSD-NEXT: ja callee@PLT # TAILCALL 1817; X86-DFlyBSD-NEXT: # %bb.1: 1818; X86-DFlyBSD-NEXT: pushl $4 1819; X86-DFlyBSD-NEXT: pushl $0 1820; X86-DFlyBSD-NEXT: calll __morestack 1821; X86-DFlyBSD-NEXT: retl 1822; X86-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL 1823; 1824; X64-DFlyBSD-LABEL: test_sibling_call_empty_frame: 1825; X64-DFlyBSD: # %bb.0: 1826; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp 1827; X64-DFlyBSD-NEXT: ja callee@PLT # TAILCALL 1828; X64-DFlyBSD-NEXT: # %bb.1: 1829; X64-DFlyBSD-NEXT: movl $0, %r10d 1830; X64-DFlyBSD-NEXT: movl $0, %r11d 1831; X64-DFlyBSD-NEXT: callq __morestack 1832; X64-DFlyBSD-NEXT: retq 1833; X64-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL 1834; 1835; X64-MinGW-LABEL: test_sibling_call_empty_frame: 1836; X64-MinGW: # %bb.0: 1837; X64-MinGW-NEXT: cmpq %gs:40, %rsp 1838; X64-MinGW-NEXT: ja callee # TAILCALL 1839; X64-MinGW-NEXT: # %bb.1: 1840; X64-MinGW-NEXT: movl $0, %r10d 1841; X64-MinGW-NEXT: movl $32, %r11d 1842; X64-MinGW-NEXT: callq __morestack 1843; X64-MinGW-NEXT: retq 1844; X64-MinGW-NEXT: jmp callee # TAILCALL 1845 %call = tail call i32 @callee(i32 %x) #0 1846 ret i32 %call 1847} 1848 1849; Test that unused nested argument doesn't need saving/restoring. 1850 1851define i32 @test_nested_unused(ptr nest %unused) #0 { 1852; X86-Linux-LABEL: test_nested_unused: 1853; X86-Linux: # %bb.0: 1854; X86-Linux-NEXT: cmpl %gs:48, %esp 1855; X86-Linux-NEXT: jbe .LBB9_1 1856; X86-Linux-NEXT: .LBB9_2: 1857; X86-Linux-NEXT: subl $52, %esp 1858; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52 1859; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax 1860; X86-Linux-NEXT: pushl $10 1861; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 1862; X86-Linux-NEXT: pushl %eax 1863; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4 1864; X86-Linux-NEXT: calll dummy_use@PLT 1865; X86-Linux-NEXT: addl $16, %esp 1866; X86-Linux-NEXT: .cfi_adjust_cfa_offset -16 1867; X86-Linux-NEXT: movl $123, %eax 1868; X86-Linux-NEXT: addl $44, %esp 1869; X86-Linux-NEXT: .cfi_def_cfa_offset 4 1870; X86-Linux-NEXT: retl 1871; X86-Linux-NEXT: .LBB9_1: 1872; X86-Linux-NEXT: pushl $0 1873; X86-Linux-NEXT: pushl $44 1874; X86-Linux-NEXT: calll __morestack 1875; X86-Linux-NEXT: retl 1876; X86-Linux-NEXT: jmp .LBB9_2 1877; 1878; X64-Linux-LABEL: test_nested_unused: 1879; X64-Linux: # %bb.0: 1880; X64-Linux-NEXT: cmpq %fs:112, %rsp 1881; X64-Linux-NEXT: jbe .LBB9_1 1882; X64-Linux-NEXT: .LBB9_2: 1883; X64-Linux-NEXT: subq $40, %rsp 1884; X64-Linux-NEXT: .cfi_def_cfa_offset 48 1885; X64-Linux-NEXT: movq %rsp, %rdi 1886; X64-Linux-NEXT: movl $10, %esi 1887; X64-Linux-NEXT: callq dummy_use@PLT 1888; X64-Linux-NEXT: movl $123, %eax 1889; X64-Linux-NEXT: addq $40, %rsp 1890; X64-Linux-NEXT: .cfi_def_cfa_offset 8 1891; X64-Linux-NEXT: retq 1892; X64-Linux-NEXT: .LBB9_1: 1893; X64-Linux-NEXT: movl $40, %r10d 1894; X64-Linux-NEXT: movl $0, %r11d 1895; X64-Linux-NEXT: callq __morestack 1896; X64-Linux-NEXT: retq 1897; X64-Linux-NEXT: jmp .LBB9_2 1898; 1899; X64-Linux-Large-LABEL: test_nested_unused: 1900; X64-Linux-Large: # %bb.0: 1901; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp 1902; X64-Linux-Large-NEXT: jbe .LBB9_1 1903; X64-Linux-Large-NEXT: .LBB9_2: 1904; X64-Linux-Large-NEXT: subq $40, %rsp 1905; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48 1906; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax 1907; X64-Linux-Large-NEXT: movq %rsp, %rdi 1908; X64-Linux-Large-NEXT: movl $10, %esi 1909; X64-Linux-Large-NEXT: callq *%rax 1910; X64-Linux-Large-NEXT: movl $123, %eax 1911; X64-Linux-Large-NEXT: addq $40, %rsp 1912; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8 1913; X64-Linux-Large-NEXT: retq 1914; X64-Linux-Large-NEXT: .LBB9_1: 1915; X64-Linux-Large-NEXT: movl $40, %r10d 1916; X64-Linux-Large-NEXT: movl $0, %r11d 1917; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 1918; X64-Linux-Large-NEXT: retq 1919; X64-Linux-Large-NEXT: jmp .LBB9_2 1920; 1921; X32ABI-LABEL: test_nested_unused: 1922; X32ABI: # %bb.0: 1923; X32ABI-NEXT: cmpl %fs:64, %esp 1924; X32ABI-NEXT: jbe .LBB9_1 1925; X32ABI-NEXT: .LBB9_2: 1926; X32ABI-NEXT: subl $40, %esp 1927; X32ABI-NEXT: .cfi_def_cfa_offset 48 1928; X32ABI-NEXT: movl %esp, %edi 1929; X32ABI-NEXT: movl $10, %esi 1930; X32ABI-NEXT: callq dummy_use@PLT 1931; X32ABI-NEXT: movl $123, %eax 1932; X32ABI-NEXT: addl $40, %esp 1933; X32ABI-NEXT: .cfi_def_cfa_offset 8 1934; X32ABI-NEXT: retq 1935; X32ABI-NEXT: .LBB9_1: 1936; X32ABI-NEXT: movl $40, %r10d 1937; X32ABI-NEXT: movl $0, %r11d 1938; X32ABI-NEXT: callq __morestack 1939; X32ABI-NEXT: retq 1940; X32ABI-NEXT: jmp .LBB9_2 1941; 1942; X86-Darwin-LABEL: test_nested_unused: 1943; X86-Darwin: ## %bb.0: 1944; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0 1945; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp 1946; X86-Darwin-NEXT: jbe LBB9_1 1947; X86-Darwin-NEXT: LBB9_2: 1948; X86-Darwin-NEXT: subl $60, %esp 1949; X86-Darwin-NEXT: .cfi_def_cfa_offset 64 1950; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax 1951; X86-Darwin-NEXT: movl %eax, (%esp) 1952; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp) 1953; X86-Darwin-NEXT: calll _dummy_use 1954; X86-Darwin-NEXT: movl $123, %eax 1955; X86-Darwin-NEXT: addl $60, %esp 1956; X86-Darwin-NEXT: retl 1957; X86-Darwin-NEXT: LBB9_1: 1958; X86-Darwin-NEXT: pushl $0 1959; X86-Darwin-NEXT: pushl $60 1960; X86-Darwin-NEXT: calll ___morestack 1961; X86-Darwin-NEXT: retl 1962; X86-Darwin-NEXT: jmp LBB9_2 1963; 1964; X64-Darwin-LABEL: test_nested_unused: 1965; X64-Darwin: ## %bb.0: 1966; X64-Darwin-NEXT: cmpq %gs:816, %rsp 1967; X64-Darwin-NEXT: jbe LBB9_1 1968; X64-Darwin-NEXT: LBB9_2: 1969; X64-Darwin-NEXT: subq $40, %rsp 1970; X64-Darwin-NEXT: .cfi_def_cfa_offset 48 1971; X64-Darwin-NEXT: movq %rsp, %rdi 1972; X64-Darwin-NEXT: movl $10, %esi 1973; X64-Darwin-NEXT: callq _dummy_use 1974; X64-Darwin-NEXT: movl $123, %eax 1975; X64-Darwin-NEXT: addq $40, %rsp 1976; X64-Darwin-NEXT: retq 1977; X64-Darwin-NEXT: LBB9_1: 1978; X64-Darwin-NEXT: movl $40, %r10d 1979; X64-Darwin-NEXT: movl $0, %r11d 1980; X64-Darwin-NEXT: callq ___morestack 1981; X64-Darwin-NEXT: retq 1982; X64-Darwin-NEXT: jmp LBB9_2 1983; 1984; X86-MinGW-LABEL: test_nested_unused: 1985; X86-MinGW: # %bb.0: 1986; X86-MinGW-NEXT: cmpl %fs:20, %esp 1987; X86-MinGW-NEXT: jbe LBB9_1 1988; X86-MinGW-NEXT: LBB9_2: 1989; X86-MinGW-NEXT: subl $40, %esp 1990; X86-MinGW-NEXT: .cfi_def_cfa_offset 44 1991; X86-MinGW-NEXT: movl %esp, %eax 1992; X86-MinGW-NEXT: pushl $10 1993; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1994; X86-MinGW-NEXT: pushl %eax 1995; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4 1996; X86-MinGW-NEXT: calll _dummy_use 1997; X86-MinGW-NEXT: addl $8, %esp 1998; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -8 1999; X86-MinGW-NEXT: movl $123, %eax 2000; X86-MinGW-NEXT: addl $40, %esp 2001; X86-MinGW-NEXT: retl 2002; X86-MinGW-NEXT: LBB9_1: 2003; X86-MinGW-NEXT: .cfi_def_cfa_offset 4 2004; X86-MinGW-NEXT: pushl $0 2005; X86-MinGW-NEXT: pushl $40 2006; X86-MinGW-NEXT: calll ___morestack 2007; X86-MinGW-NEXT: retl 2008; X86-MinGW-NEXT: jmp LBB9_2 2009; 2010; X64-FreeBSD-LABEL: test_nested_unused: 2011; X64-FreeBSD: # %bb.0: 2012; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp 2013; X64-FreeBSD-NEXT: jbe .LBB9_1 2014; X64-FreeBSD-NEXT: .LBB9_2: 2015; X64-FreeBSD-NEXT: subq $40, %rsp 2016; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48 2017; X64-FreeBSD-NEXT: movq %rsp, %rdi 2018; X64-FreeBSD-NEXT: movl $10, %esi 2019; X64-FreeBSD-NEXT: callq dummy_use@PLT 2020; X64-FreeBSD-NEXT: movl $123, %eax 2021; X64-FreeBSD-NEXT: addq $40, %rsp 2022; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8 2023; X64-FreeBSD-NEXT: retq 2024; X64-FreeBSD-NEXT: .LBB9_1: 2025; X64-FreeBSD-NEXT: movl $40, %r10d 2026; X64-FreeBSD-NEXT: movl $0, %r11d 2027; X64-FreeBSD-NEXT: callq __morestack 2028; X64-FreeBSD-NEXT: retq 2029; X64-FreeBSD-NEXT: jmp .LBB9_2 2030; 2031; X86-DFlyBSD-LABEL: test_nested_unused: 2032; X86-DFlyBSD: # %bb.0: 2033; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp 2034; X86-DFlyBSD-NEXT: jbe .LBB9_1 2035; X86-DFlyBSD-NEXT: .LBB9_2: 2036; X86-DFlyBSD-NEXT: subl $40, %esp 2037; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44 2038; X86-DFlyBSD-NEXT: movl %esp, %eax 2039; X86-DFlyBSD-NEXT: pushl $10 2040; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 2041; X86-DFlyBSD-NEXT: pushl %eax 2042; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4 2043; X86-DFlyBSD-NEXT: calll dummy_use@PLT 2044; X86-DFlyBSD-NEXT: addl $8, %esp 2045; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -8 2046; X86-DFlyBSD-NEXT: movl $123, %eax 2047; X86-DFlyBSD-NEXT: addl $40, %esp 2048; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 4 2049; X86-DFlyBSD-NEXT: retl 2050; X86-DFlyBSD-NEXT: .LBB9_1: 2051; X86-DFlyBSD-NEXT: pushl $0 2052; X86-DFlyBSD-NEXT: pushl $40 2053; X86-DFlyBSD-NEXT: calll __morestack 2054; X86-DFlyBSD-NEXT: retl 2055; X86-DFlyBSD-NEXT: jmp .LBB9_2 2056; 2057; X64-DFlyBSD-LABEL: test_nested_unused: 2058; X64-DFlyBSD: # %bb.0: 2059; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp 2060; X64-DFlyBSD-NEXT: jbe .LBB9_1 2061; X64-DFlyBSD-NEXT: .LBB9_2: 2062; X64-DFlyBSD-NEXT: subq $40, %rsp 2063; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48 2064; X64-DFlyBSD-NEXT: movq %rsp, %rdi 2065; X64-DFlyBSD-NEXT: movl $10, %esi 2066; X64-DFlyBSD-NEXT: callq dummy_use@PLT 2067; X64-DFlyBSD-NEXT: movl $123, %eax 2068; X64-DFlyBSD-NEXT: addq $40, %rsp 2069; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8 2070; X64-DFlyBSD-NEXT: retq 2071; X64-DFlyBSD-NEXT: .LBB9_1: 2072; X64-DFlyBSD-NEXT: movl $40, %r10d 2073; X64-DFlyBSD-NEXT: movl $0, %r11d 2074; X64-DFlyBSD-NEXT: callq __morestack 2075; X64-DFlyBSD-NEXT: retq 2076; X64-DFlyBSD-NEXT: jmp .LBB9_2 2077; 2078; X64-MinGW-LABEL: test_nested_unused: 2079; X64-MinGW: # %bb.0: 2080; X64-MinGW-NEXT: cmpq %gs:40, %rsp 2081; X64-MinGW-NEXT: jbe .LBB9_1 2082; X64-MinGW-NEXT: .LBB9_2: 2083; X64-MinGW-NEXT: subq $72, %rsp 2084; X64-MinGW-NEXT: .seh_stackalloc 72 2085; X64-MinGW-NEXT: .seh_endprologue 2086; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx 2087; X64-MinGW-NEXT: movl $10, %edx 2088; X64-MinGW-NEXT: callq dummy_use 2089; X64-MinGW-NEXT: movl $123, %eax 2090; X64-MinGW-NEXT: addq $72, %rsp 2091; X64-MinGW-NEXT: retq 2092; X64-MinGW-NEXT: .LBB9_1: 2093; X64-MinGW-NEXT: movl $72, %r10d 2094; X64-MinGW-NEXT: movl $32, %r11d 2095; X64-MinGW-NEXT: callq __morestack 2096; X64-MinGW-NEXT: retq 2097; X64-MinGW-NEXT: jmp .LBB9_2 2098; X64-MinGW-NEXT: .seh_endproc 2099 %mem = alloca i32, i32 10 2100 call void @dummy_use (ptr %mem, i32 10) 2101 ret i32 123 2102} 2103 2104attributes #0 = { "split-stack" } 2105 2106; X64-Linux-Large: .section ".note.GNU-split-stack","",@progbits 2107; X64-Linux-Large-NEXT: .section ".note.GNU-no-split-stack","",@progbits 2108; X64-Linux-Large-NEXT: .section ".note.GNU-stack","",@progbits 2109; X64-Linux-Large-NEXT: .rodata 2110; X64-Linux-Large-NEXT: __morestack_addr: 2111; X64-Linux-Large-NEXT: .quad __morestack 2112 2113; X86-Linux: .section ".note.GNU-split-stack","",@progbits 2114; X86-Linux: .section ".note.GNU-no-split-stack","",@progbits 2115 2116; X64-Linux: .section ".note.GNU-split-stack","",@progbits 2117; X64-Linux: .section ".note.GNU-no-split-stack","",@progbits 2118 2119; X64-FreeBSD: .section ".note.GNU-split-stack","",@progbits 2120; X64-FreeBSD: .section ".note.GNU-no-split-stack","",@progbits 2121 2122; X86-DFlyBSD: .section ".note.GNU-split-stack","",@progbits 2123; X86-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits 2124 2125; X64-DFlyBSD: .section ".note.GNU-split-stack","",@progbits 2126; X64-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits 2127