2141 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X86-Linux3; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux4; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -code-model=large -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux-Large5; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=X32ABI6; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X86-Darwin7; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X64-Darwin8; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X86-MinGW9; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -verify-machineinstrs | FileCheck %s -check-prefix=X64-FreeBSD10; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X86-DFlyBSD11; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X64-DFlyBSD12; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X64-MinGW13 14; We used to crash with filetype=obj15; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -filetype=obj -o /dev/null16; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj -o /dev/null17; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj -o /dev/null18; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -filetype=obj -o /dev/null19; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -filetype=obj -o /dev/null20; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -filetype=obj -o /dev/null21; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -filetype=obj -o /dev/null22; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -filetype=obj -o /dev/null23; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -filetype=obj -o /dev/null24; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -filetype=obj -o /dev/null25 26; RUN: not --crash llc < %s -mcpu=generic -mtriple=x86_64-solaris 2> %t.log27; RUN: FileCheck %s -input-file=%t.log -check-prefix=X64-Solaris28; RUN: not --crash llc < %s -mcpu=generic -mtriple=i686-freebsd 2> %t.log29; RUN: FileCheck %s -input-file=%t.log -check-prefix=X86-FreeBSD30 31; X64-Solaris: Segmented stacks not supported on this platform32; X86-FreeBSD: Segmented stacks not supported on FreeBSD i38633 34; Just to prevent the alloca from being optimized away35declare 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, %esp41; X86-Linux-NEXT: jbe .LBB0_142; X86-Linux-NEXT: .LBB0_2:43; X86-Linux-NEXT: subl $52, %esp44; X86-Linux-NEXT: .cfi_adjust_cfa_offset 5245; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax46; X86-Linux-NEXT: pushl $1047; X86-Linux-NEXT: .cfi_adjust_cfa_offset 448; X86-Linux-NEXT: pushl %eax49; X86-Linux-NEXT: .cfi_adjust_cfa_offset 450; X86-Linux-NEXT: calll dummy_use@PLT51; X86-Linux-NEXT: addl $60, %esp52; X86-Linux-NEXT: .cfi_adjust_cfa_offset -6053; X86-Linux-NEXT: retl54; X86-Linux-NEXT: .LBB0_1:55; X86-Linux-NEXT: pushl $056; X86-Linux-NEXT: pushl $4457; X86-Linux-NEXT: calll __morestack58; X86-Linux-NEXT: retl59; X86-Linux-NEXT: jmp .LBB0_260;61; X64-Linux-LABEL: test_basic:62; X64-Linux: # %bb.0:63; X64-Linux-NEXT: cmpq %fs:112, %rsp64; X64-Linux-NEXT: jbe .LBB0_165; X64-Linux-NEXT: .LBB0_2:66; X64-Linux-NEXT: subq $40, %rsp67; X64-Linux-NEXT: .cfi_def_cfa_offset 4868; X64-Linux-NEXT: movq %rsp, %rdi69; X64-Linux-NEXT: movl $10, %esi70; X64-Linux-NEXT: callq dummy_use@PLT71; X64-Linux-NEXT: addq $40, %rsp72; X64-Linux-NEXT: .cfi_def_cfa_offset 873; X64-Linux-NEXT: retq74; X64-Linux-NEXT: .LBB0_1:75; X64-Linux-NEXT: movl $40, %r10d76; X64-Linux-NEXT: movl $0, %r11d77; X64-Linux-NEXT: callq __morestack78; X64-Linux-NEXT: retq79; X64-Linux-NEXT: jmp .LBB0_280;81; X64-Linux-Large-LABEL: test_basic:82; X64-Linux-Large: # %bb.0:83; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp84; X64-Linux-Large-NEXT: jbe .LBB0_185; X64-Linux-Large-NEXT: .LBB0_2:86; X64-Linux-Large-NEXT: subq $40, %rsp87; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 4888; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax89; X64-Linux-Large-NEXT: movq %rsp, %rdi90; X64-Linux-Large-NEXT: movl $10, %esi91; X64-Linux-Large-NEXT: callq *%rax92; X64-Linux-Large-NEXT: addq $40, %rsp93; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 894; X64-Linux-Large-NEXT: retq95; X64-Linux-Large-NEXT: .LBB0_1:96; X64-Linux-Large-NEXT: movl $40, %r10d97; X64-Linux-Large-NEXT: movl $0, %r11d98; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)99; X64-Linux-Large-NEXT: retq100; X64-Linux-Large-NEXT: jmp .LBB0_2101;102; X32ABI-LABEL: test_basic:103; X32ABI: # %bb.0:104; X32ABI-NEXT: cmpl %fs:64, %esp105; X32ABI-NEXT: jbe .LBB0_1106; X32ABI-NEXT: .LBB0_2:107; X32ABI-NEXT: subl $40, %esp108; X32ABI-NEXT: .cfi_def_cfa_offset 48109; X32ABI-NEXT: movl %esp, %edi110; X32ABI-NEXT: movl $10, %esi111; X32ABI-NEXT: callq dummy_use@PLT112; X32ABI-NEXT: addl $40, %esp113; X32ABI-NEXT: .cfi_def_cfa_offset 8114; X32ABI-NEXT: retq115; X32ABI-NEXT: .LBB0_1:116; X32ABI-NEXT: movl $40, %r10d117; X32ABI-NEXT: movl $0, %r11d118; X32ABI-NEXT: callq __morestack119; X32ABI-NEXT: retq120; X32ABI-NEXT: jmp .LBB0_2121;122; X86-Darwin-LABEL: test_basic:123; X86-Darwin: ## %bb.0:124; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B0125; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp126; X86-Darwin-NEXT: jbe LBB0_1127; X86-Darwin-NEXT: LBB0_2:128; X86-Darwin-NEXT: subl $60, %esp129; X86-Darwin-NEXT: .cfi_def_cfa_offset 64130; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax131; X86-Darwin-NEXT: movl %eax, (%esp)132; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp)133; X86-Darwin-NEXT: calll _dummy_use134; X86-Darwin-NEXT: addl $60, %esp135; X86-Darwin-NEXT: retl136; X86-Darwin-NEXT: LBB0_1:137; X86-Darwin-NEXT: pushl $0138; X86-Darwin-NEXT: pushl $60139; X86-Darwin-NEXT: calll ___morestack140; X86-Darwin-NEXT: retl141; X86-Darwin-NEXT: jmp LBB0_2142;143; X64-Darwin-LABEL: test_basic:144; X64-Darwin: ## %bb.0:145; X64-Darwin-NEXT: cmpq %gs:816, %rsp146; X64-Darwin-NEXT: jbe LBB0_1147; X64-Darwin-NEXT: LBB0_2:148; X64-Darwin-NEXT: subq $40, %rsp149; X64-Darwin-NEXT: .cfi_def_cfa_offset 48150; X64-Darwin-NEXT: movq %rsp, %rdi151; X64-Darwin-NEXT: movl $10, %esi152; X64-Darwin-NEXT: callq _dummy_use153; X64-Darwin-NEXT: addq $40, %rsp154; X64-Darwin-NEXT: retq155; X64-Darwin-NEXT: LBB0_1:156; X64-Darwin-NEXT: movl $40, %r10d157; X64-Darwin-NEXT: movl $0, %r11d158; X64-Darwin-NEXT: callq ___morestack159; X64-Darwin-NEXT: retq160; X64-Darwin-NEXT: jmp LBB0_2161;162; X86-MinGW-LABEL: test_basic:163; X86-MinGW: # %bb.0:164; X86-MinGW-NEXT: cmpl %fs:20, %esp165; X86-MinGW-NEXT: jbe LBB0_1166; X86-MinGW-NEXT: LBB0_2:167; X86-MinGW-NEXT: subl $40, %esp168; X86-MinGW-NEXT: .cfi_def_cfa_offset 44169; X86-MinGW-NEXT: movl %esp, %eax170; X86-MinGW-NEXT: pushl $10171; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4172; X86-MinGW-NEXT: pushl %eax173; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4174; X86-MinGW-NEXT: calll _dummy_use175; X86-MinGW-NEXT: addl $48, %esp176; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -48177; X86-MinGW-NEXT: retl178; X86-MinGW-NEXT: LBB0_1:179; X86-MinGW-NEXT: pushl $0180; X86-MinGW-NEXT: pushl $40181; X86-MinGW-NEXT: calll ___morestack182; X86-MinGW-NEXT: retl183; X86-MinGW-NEXT: jmp LBB0_2184;185; X64-FreeBSD-LABEL: test_basic:186; X64-FreeBSD: # %bb.0:187; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp188; X64-FreeBSD-NEXT: jbe .LBB0_1189; X64-FreeBSD-NEXT: .LBB0_2:190; X64-FreeBSD-NEXT: subq $40, %rsp191; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 48192; X64-FreeBSD-NEXT: movq %rsp, %rdi193; X64-FreeBSD-NEXT: movl $10, %esi194; X64-FreeBSD-NEXT: callq dummy_use@PLT195; X64-FreeBSD-NEXT: addq $40, %rsp196; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8197; X64-FreeBSD-NEXT: retq198; X64-FreeBSD-NEXT: .LBB0_1:199; X64-FreeBSD-NEXT: movl $40, %r10d200; X64-FreeBSD-NEXT: movl $0, %r11d201; X64-FreeBSD-NEXT: callq __morestack202; X64-FreeBSD-NEXT: retq203; X64-FreeBSD-NEXT: jmp .LBB0_2204;205; X86-DFlyBSD-LABEL: test_basic:206; X86-DFlyBSD: # %bb.0:207; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp208; X86-DFlyBSD-NEXT: jbe .LBB0_1209; X86-DFlyBSD-NEXT: .LBB0_2:210; X86-DFlyBSD-NEXT: subl $40, %esp211; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 44212; X86-DFlyBSD-NEXT: movl %esp, %eax213; X86-DFlyBSD-NEXT: pushl $10214; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4215; X86-DFlyBSD-NEXT: pushl %eax216; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4217; X86-DFlyBSD-NEXT: calll dummy_use@PLT218; X86-DFlyBSD-NEXT: addl $48, %esp219; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -48220; X86-DFlyBSD-NEXT: retl221; X86-DFlyBSD-NEXT: .LBB0_1:222; X86-DFlyBSD-NEXT: pushl $0223; X86-DFlyBSD-NEXT: pushl $40224; X86-DFlyBSD-NEXT: calll __morestack225; X86-DFlyBSD-NEXT: retl226; X86-DFlyBSD-NEXT: jmp .LBB0_2227;228; X64-DFlyBSD-LABEL: test_basic:229; X64-DFlyBSD: # %bb.0:230; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp231; X64-DFlyBSD-NEXT: jbe .LBB0_1232; X64-DFlyBSD-NEXT: .LBB0_2:233; X64-DFlyBSD-NEXT: subq $40, %rsp234; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 48235; X64-DFlyBSD-NEXT: movq %rsp, %rdi236; X64-DFlyBSD-NEXT: movl $10, %esi237; X64-DFlyBSD-NEXT: callq dummy_use@PLT238; X64-DFlyBSD-NEXT: addq $40, %rsp239; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8240; X64-DFlyBSD-NEXT: retq241; X64-DFlyBSD-NEXT: .LBB0_1:242; X64-DFlyBSD-NEXT: movl $40, %r10d243; X64-DFlyBSD-NEXT: movl $0, %r11d244; X64-DFlyBSD-NEXT: callq __morestack245; X64-DFlyBSD-NEXT: retq246; X64-DFlyBSD-NEXT: jmp .LBB0_2247;248; X64-MinGW-LABEL: test_basic:249; X64-MinGW: # %bb.0:250; X64-MinGW-NEXT: cmpq %gs:40, %rsp251; X64-MinGW-NEXT: jbe .LBB0_1252; X64-MinGW-NEXT: .LBB0_2:253; X64-MinGW-NEXT: subq $72, %rsp254; X64-MinGW-NEXT: .seh_stackalloc 72255; X64-MinGW-NEXT: .seh_endprologue256; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx257; X64-MinGW-NEXT: movl $10, %edx258; X64-MinGW-NEXT: callq dummy_use259; X64-MinGW-NEXT: nop260; X64-MinGW-NEXT: .seh_startepilogue261; X64-MinGW-NEXT: addq $72, %rsp262; X64-MinGW-NEXT: .seh_endepilogue263; X64-MinGW-NEXT: retq264; X64-MinGW-NEXT: .LBB0_1:265; X64-MinGW-NEXT: movl $72, %r10d266; X64-MinGW-NEXT: movl $32, %r11d267; X64-MinGW-NEXT: callq __morestack268; X64-MinGW-NEXT: retq269; X64-MinGW-NEXT: jmp .LBB0_2270; X64-MinGW-NEXT: .seh_endproc271 %mem = alloca i32, i32 10272 call void @dummy_use (ptr %mem, i32 10)273 ret void274}275 276define i32 @test_nested(ptr nest %closure, i32 %other) #0 {277; X86-Linux-LABEL: test_nested:278; X86-Linux: # %bb.0:279; X86-Linux-NEXT: cmpl %gs:48, %esp280; X86-Linux-NEXT: jbe .LBB1_1281; X86-Linux-NEXT: .LBB1_2:282; X86-Linux-NEXT: pushl %esi283; X86-Linux-NEXT: .cfi_def_cfa_offset 8284; X86-Linux-NEXT: subl $40, %esp285; X86-Linux-NEXT: .cfi_def_cfa_offset 48286; X86-Linux-NEXT: .cfi_offset %esi, -8287; X86-Linux-NEXT: movl {{[0-9]+}}(%esp), %esi288; X86-Linux-NEXT: addl (%ecx), %esi289; X86-Linux-NEXT: subl $8, %esp290; X86-Linux-NEXT: .cfi_adjust_cfa_offset 8291; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax292; X86-Linux-NEXT: pushl $10293; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4294; X86-Linux-NEXT: pushl %eax295; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4296; X86-Linux-NEXT: calll dummy_use@PLT297; X86-Linux-NEXT: addl $16, %esp298; X86-Linux-NEXT: .cfi_adjust_cfa_offset -16299; X86-Linux-NEXT: movl %esi, %eax300; X86-Linux-NEXT: addl $40, %esp301; X86-Linux-NEXT: .cfi_def_cfa_offset 8302; X86-Linux-NEXT: popl %esi303; X86-Linux-NEXT: .cfi_def_cfa_offset 4304; X86-Linux-NEXT: retl305; X86-Linux-NEXT: .LBB1_1:306; X86-Linux-NEXT: .cfi_restore %esi307; X86-Linux-NEXT: pushl $4308; X86-Linux-NEXT: pushl $44309; X86-Linux-NEXT: calll __morestack310; X86-Linux-NEXT: retl311; X86-Linux-NEXT: jmp .LBB1_2312;313; X64-Linux-LABEL: test_nested:314; X64-Linux: # %bb.0:315; X64-Linux-NEXT: cmpq %fs:112, %rsp316; X64-Linux-NEXT: jbe .LBB1_1317; X64-Linux-NEXT: .LBB1_2:318; X64-Linux-NEXT: pushq %rbx319; X64-Linux-NEXT: .cfi_def_cfa_offset 16320; X64-Linux-NEXT: subq $48, %rsp321; X64-Linux-NEXT: .cfi_def_cfa_offset 64322; X64-Linux-NEXT: .cfi_offset %rbx, -16323; X64-Linux-NEXT: movl %edi, %ebx324; X64-Linux-NEXT: addl (%r10), %ebx325; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi326; X64-Linux-NEXT: movl $10, %esi327; X64-Linux-NEXT: callq dummy_use@PLT328; X64-Linux-NEXT: movl %ebx, %eax329; X64-Linux-NEXT: addq $48, %rsp330; X64-Linux-NEXT: .cfi_def_cfa_offset 16331; X64-Linux-NEXT: popq %rbx332; X64-Linux-NEXT: .cfi_def_cfa_offset 8333; X64-Linux-NEXT: retq334; X64-Linux-NEXT: .LBB1_1:335; X64-Linux-NEXT: .cfi_restore %rbx336; X64-Linux-NEXT: movq %r10, %rax337; X64-Linux-NEXT: movl $56, %r10d338; X64-Linux-NEXT: movl $0, %r11d339; X64-Linux-NEXT: callq __morestack340; X64-Linux-NEXT: retq341; X64-Linux-NEXT: movq %rax, %r10342; X64-Linux-NEXT: jmp .LBB1_2343;344; X64-Linux-Large-LABEL: test_nested:345; X64-Linux-Large: # %bb.0:346; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp347; X64-Linux-Large-NEXT: jbe .LBB1_1348; X64-Linux-Large-NEXT: .LBB1_2:349; X64-Linux-Large-NEXT: pushq %rbx350; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 16351; X64-Linux-Large-NEXT: subq $48, %rsp352; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 64353; X64-Linux-Large-NEXT: .cfi_offset %rbx, -16354; X64-Linux-Large-NEXT: movl %edi, %ebx355; X64-Linux-Large-NEXT: addl (%r10), %ebx356; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax357; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi358; X64-Linux-Large-NEXT: movl $10, %esi359; X64-Linux-Large-NEXT: callq *%rax360; X64-Linux-Large-NEXT: movl %ebx, %eax361; X64-Linux-Large-NEXT: addq $48, %rsp362; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 16363; X64-Linux-Large-NEXT: popq %rbx364; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8365; X64-Linux-Large-NEXT: retq366; X64-Linux-Large-NEXT: .LBB1_1:367; X64-Linux-Large-NEXT: .cfi_restore %rbx368; X64-Linux-Large-NEXT: movq %r10, %rax369; X64-Linux-Large-NEXT: movl $56, %r10d370; X64-Linux-Large-NEXT: movl $0, %r11d371; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)372; X64-Linux-Large-NEXT: retq373; X64-Linux-Large-NEXT: movq %rax, %r10374; X64-Linux-Large-NEXT: jmp .LBB1_2375;376; X32ABI-LABEL: test_nested:377; X32ABI: # %bb.0:378; X32ABI-NEXT: cmpl %fs:64, %esp379; X32ABI-NEXT: jbe .LBB1_1380; X32ABI-NEXT: .LBB1_2:381; X32ABI-NEXT: pushq %rbx382; X32ABI-NEXT: .cfi_def_cfa_offset 16383; X32ABI-NEXT: subl $48, %esp384; X32ABI-NEXT: .cfi_def_cfa_offset 64385; X32ABI-NEXT: .cfi_offset %rbx, -16386; X32ABI-NEXT: movl %edi, %ebx387; X32ABI-NEXT: addl (%r10d), %ebx388; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi389; X32ABI-NEXT: movl $10, %esi390; X32ABI-NEXT: callq dummy_use@PLT391; X32ABI-NEXT: movl %ebx, %eax392; X32ABI-NEXT: addl $48, %esp393; X32ABI-NEXT: .cfi_def_cfa_offset 16394; X32ABI-NEXT: popq %rbx395; X32ABI-NEXT: .cfi_def_cfa_offset 8396; X32ABI-NEXT: retq397; X32ABI-NEXT: .LBB1_1:398; X32ABI-NEXT: .cfi_restore %rbx399; X32ABI-NEXT: movl %r10d, %eax400; X32ABI-NEXT: movl $56, %r10d401; X32ABI-NEXT: movl $0, %r11d402; X32ABI-NEXT: callq __morestack403; X32ABI-NEXT: retq404; X32ABI-NEXT: movq %rax, %r10405; X32ABI-NEXT: jmp .LBB1_2406;407; X86-Darwin-LABEL: test_nested:408; X86-Darwin: ## %bb.0:409; X86-Darwin-NEXT: movl $432, %edx ## imm = 0x1B0410; X86-Darwin-NEXT: cmpl %gs:(%edx), %esp411; X86-Darwin-NEXT: jbe LBB1_1412; X86-Darwin-NEXT: LBB1_2:413; X86-Darwin-NEXT: pushl %esi414; X86-Darwin-NEXT: .cfi_def_cfa_offset 8415; X86-Darwin-NEXT: subl $56, %esp416; X86-Darwin-NEXT: .cfi_def_cfa_offset 64417; X86-Darwin-NEXT: .cfi_offset %esi, -8418; X86-Darwin-NEXT: movl {{[0-9]+}}(%esp), %esi419; X86-Darwin-NEXT: addl (%ecx), %esi420; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax421; X86-Darwin-NEXT: movl %eax, (%esp)422; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp)423; X86-Darwin-NEXT: calll _dummy_use424; X86-Darwin-NEXT: movl %esi, %eax425; X86-Darwin-NEXT: addl $56, %esp426; X86-Darwin-NEXT: popl %esi427; X86-Darwin-NEXT: retl428; X86-Darwin-NEXT: LBB1_1:429; X86-Darwin-NEXT: pushl $4430; X86-Darwin-NEXT: pushl $60431; X86-Darwin-NEXT: calll ___morestack432; X86-Darwin-NEXT: retl433; X86-Darwin-NEXT: jmp LBB1_2434;435; X64-Darwin-LABEL: test_nested:436; X64-Darwin: ## %bb.0:437; X64-Darwin-NEXT: cmpq %gs:816, %rsp438; X64-Darwin-NEXT: jbe LBB1_1439; X64-Darwin-NEXT: LBB1_2:440; X64-Darwin-NEXT: pushq %rbx441; X64-Darwin-NEXT: .cfi_def_cfa_offset 16442; X64-Darwin-NEXT: subq $48, %rsp443; X64-Darwin-NEXT: .cfi_def_cfa_offset 64444; X64-Darwin-NEXT: .cfi_offset %rbx, -16445; X64-Darwin-NEXT: movl %edi, %ebx446; X64-Darwin-NEXT: addl (%r10), %ebx447; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi448; X64-Darwin-NEXT: movl $10, %esi449; X64-Darwin-NEXT: callq _dummy_use450; X64-Darwin-NEXT: movl %ebx, %eax451; X64-Darwin-NEXT: addq $48, %rsp452; X64-Darwin-NEXT: popq %rbx453; X64-Darwin-NEXT: retq454; X64-Darwin-NEXT: LBB1_1:455; X64-Darwin-NEXT: movq %r10, %rax456; X64-Darwin-NEXT: movl $56, %r10d457; X64-Darwin-NEXT: movl $0, %r11d458; X64-Darwin-NEXT: callq ___morestack459; X64-Darwin-NEXT: retq460; X64-Darwin-NEXT: movq %rax, %r10461; X64-Darwin-NEXT: jmp LBB1_2462;463; X86-MinGW-LABEL: test_nested:464; X86-MinGW: # %bb.0:465; X86-MinGW-NEXT: cmpl %fs:20, %esp466; X86-MinGW-NEXT: jbe LBB1_1467; X86-MinGW-NEXT: LBB1_2:468; X86-MinGW-NEXT: pushl %esi469; X86-MinGW-NEXT: .cfi_def_cfa_offset 8470; X86-MinGW-NEXT: subl $40, %esp471; X86-MinGW-NEXT: .cfi_def_cfa_offset 48472; X86-MinGW-NEXT: .cfi_offset %esi, -8473; X86-MinGW-NEXT: movl {{[0-9]+}}(%esp), %esi474; X86-MinGW-NEXT: addl (%ecx), %esi475; X86-MinGW-NEXT: movl %esp, %eax476; X86-MinGW-NEXT: pushl $10477; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4478; X86-MinGW-NEXT: pushl %eax479; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4480; X86-MinGW-NEXT: calll _dummy_use481; X86-MinGW-NEXT: addl $8, %esp482; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -8483; X86-MinGW-NEXT: movl %esi, %eax484; X86-MinGW-NEXT: addl $40, %esp485; X86-MinGW-NEXT: popl %esi486; X86-MinGW-NEXT: retl487; X86-MinGW-NEXT: LBB1_1:488; X86-MinGW-NEXT: .cfi_def_cfa_offset 4489; X86-MinGW-NEXT: .cfi_restore %esi490; X86-MinGW-NEXT: pushl $4491; X86-MinGW-NEXT: pushl $44492; X86-MinGW-NEXT: calll ___morestack493; X86-MinGW-NEXT: retl494; X86-MinGW-NEXT: jmp LBB1_2495;496; X64-FreeBSD-LABEL: test_nested:497; X64-FreeBSD: # %bb.0:498; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp499; X64-FreeBSD-NEXT: jbe .LBB1_1500; X64-FreeBSD-NEXT: .LBB1_2:501; X64-FreeBSD-NEXT: pushq %rbx502; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 16503; X64-FreeBSD-NEXT: subq $48, %rsp504; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 64505; X64-FreeBSD-NEXT: .cfi_offset %rbx, -16506; X64-FreeBSD-NEXT: movl %edi, %ebx507; X64-FreeBSD-NEXT: addl (%r10), %ebx508; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi509; X64-FreeBSD-NEXT: movl $10, %esi510; X64-FreeBSD-NEXT: callq dummy_use@PLT511; X64-FreeBSD-NEXT: movl %ebx, %eax512; X64-FreeBSD-NEXT: addq $48, %rsp513; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 16514; X64-FreeBSD-NEXT: popq %rbx515; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8516; X64-FreeBSD-NEXT: retq517; X64-FreeBSD-NEXT: .LBB1_1:518; X64-FreeBSD-NEXT: .cfi_restore %rbx519; X64-FreeBSD-NEXT: movq %r10, %rax520; X64-FreeBSD-NEXT: movl $56, %r10d521; X64-FreeBSD-NEXT: movl $0, %r11d522; X64-FreeBSD-NEXT: callq __morestack523; X64-FreeBSD-NEXT: retq524; X64-FreeBSD-NEXT: movq %rax, %r10525; X64-FreeBSD-NEXT: jmp .LBB1_2526;527; X86-DFlyBSD-LABEL: test_nested:528; X86-DFlyBSD: # %bb.0:529; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp530; X86-DFlyBSD-NEXT: jbe .LBB1_1531; X86-DFlyBSD-NEXT: .LBB1_2:532; X86-DFlyBSD-NEXT: pushl %esi533; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 8534; X86-DFlyBSD-NEXT: subl $40, %esp535; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 48536; X86-DFlyBSD-NEXT: .cfi_offset %esi, -8537; X86-DFlyBSD-NEXT: movl {{[0-9]+}}(%esp), %esi538; X86-DFlyBSD-NEXT: addl (%ecx), %esi539; X86-DFlyBSD-NEXT: movl %esp, %eax540; X86-DFlyBSD-NEXT: pushl $10541; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4542; X86-DFlyBSD-NEXT: pushl %eax543; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4544; X86-DFlyBSD-NEXT: calll dummy_use@PLT545; X86-DFlyBSD-NEXT: addl $8, %esp546; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -8547; X86-DFlyBSD-NEXT: movl %esi, %eax548; X86-DFlyBSD-NEXT: addl $40, %esp549; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 8550; X86-DFlyBSD-NEXT: popl %esi551; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 4552; X86-DFlyBSD-NEXT: retl553; X86-DFlyBSD-NEXT: .LBB1_1:554; X86-DFlyBSD-NEXT: .cfi_restore %esi555; X86-DFlyBSD-NEXT: pushl $4556; X86-DFlyBSD-NEXT: pushl $44557; X86-DFlyBSD-NEXT: calll __morestack558; X86-DFlyBSD-NEXT: retl559; X86-DFlyBSD-NEXT: jmp .LBB1_2560;561; X64-DFlyBSD-LABEL: test_nested:562; X64-DFlyBSD: # %bb.0:563; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp564; X64-DFlyBSD-NEXT: jbe .LBB1_1565; X64-DFlyBSD-NEXT: .LBB1_2:566; X64-DFlyBSD-NEXT: pushq %rbx567; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 16568; X64-DFlyBSD-NEXT: subq $48, %rsp569; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 64570; X64-DFlyBSD-NEXT: .cfi_offset %rbx, -16571; X64-DFlyBSD-NEXT: movl %edi, %ebx572; X64-DFlyBSD-NEXT: addl (%r10), %ebx573; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi574; X64-DFlyBSD-NEXT: movl $10, %esi575; X64-DFlyBSD-NEXT: callq dummy_use@PLT576; X64-DFlyBSD-NEXT: movl %ebx, %eax577; X64-DFlyBSD-NEXT: addq $48, %rsp578; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 16579; X64-DFlyBSD-NEXT: popq %rbx580; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8581; X64-DFlyBSD-NEXT: retq582; X64-DFlyBSD-NEXT: .LBB1_1:583; X64-DFlyBSD-NEXT: .cfi_restore %rbx584; X64-DFlyBSD-NEXT: movq %r10, %rax585; X64-DFlyBSD-NEXT: movl $56, %r10d586; X64-DFlyBSD-NEXT: movl $0, %r11d587; X64-DFlyBSD-NEXT: callq __morestack588; X64-DFlyBSD-NEXT: retq589; X64-DFlyBSD-NEXT: movq %rax, %r10590; X64-DFlyBSD-NEXT: jmp .LBB1_2591;592; X64-MinGW-LABEL: test_nested:593; X64-MinGW: # %bb.0:594; X64-MinGW-NEXT: cmpq %gs:40, %rsp595; X64-MinGW-NEXT: jbe .LBB1_1596; X64-MinGW-NEXT: .LBB1_2:597; X64-MinGW-NEXT: pushq %rsi598; X64-MinGW-NEXT: .seh_pushreg %rsi599; X64-MinGW-NEXT: subq $80, %rsp600; X64-MinGW-NEXT: .seh_stackalloc 80601; X64-MinGW-NEXT: .seh_endprologue602; X64-MinGW-NEXT: movl %ecx, %esi603; X64-MinGW-NEXT: addl (%r10), %esi604; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx605; X64-MinGW-NEXT: movl $10, %edx606; X64-MinGW-NEXT: callq dummy_use607; X64-MinGW-NEXT: movl %esi, %eax608; X64-MinGW-NEXT: .seh_startepilogue609; X64-MinGW-NEXT: addq $80, %rsp610; X64-MinGW-NEXT: popq %rsi611; X64-MinGW-NEXT: .seh_endepilogue612; X64-MinGW-NEXT: retq613; X64-MinGW-NEXT: .LBB1_1:614; X64-MinGW-NEXT: movq %r10, %rax615; X64-MinGW-NEXT: movl $88, %r10d616; X64-MinGW-NEXT: movl $32, %r11d617; X64-MinGW-NEXT: callq __morestack618; X64-MinGW-NEXT: retq619; X64-MinGW-NEXT: movq %rax, %r10620; X64-MinGW-NEXT: jmp .LBB1_2621; X64-MinGW-NEXT: .seh_endproc622 %addend = load i32 , ptr %closure623 %result = add i32 %other, %addend624 %mem = alloca i32, i32 10625 call void @dummy_use (ptr %mem, i32 10)626 ret i32 %result627}628 629define void @test_large() #0 {630; X86-Linux-LABEL: test_large:631; X86-Linux: # %bb.0:632; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %ecx633; X86-Linux-NEXT: cmpl %gs:48, %ecx634; X86-Linux-NEXT: jbe .LBB2_1635; X86-Linux-NEXT: .LBB2_2:636; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C54637; X86-Linux-NEXT: .cfi_adjust_cfa_offset 40020638; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax639; X86-Linux-NEXT: pushl $3640; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4641; X86-Linux-NEXT: pushl %eax642; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4643; X86-Linux-NEXT: calll dummy_use@PLT644; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C645; X86-Linux-NEXT: .cfi_adjust_cfa_offset -40028646; X86-Linux-NEXT: retl647; X86-Linux-NEXT: .LBB2_1:648; X86-Linux-NEXT: pushl $0649; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C650; X86-Linux-NEXT: calll __morestack651; X86-Linux-NEXT: retl652; X86-Linux-NEXT: jmp .LBB2_2653;654; X64-Linux-LABEL: test_large:655; X64-Linux: # %bb.0:656; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r11657; X64-Linux-NEXT: cmpq %fs:112, %r11658; X64-Linux-NEXT: jbe .LBB2_1659; X64-Linux-NEXT: .LBB2_2:660; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C48661; X64-Linux-NEXT: .cfi_def_cfa_offset 40016662; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi663; X64-Linux-NEXT: movl $3, %esi664; X64-Linux-NEXT: callq dummy_use@PLT665; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C48666; X64-Linux-NEXT: .cfi_def_cfa_offset 8667; X64-Linux-NEXT: retq668; X64-Linux-NEXT: .LBB2_1:669; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C48670; X64-Linux-NEXT: movl $0, %r11d671; X64-Linux-NEXT: callq __morestack672; X64-Linux-NEXT: retq673; X64-Linux-NEXT: jmp .LBB2_2674;675; X64-Linux-Large-LABEL: test_large:676; X64-Linux-Large: # %bb.0:677; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r11678; X64-Linux-Large-NEXT: cmpq %fs:112, %r11679; X64-Linux-Large-NEXT: jbe .LBB2_1680; X64-Linux-Large-NEXT: .LBB2_2:681; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C48682; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 40016683; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax684; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi685; X64-Linux-Large-NEXT: movl $3, %esi686; X64-Linux-Large-NEXT: callq *%rax687; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C48688; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8689; X64-Linux-Large-NEXT: retq690; X64-Linux-Large-NEXT: .LBB2_1:691; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C48692; X64-Linux-Large-NEXT: movl $0, %r11d693; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)694; X64-Linux-Large-NEXT: retq695; X64-Linux-Large-NEXT: jmp .LBB2_2696;697; X32ABI-LABEL: test_large:698; X32ABI: # %bb.0:699; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d700; X32ABI-NEXT: cmpl %fs:64, %r11d701; X32ABI-NEXT: jbe .LBB2_1702; X32ABI-NEXT: .LBB2_2:703; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C48704; X32ABI-NEXT: .cfi_def_cfa_offset 40016705; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi706; X32ABI-NEXT: movl $3, %esi707; X32ABI-NEXT: callq dummy_use@PLT708; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C48709; X32ABI-NEXT: .cfi_def_cfa_offset 8710; X32ABI-NEXT: retq711; X32ABI-NEXT: .LBB2_1:712; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C48713; X32ABI-NEXT: movl $0, %r11d714; X32ABI-NEXT: callq __morestack715; X32ABI-NEXT: retq716; X32ABI-NEXT: jmp .LBB2_2717;718; X86-Darwin-LABEL: test_large:719; X86-Darwin: ## %bb.0:720; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %ecx721; X86-Darwin-NEXT: movl $432, %eax ## imm = 0x1B0722; X86-Darwin-NEXT: cmpl %gs:(%eax), %ecx723; X86-Darwin-NEXT: jbe LBB2_1724; X86-Darwin-NEXT: LBB2_2:725; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C726; X86-Darwin-NEXT: .cfi_def_cfa_offset 40016727; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax728; X86-Darwin-NEXT: movl %eax, (%esp)729; X86-Darwin-NEXT: movl $3, {{[0-9]+}}(%esp)730; X86-Darwin-NEXT: calll _dummy_use731; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C732; X86-Darwin-NEXT: retl733; X86-Darwin-NEXT: LBB2_1:734; X86-Darwin-NEXT: pushl $0735; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C736; X86-Darwin-NEXT: calll ___morestack737; X86-Darwin-NEXT: retl738; X86-Darwin-NEXT: jmp LBB2_2739;740; X64-Darwin-LABEL: test_large:741; X64-Darwin: ## %bb.0:742; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r11743; X64-Darwin-NEXT: cmpq %gs:816, %r11744; X64-Darwin-NEXT: jbe LBB2_1745; X64-Darwin-NEXT: LBB2_2:746; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C48747; X64-Darwin-NEXT: .cfi_def_cfa_offset 40016748; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi749; X64-Darwin-NEXT: movl $3, %esi750; X64-Darwin-NEXT: callq _dummy_use751; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C48752; X64-Darwin-NEXT: retq753; X64-Darwin-NEXT: LBB2_1:754; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C48755; X64-Darwin-NEXT: movl $0, %r11d756; X64-Darwin-NEXT: callq ___morestack757; X64-Darwin-NEXT: retq758; X64-Darwin-NEXT: jmp LBB2_2759;760; X86-MinGW-LABEL: test_large:761; X86-MinGW: # %bb.0:762; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %ecx763; X86-MinGW-NEXT: cmpl %fs:20, %ecx764; X86-MinGW-NEXT: jbe LBB2_1765; X86-MinGW-NEXT: LBB2_2:766; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C40767; X86-MinGW-NEXT: calll __alloca768; X86-MinGW-NEXT: .cfi_def_cfa_offset 40004769; X86-MinGW-NEXT: movl %esp, %eax770; X86-MinGW-NEXT: pushl $3771; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4772; X86-MinGW-NEXT: pushl %eax773; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 4774; X86-MinGW-NEXT: calll _dummy_use775; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C48776; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -40008777; X86-MinGW-NEXT: retl778; X86-MinGW-NEXT: LBB2_1:779; X86-MinGW-NEXT: pushl $0780; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C40781; X86-MinGW-NEXT: calll ___morestack782; X86-MinGW-NEXT: retl783; X86-MinGW-NEXT: jmp LBB2_2784;785; X64-FreeBSD-LABEL: test_large:786; X64-FreeBSD: # %bb.0:787; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11788; X64-FreeBSD-NEXT: cmpq %fs:24, %r11789; X64-FreeBSD-NEXT: jbe .LBB2_1790; X64-FreeBSD-NEXT: .LBB2_2:791; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C48792; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 40016793; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi794; X64-FreeBSD-NEXT: movl $3, %esi795; X64-FreeBSD-NEXT: callq dummy_use@PLT796; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C48797; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 8798; X64-FreeBSD-NEXT: retq799; X64-FreeBSD-NEXT: .LBB2_1:800; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C48801; X64-FreeBSD-NEXT: movl $0, %r11d802; X64-FreeBSD-NEXT: callq __morestack803; X64-FreeBSD-NEXT: retq804; X64-FreeBSD-NEXT: jmp .LBB2_2805;806; X86-DFlyBSD-LABEL: test_large:807; X86-DFlyBSD: # %bb.0:808; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %ecx809; X86-DFlyBSD-NEXT: cmpl %fs:16, %ecx810; X86-DFlyBSD-NEXT: jbe .LBB2_1811; X86-DFlyBSD-NEXT: .LBB2_2:812; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C40813; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 40004814; X86-DFlyBSD-NEXT: movl %esp, %eax815; X86-DFlyBSD-NEXT: pushl $3816; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4817; X86-DFlyBSD-NEXT: pushl %eax818; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 4819; X86-DFlyBSD-NEXT: calll dummy_use@PLT820; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C48821; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -40008822; X86-DFlyBSD-NEXT: retl823; X86-DFlyBSD-NEXT: .LBB2_1:824; X86-DFlyBSD-NEXT: pushl $0825; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C40826; X86-DFlyBSD-NEXT: calll __morestack827; X86-DFlyBSD-NEXT: retl828; X86-DFlyBSD-NEXT: jmp .LBB2_2829;830; X64-DFlyBSD-LABEL: test_large:831; X64-DFlyBSD: # %bb.0:832; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r11833; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11834; X64-DFlyBSD-NEXT: jbe .LBB2_1835; X64-DFlyBSD-NEXT: .LBB2_2:836; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C48837; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 40016838; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi839; X64-DFlyBSD-NEXT: movl $3, %esi840; X64-DFlyBSD-NEXT: callq dummy_use@PLT841; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C48842; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 8843; X64-DFlyBSD-NEXT: retq844; X64-DFlyBSD-NEXT: .LBB2_1:845; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C48846; X64-DFlyBSD-NEXT: movl $0, %r11d847; X64-DFlyBSD-NEXT: callq __morestack848; X64-DFlyBSD-NEXT: retq849; X64-DFlyBSD-NEXT: jmp .LBB2_2850;851; X64-MinGW-LABEL: test_large:852; X64-MinGW: # %bb.0:853; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r11854; X64-MinGW-NEXT: cmpq %gs:40, %r11855; X64-MinGW-NEXT: jbe .LBB2_1856; X64-MinGW-NEXT: .LBB2_2:857; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C68858; X64-MinGW-NEXT: callq ___chkstk_ms859; X64-MinGW-NEXT: subq %rax, %rsp860; X64-MinGW-NEXT: .seh_stackalloc 40040861; X64-MinGW-NEXT: .seh_endprologue862; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx863; X64-MinGW-NEXT: movl $3, %edx864; X64-MinGW-NEXT: callq dummy_use865; X64-MinGW-NEXT: nop866; X64-MinGW-NEXT: .seh_startepilogue867; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C68868; X64-MinGW-NEXT: .seh_endepilogue869; X64-MinGW-NEXT: retq870; X64-MinGW-NEXT: .LBB2_1:871; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C68872; X64-MinGW-NEXT: movl $32, %r11d873; X64-MinGW-NEXT: callq __morestack874; X64-MinGW-NEXT: retq875; X64-MinGW-NEXT: jmp .LBB2_2876; X64-MinGW-NEXT: .seh_endproc877 %mem = alloca i32, i32 10000878 call void @dummy_use (ptr %mem, i32 3)879 ret void880}881 882define fastcc void @test_fastcc() #0 {883; X86-Linux-LABEL: test_fastcc:884; X86-Linux: # %bb.0:885; X86-Linux-NEXT: cmpl %gs:48, %esp886; X86-Linux-NEXT: jbe .LBB3_1887; X86-Linux-NEXT: .LBB3_2:888; X86-Linux-NEXT: subl $52, %esp889; X86-Linux-NEXT: .cfi_adjust_cfa_offset 52890; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax891; X86-Linux-NEXT: pushl $10892; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4893; X86-Linux-NEXT: pushl %eax894; X86-Linux-NEXT: .cfi_adjust_cfa_offset 4895; X86-Linux-NEXT: calll dummy_use@PLT896; X86-Linux-NEXT: addl $60, %esp897; X86-Linux-NEXT: .cfi_adjust_cfa_offset -60898; X86-Linux-NEXT: retl899; X86-Linux-NEXT: .LBB3_1:900; X86-Linux-NEXT: pushl $0901; X86-Linux-NEXT: pushl $44902; X86-Linux-NEXT: calll __morestack903; X86-Linux-NEXT: retl904; X86-Linux-NEXT: jmp .LBB3_2905;906; X64-Linux-LABEL: test_fastcc:907; X64-Linux: # %bb.0:908; X64-Linux-NEXT: cmpq %fs:112, %rsp909; X64-Linux-NEXT: jbe .LBB3_1910; X64-Linux-NEXT: .LBB3_2:911; X64-Linux-NEXT: subq $40, %rsp912; X64-Linux-NEXT: .cfi_def_cfa_offset 48913; X64-Linux-NEXT: movq %rsp, %rdi914; X64-Linux-NEXT: movl $10, %esi915; X64-Linux-NEXT: callq dummy_use@PLT916; X64-Linux-NEXT: addq $40, %rsp917; X64-Linux-NEXT: .cfi_def_cfa_offset 8918; X64-Linux-NEXT: retq919; X64-Linux-NEXT: .LBB3_1:920; X64-Linux-NEXT: movl $40, %r10d921; X64-Linux-NEXT: movl $0, %r11d922; X64-Linux-NEXT: callq __morestack923; X64-Linux-NEXT: retq924; X64-Linux-NEXT: jmp .LBB3_2925;926; X64-Linux-Large-LABEL: test_fastcc:927; X64-Linux-Large: # %bb.0:928; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp929; X64-Linux-Large-NEXT: jbe .LBB3_1930; X64-Linux-Large-NEXT: .LBB3_2:931; X64-Linux-Large-NEXT: subq $40, %rsp932; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 48933; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax934; X64-Linux-Large-NEXT: movq %rsp, %rdi935; X64-Linux-Large-NEXT: movl $10, %esi936; X64-Linux-Large-NEXT: callq *%rax937; X64-Linux-Large-NEXT: addq $40, %rsp938; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 8939; X64-Linux-Large-NEXT: retq940; X64-Linux-Large-NEXT: .LBB3_1:941; X64-Linux-Large-NEXT: movl $40, %r10d942; X64-Linux-Large-NEXT: movl $0, %r11d943; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)944; X64-Linux-Large-NEXT: retq945; X64-Linux-Large-NEXT: jmp .LBB3_2946;947; X32ABI-LABEL: test_fastcc:948; X32ABI: # %bb.0:949; X32ABI-NEXT: cmpl %fs:64, %esp950; X32ABI-NEXT: jbe .LBB3_1951; X32ABI-NEXT: .LBB3_2:952; X32ABI-NEXT: subl $40, %esp953; X32ABI-NEXT: .cfi_def_cfa_offset 48954; X32ABI-NEXT: movl %esp, %edi955; X32ABI-NEXT: movl $10, %esi956; X32ABI-NEXT: callq dummy_use@PLT957; X32ABI-NEXT: addl $40, %esp958; X32ABI-NEXT: .cfi_def_cfa_offset 8959; X32ABI-NEXT: retq960; X32ABI-NEXT: .LBB3_1:961; X32ABI-NEXT: movl $40, %r10d962; X32ABI-NEXT: movl $0, %r11d963; X32ABI-NEXT: callq __morestack964; X32ABI-NEXT: retq965; X32ABI-NEXT: jmp .LBB3_2966;967; X86-Darwin-LABEL: test_fastcc:968; X86-Darwin: ## %bb.0:969; X86-Darwin-NEXT: movl $432, %eax ## imm = 0x1B0970; X86-Darwin-NEXT: cmpl %gs:(%eax), %esp971; X86-Darwin-NEXT: jbe LBB3_1972; X86-Darwin-NEXT: LBB3_2:973; X86-Darwin-NEXT: subl $60, %esp974; X86-Darwin-NEXT: .cfi_def_cfa_offset 64975; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax976; X86-Darwin-NEXT: movl %eax, (%esp)977; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp)978; X86-Darwin-NEXT: calll _dummy_use979; X86-Darwin-NEXT: addl $60, %esp980; X86-Darwin-NEXT: retl981; X86-Darwin-NEXT: LBB3_1:982; X86-Darwin-NEXT: pushl $0983; X86-Darwin-NEXT: pushl $60984; X86-Darwin-NEXT: calll ___morestack985; X86-Darwin-NEXT: retl986; X86-Darwin-NEXT: jmp LBB3_2987;988; X64-Darwin-LABEL: test_fastcc:989; X64-Darwin: ## %bb.0:990; X64-Darwin-NEXT: cmpq %gs:816, %rsp991; X64-Darwin-NEXT: jbe LBB3_1992; X64-Darwin-NEXT: LBB3_2:993; X64-Darwin-NEXT: subq $40, %rsp994; X64-Darwin-NEXT: .cfi_def_cfa_offset 48995; X64-Darwin-NEXT: movq %rsp, %rdi996; X64-Darwin-NEXT: movl $10, %esi997; X64-Darwin-NEXT: callq _dummy_use998; X64-Darwin-NEXT: addq $40, %rsp999; X64-Darwin-NEXT: retq1000; X64-Darwin-NEXT: LBB3_1:1001; X64-Darwin-NEXT: movl $40, %r10d1002; X64-Darwin-NEXT: movl $0, %r11d1003; X64-Darwin-NEXT: callq ___morestack1004; X64-Darwin-NEXT: retq1005; X64-Darwin-NEXT: jmp LBB3_21006;1007; X86-MinGW-LABEL: test_fastcc:1008; X86-MinGW: # %bb.0:1009; X86-MinGW-NEXT: cmpl %fs:20, %esp1010; X86-MinGW-NEXT: jbe LBB3_11011; X86-MinGW-NEXT: LBB3_2:1012; X86-MinGW-NEXT: subl $40, %esp1013; X86-MinGW-NEXT: .cfi_def_cfa_offset 441014; X86-MinGW-NEXT: movl %esp, %eax1015; X86-MinGW-NEXT: pushl $101016; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 41017; X86-MinGW-NEXT: pushl %eax1018; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 41019; X86-MinGW-NEXT: calll _dummy_use1020; X86-MinGW-NEXT: addl $48, %esp1021; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -481022; X86-MinGW-NEXT: retl1023; X86-MinGW-NEXT: LBB3_1:1024; X86-MinGW-NEXT: pushl $01025; X86-MinGW-NEXT: pushl $401026; X86-MinGW-NEXT: calll ___morestack1027; X86-MinGW-NEXT: retl1028; X86-MinGW-NEXT: jmp LBB3_21029;1030; X64-FreeBSD-LABEL: test_fastcc:1031; X64-FreeBSD: # %bb.0:1032; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp1033; X64-FreeBSD-NEXT: jbe .LBB3_11034; X64-FreeBSD-NEXT: .LBB3_2:1035; X64-FreeBSD-NEXT: subq $40, %rsp1036; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 481037; X64-FreeBSD-NEXT: movq %rsp, %rdi1038; X64-FreeBSD-NEXT: movl $10, %esi1039; X64-FreeBSD-NEXT: callq dummy_use@PLT1040; X64-FreeBSD-NEXT: addq $40, %rsp1041; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 81042; X64-FreeBSD-NEXT: retq1043; X64-FreeBSD-NEXT: .LBB3_1:1044; X64-FreeBSD-NEXT: movl $40, %r10d1045; X64-FreeBSD-NEXT: movl $0, %r11d1046; X64-FreeBSD-NEXT: callq __morestack1047; X64-FreeBSD-NEXT: retq1048; X64-FreeBSD-NEXT: jmp .LBB3_21049;1050; X86-DFlyBSD-LABEL: test_fastcc:1051; X86-DFlyBSD: # %bb.0:1052; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp1053; X86-DFlyBSD-NEXT: jbe .LBB3_11054; X86-DFlyBSD-NEXT: .LBB3_2:1055; X86-DFlyBSD-NEXT: subl $40, %esp1056; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 441057; X86-DFlyBSD-NEXT: movl %esp, %eax1058; X86-DFlyBSD-NEXT: pushl $101059; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 41060; X86-DFlyBSD-NEXT: pushl %eax1061; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 41062; X86-DFlyBSD-NEXT: calll dummy_use@PLT1063; X86-DFlyBSD-NEXT: addl $48, %esp1064; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -481065; X86-DFlyBSD-NEXT: retl1066; X86-DFlyBSD-NEXT: .LBB3_1:1067; X86-DFlyBSD-NEXT: pushl $01068; X86-DFlyBSD-NEXT: pushl $401069; X86-DFlyBSD-NEXT: calll __morestack1070; X86-DFlyBSD-NEXT: retl1071; X86-DFlyBSD-NEXT: jmp .LBB3_21072;1073; X64-DFlyBSD-LABEL: test_fastcc:1074; X64-DFlyBSD: # %bb.0:1075; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp1076; X64-DFlyBSD-NEXT: jbe .LBB3_11077; X64-DFlyBSD-NEXT: .LBB3_2:1078; X64-DFlyBSD-NEXT: subq $40, %rsp1079; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 481080; X64-DFlyBSD-NEXT: movq %rsp, %rdi1081; X64-DFlyBSD-NEXT: movl $10, %esi1082; X64-DFlyBSD-NEXT: callq dummy_use@PLT1083; X64-DFlyBSD-NEXT: addq $40, %rsp1084; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 81085; X64-DFlyBSD-NEXT: retq1086; X64-DFlyBSD-NEXT: .LBB3_1:1087; X64-DFlyBSD-NEXT: movl $40, %r10d1088; X64-DFlyBSD-NEXT: movl $0, %r11d1089; X64-DFlyBSD-NEXT: callq __morestack1090; X64-DFlyBSD-NEXT: retq1091; X64-DFlyBSD-NEXT: jmp .LBB3_21092;1093; X64-MinGW-LABEL: test_fastcc:1094; X64-MinGW: # %bb.0:1095; X64-MinGW-NEXT: cmpq %gs:40, %rsp1096; X64-MinGW-NEXT: jbe .LBB3_11097; X64-MinGW-NEXT: .LBB3_2:1098; X64-MinGW-NEXT: subq $72, %rsp1099; X64-MinGW-NEXT: .seh_stackalloc 721100; X64-MinGW-NEXT: .seh_endprologue1101; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx1102; X64-MinGW-NEXT: movl $10, %edx1103; X64-MinGW-NEXT: callq dummy_use1104; X64-MinGW-NEXT: nop1105; X64-MinGW-NEXT: .seh_startepilogue1106; X64-MinGW-NEXT: addq $72, %rsp1107; X64-MinGW-NEXT: .seh_endepilogue1108; X64-MinGW-NEXT: retq1109; X64-MinGW-NEXT: .LBB3_1:1110; X64-MinGW-NEXT: movl $72, %r10d1111; X64-MinGW-NEXT: movl $32, %r11d1112; X64-MinGW-NEXT: callq __morestack1113; X64-MinGW-NEXT: retq1114; X64-MinGW-NEXT: jmp .LBB3_21115; X64-MinGW-NEXT: .seh_endproc1116 %mem = alloca i32, i32 101117 call void @dummy_use (ptr %mem, i32 10)1118 ret void1119}1120 1121define fastcc void @test_fastcc_large() #0 {1122; X86-Linux-LABEL: test_fastcc_large:1123; X86-Linux: # %bb.0:1124; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %eax1125; X86-Linux-NEXT: cmpl %gs:48, %eax1126; X86-Linux-NEXT: jbe .LBB4_11127; X86-Linux-NEXT: .LBB4_2:1128; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C541129; X86-Linux-NEXT: .cfi_adjust_cfa_offset 400201130; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax1131; X86-Linux-NEXT: pushl $31132; X86-Linux-NEXT: .cfi_adjust_cfa_offset 41133; X86-Linux-NEXT: pushl %eax1134; X86-Linux-NEXT: .cfi_adjust_cfa_offset 41135; X86-Linux-NEXT: calll dummy_use@PLT1136; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C1137; X86-Linux-NEXT: .cfi_adjust_cfa_offset -400281138; X86-Linux-NEXT: retl1139; X86-Linux-NEXT: .LBB4_1:1140; X86-Linux-NEXT: pushl $01141; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C1142; X86-Linux-NEXT: calll __morestack1143; X86-Linux-NEXT: retl1144; X86-Linux-NEXT: jmp .LBB4_21145;1146; X64-Linux-LABEL: test_fastcc_large:1147; X64-Linux: # %bb.0:1148; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r111149; X64-Linux-NEXT: cmpq %fs:112, %r111150; X64-Linux-NEXT: jbe .LBB4_11151; X64-Linux-NEXT: .LBB4_2:1152; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C481153; X64-Linux-NEXT: .cfi_def_cfa_offset 400161154; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1155; X64-Linux-NEXT: movl $3, %esi1156; X64-Linux-NEXT: callq dummy_use@PLT1157; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C481158; X64-Linux-NEXT: .cfi_def_cfa_offset 81159; X64-Linux-NEXT: retq1160; X64-Linux-NEXT: .LBB4_1:1161; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C481162; X64-Linux-NEXT: movl $0, %r11d1163; X64-Linux-NEXT: callq __morestack1164; X64-Linux-NEXT: retq1165; X64-Linux-NEXT: jmp .LBB4_21166;1167; X64-Linux-Large-LABEL: test_fastcc_large:1168; X64-Linux-Large: # %bb.0:1169; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r111170; X64-Linux-Large-NEXT: cmpq %fs:112, %r111171; X64-Linux-Large-NEXT: jbe .LBB4_11172; X64-Linux-Large-NEXT: .LBB4_2:1173; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C481174; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 400161175; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax1176; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1177; X64-Linux-Large-NEXT: movl $3, %esi1178; X64-Linux-Large-NEXT: callq *%rax1179; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C481180; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 81181; X64-Linux-Large-NEXT: retq1182; X64-Linux-Large-NEXT: .LBB4_1:1183; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C481184; X64-Linux-Large-NEXT: movl $0, %r11d1185; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)1186; X64-Linux-Large-NEXT: retq1187; X64-Linux-Large-NEXT: jmp .LBB4_21188;1189; X32ABI-LABEL: test_fastcc_large:1190; X32ABI: # %bb.0:1191; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d1192; X32ABI-NEXT: cmpl %fs:64, %r11d1193; X32ABI-NEXT: jbe .LBB4_11194; X32ABI-NEXT: .LBB4_2:1195; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C481196; X32ABI-NEXT: .cfi_def_cfa_offset 400161197; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi1198; X32ABI-NEXT: movl $3, %esi1199; X32ABI-NEXT: callq dummy_use@PLT1200; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C481201; X32ABI-NEXT: .cfi_def_cfa_offset 81202; X32ABI-NEXT: retq1203; X32ABI-NEXT: .LBB4_1:1204; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C481205; X32ABI-NEXT: movl $0, %r11d1206; X32ABI-NEXT: callq __morestack1207; X32ABI-NEXT: retq1208; X32ABI-NEXT: jmp .LBB4_21209;1210; X86-Darwin-LABEL: test_fastcc_large:1211; X86-Darwin: ## %bb.0:1212; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %eax1213; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B01214; X86-Darwin-NEXT: cmpl %gs:(%ecx), %eax1215; X86-Darwin-NEXT: jbe LBB4_11216; X86-Darwin-NEXT: LBB4_2:1217; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C1218; X86-Darwin-NEXT: .cfi_def_cfa_offset 400161219; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax1220; X86-Darwin-NEXT: movl %eax, (%esp)1221; X86-Darwin-NEXT: movl $3, {{[0-9]+}}(%esp)1222; X86-Darwin-NEXT: calll _dummy_use1223; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C1224; X86-Darwin-NEXT: retl1225; X86-Darwin-NEXT: LBB4_1:1226; X86-Darwin-NEXT: pushl $01227; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C1228; X86-Darwin-NEXT: calll ___morestack1229; X86-Darwin-NEXT: retl1230; X86-Darwin-NEXT: jmp LBB4_21231;1232; X64-Darwin-LABEL: test_fastcc_large:1233; X64-Darwin: ## %bb.0:1234; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r111235; X64-Darwin-NEXT: cmpq %gs:816, %r111236; X64-Darwin-NEXT: jbe LBB4_11237; X64-Darwin-NEXT: LBB4_2:1238; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C481239; X64-Darwin-NEXT: .cfi_def_cfa_offset 400161240; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1241; X64-Darwin-NEXT: movl $3, %esi1242; X64-Darwin-NEXT: callq _dummy_use1243; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C481244; X64-Darwin-NEXT: retq1245; X64-Darwin-NEXT: LBB4_1:1246; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C481247; X64-Darwin-NEXT: movl $0, %r11d1248; X64-Darwin-NEXT: callq ___morestack1249; X64-Darwin-NEXT: retq1250; X64-Darwin-NEXT: jmp LBB4_21251;1252; X86-MinGW-LABEL: test_fastcc_large:1253; X86-MinGW: # %bb.0:1254; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %eax1255; X86-MinGW-NEXT: cmpl %fs:20, %eax1256; X86-MinGW-NEXT: jbe LBB4_11257; X86-MinGW-NEXT: LBB4_2:1258; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C401259; X86-MinGW-NEXT: calll __alloca1260; X86-MinGW-NEXT: .cfi_def_cfa_offset 400041261; X86-MinGW-NEXT: movl %esp, %eax1262; X86-MinGW-NEXT: pushl $31263; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 41264; X86-MinGW-NEXT: pushl %eax1265; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 41266; X86-MinGW-NEXT: calll _dummy_use1267; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C481268; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -400081269; X86-MinGW-NEXT: retl1270; X86-MinGW-NEXT: LBB4_1:1271; X86-MinGW-NEXT: pushl $01272; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C401273; X86-MinGW-NEXT: calll ___morestack1274; X86-MinGW-NEXT: retl1275; X86-MinGW-NEXT: jmp LBB4_21276;1277; X64-FreeBSD-LABEL: test_fastcc_large:1278; X64-FreeBSD: # %bb.0:1279; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r111280; X64-FreeBSD-NEXT: cmpq %fs:24, %r111281; X64-FreeBSD-NEXT: jbe .LBB4_11282; X64-FreeBSD-NEXT: .LBB4_2:1283; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C481284; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 400161285; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1286; X64-FreeBSD-NEXT: movl $3, %esi1287; X64-FreeBSD-NEXT: callq dummy_use@PLT1288; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C481289; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 81290; X64-FreeBSD-NEXT: retq1291; X64-FreeBSD-NEXT: .LBB4_1:1292; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C481293; X64-FreeBSD-NEXT: movl $0, %r11d1294; X64-FreeBSD-NEXT: callq __morestack1295; X64-FreeBSD-NEXT: retq1296; X64-FreeBSD-NEXT: jmp .LBB4_21297;1298; X86-DFlyBSD-LABEL: test_fastcc_large:1299; X86-DFlyBSD: # %bb.0:1300; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %eax1301; X86-DFlyBSD-NEXT: cmpl %fs:16, %eax1302; X86-DFlyBSD-NEXT: jbe .LBB4_11303; X86-DFlyBSD-NEXT: .LBB4_2:1304; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C401305; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 400041306; X86-DFlyBSD-NEXT: movl %esp, %eax1307; X86-DFlyBSD-NEXT: pushl $31308; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 41309; X86-DFlyBSD-NEXT: pushl %eax1310; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 41311; X86-DFlyBSD-NEXT: calll dummy_use@PLT1312; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C481313; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -400081314; X86-DFlyBSD-NEXT: retl1315; X86-DFlyBSD-NEXT: .LBB4_1:1316; X86-DFlyBSD-NEXT: pushl $01317; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C401318; X86-DFlyBSD-NEXT: calll __morestack1319; X86-DFlyBSD-NEXT: retl1320; X86-DFlyBSD-NEXT: jmp .LBB4_21321;1322; X64-DFlyBSD-LABEL: test_fastcc_large:1323; X64-DFlyBSD: # %bb.0:1324; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r111325; X64-DFlyBSD-NEXT: cmpq %fs:32, %r111326; X64-DFlyBSD-NEXT: jbe .LBB4_11327; X64-DFlyBSD-NEXT: .LBB4_2:1328; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C481329; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 400161330; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1331; X64-DFlyBSD-NEXT: movl $3, %esi1332; X64-DFlyBSD-NEXT: callq dummy_use@PLT1333; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C481334; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 81335; X64-DFlyBSD-NEXT: retq1336; X64-DFlyBSD-NEXT: .LBB4_1:1337; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C481338; X64-DFlyBSD-NEXT: movl $0, %r11d1339; X64-DFlyBSD-NEXT: callq __morestack1340; X64-DFlyBSD-NEXT: retq1341; X64-DFlyBSD-NEXT: jmp .LBB4_21342;1343; X64-MinGW-LABEL: test_fastcc_large:1344; X64-MinGW: # %bb.0:1345; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r111346; X64-MinGW-NEXT: cmpq %gs:40, %r111347; X64-MinGW-NEXT: jbe .LBB4_11348; X64-MinGW-NEXT: .LBB4_2:1349; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C681350; X64-MinGW-NEXT: callq ___chkstk_ms1351; X64-MinGW-NEXT: subq %rax, %rsp1352; X64-MinGW-NEXT: .seh_stackalloc 400401353; X64-MinGW-NEXT: .seh_endprologue1354; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx1355; X64-MinGW-NEXT: movl $3, %edx1356; X64-MinGW-NEXT: callq dummy_use1357; X64-MinGW-NEXT: nop1358; X64-MinGW-NEXT: .seh_startepilogue1359; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C681360; X64-MinGW-NEXT: .seh_endepilogue1361; X64-MinGW-NEXT: retq1362; X64-MinGW-NEXT: .LBB4_1:1363; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C681364; X64-MinGW-NEXT: movl $32, %r11d1365; X64-MinGW-NEXT: callq __morestack1366; X64-MinGW-NEXT: retq1367; X64-MinGW-NEXT: jmp .LBB4_21368; X64-MinGW-NEXT: .seh_endproc1369 %mem = alloca i32, i32 100001370 call void @dummy_use (ptr %mem, i32 3)1371 ret void1372}1373 1374; This is testing that the Mac implementation preserves ecx1375 1376define fastcc void @test_fastcc_large_with_ecx_arg(i32 %a) #0 {1377; X86-Linux-LABEL: test_fastcc_large_with_ecx_arg:1378; X86-Linux: # %bb.0:1379; X86-Linux-NEXT: leal -{{[0-9]+}}(%esp), %eax1380; X86-Linux-NEXT: cmpl %gs:48, %eax1381; X86-Linux-NEXT: jbe .LBB5_11382; X86-Linux-NEXT: .LBB5_2:1383; X86-Linux-NEXT: subl $40020, %esp # imm = 0x9C541384; X86-Linux-NEXT: .cfi_adjust_cfa_offset 400201385; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax1386; X86-Linux-NEXT: pushl %ecx1387; X86-Linux-NEXT: .cfi_adjust_cfa_offset 41388; X86-Linux-NEXT: pushl %eax1389; X86-Linux-NEXT: .cfi_adjust_cfa_offset 41390; X86-Linux-NEXT: calll dummy_use@PLT1391; X86-Linux-NEXT: addl $40028, %esp # imm = 0x9C5C1392; X86-Linux-NEXT: .cfi_adjust_cfa_offset -400281393; X86-Linux-NEXT: retl1394; X86-Linux-NEXT: .LBB5_1:1395; X86-Linux-NEXT: pushl $01396; X86-Linux-NEXT: pushl $40012 # imm = 0x9C4C1397; X86-Linux-NEXT: calll __morestack1398; X86-Linux-NEXT: retl1399; X86-Linux-NEXT: jmp .LBB5_21400;1401; X64-Linux-LABEL: test_fastcc_large_with_ecx_arg:1402; X64-Linux: # %bb.0:1403; X64-Linux-NEXT: leaq -{{[0-9]+}}(%rsp), %r111404; X64-Linux-NEXT: cmpq %fs:112, %r111405; X64-Linux-NEXT: jbe .LBB5_11406; X64-Linux-NEXT: .LBB5_2:1407; X64-Linux-NEXT: subq $40008, %rsp # imm = 0x9C481408; X64-Linux-NEXT: .cfi_def_cfa_offset 400161409; X64-Linux-NEXT: movl %edi, %esi1410; X64-Linux-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1411; X64-Linux-NEXT: callq dummy_use@PLT1412; X64-Linux-NEXT: addq $40008, %rsp # imm = 0x9C481413; X64-Linux-NEXT: .cfi_def_cfa_offset 81414; X64-Linux-NEXT: retq1415; X64-Linux-NEXT: .LBB5_1:1416; X64-Linux-NEXT: movl $40008, %r10d # imm = 0x9C481417; X64-Linux-NEXT: movl $0, %r11d1418; X64-Linux-NEXT: callq __morestack1419; X64-Linux-NEXT: retq1420; X64-Linux-NEXT: jmp .LBB5_21421;1422; X64-Linux-Large-LABEL: test_fastcc_large_with_ecx_arg:1423; X64-Linux-Large: # %bb.0:1424; X64-Linux-Large-NEXT: leaq -{{[0-9]+}}(%rsp), %r111425; X64-Linux-Large-NEXT: cmpq %fs:112, %r111426; X64-Linux-Large-NEXT: jbe .LBB5_11427; X64-Linux-Large-NEXT: .LBB5_2:1428; X64-Linux-Large-NEXT: subq $40008, %rsp # imm = 0x9C481429; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 400161430; X64-Linux-Large-NEXT: movl %edi, %esi1431; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax1432; X64-Linux-Large-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1433; X64-Linux-Large-NEXT: callq *%rax1434; X64-Linux-Large-NEXT: addq $40008, %rsp # imm = 0x9C481435; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 81436; X64-Linux-Large-NEXT: retq1437; X64-Linux-Large-NEXT: .LBB5_1:1438; X64-Linux-Large-NEXT: movl $40008, %r10d # imm = 0x9C481439; X64-Linux-Large-NEXT: movl $0, %r11d1440; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)1441; X64-Linux-Large-NEXT: retq1442; X64-Linux-Large-NEXT: jmp .LBB5_21443;1444; X32ABI-LABEL: test_fastcc_large_with_ecx_arg:1445; X32ABI: # %bb.0:1446; X32ABI-NEXT: leal -{{[0-9]+}}(%rsp), %r11d1447; X32ABI-NEXT: cmpl %fs:64, %r11d1448; X32ABI-NEXT: jbe .LBB5_11449; X32ABI-NEXT: .LBB5_2:1450; X32ABI-NEXT: subl $40008, %esp # imm = 0x9C481451; X32ABI-NEXT: .cfi_def_cfa_offset 400161452; X32ABI-NEXT: movl %edi, %esi1453; X32ABI-NEXT: leal {{[0-9]+}}(%rsp), %edi1454; X32ABI-NEXT: callq dummy_use@PLT1455; X32ABI-NEXT: addl $40008, %esp # imm = 0x9C481456; X32ABI-NEXT: .cfi_def_cfa_offset 81457; X32ABI-NEXT: retq1458; X32ABI-NEXT: .LBB5_1:1459; X32ABI-NEXT: movl $40008, %r10d # imm = 0x9C481460; X32ABI-NEXT: movl $0, %r11d1461; X32ABI-NEXT: callq __morestack1462; X32ABI-NEXT: retq1463; X32ABI-NEXT: jmp .LBB5_21464;1465; X86-Darwin-LABEL: test_fastcc_large_with_ecx_arg:1466; X86-Darwin: ## %bb.0:1467; X86-Darwin-NEXT: leal -{{[0-9]+}}(%esp), %eax1468; X86-Darwin-NEXT: pushl %ecx1469; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B01470; X86-Darwin-NEXT: cmpl %gs:(%ecx), %eax1471; X86-Darwin-NEXT: popl %ecx1472; X86-Darwin-NEXT: jbe LBB5_11473; X86-Darwin-NEXT: LBB5_2:1474; X86-Darwin-NEXT: subl $40012, %esp ## imm = 0x9C4C1475; X86-Darwin-NEXT: .cfi_def_cfa_offset 400161476; X86-Darwin-NEXT: movl %ecx, {{[0-9]+}}(%esp)1477; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax1478; X86-Darwin-NEXT: movl %eax, (%esp)1479; X86-Darwin-NEXT: calll _dummy_use1480; X86-Darwin-NEXT: addl $40012, %esp ## imm = 0x9C4C1481; X86-Darwin-NEXT: retl1482; X86-Darwin-NEXT: LBB5_1:1483; X86-Darwin-NEXT: pushl $01484; X86-Darwin-NEXT: pushl $40012 ## imm = 0x9C4C1485; X86-Darwin-NEXT: calll ___morestack1486; X86-Darwin-NEXT: retl1487; X86-Darwin-NEXT: jmp LBB5_21488;1489; X64-Darwin-LABEL: test_fastcc_large_with_ecx_arg:1490; X64-Darwin: ## %bb.0:1491; X64-Darwin-NEXT: leaq -{{[0-9]+}}(%rsp), %r111492; X64-Darwin-NEXT: cmpq %gs:816, %r111493; X64-Darwin-NEXT: jbe LBB5_11494; X64-Darwin-NEXT: LBB5_2:1495; X64-Darwin-NEXT: subq $40008, %rsp ## imm = 0x9C481496; X64-Darwin-NEXT: .cfi_def_cfa_offset 400161497; X64-Darwin-NEXT: movl %edi, %esi1498; X64-Darwin-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1499; X64-Darwin-NEXT: callq _dummy_use1500; X64-Darwin-NEXT: addq $40008, %rsp ## imm = 0x9C481501; X64-Darwin-NEXT: retq1502; X64-Darwin-NEXT: LBB5_1:1503; X64-Darwin-NEXT: movl $40008, %r10d ## imm = 0x9C481504; X64-Darwin-NEXT: movl $0, %r11d1505; X64-Darwin-NEXT: callq ___morestack1506; X64-Darwin-NEXT: retq1507; X64-Darwin-NEXT: jmp LBB5_21508;1509; X86-MinGW-LABEL: test_fastcc_large_with_ecx_arg:1510; X86-MinGW: # %bb.0:1511; X86-MinGW-NEXT: leal -{{[0-9]+}}(%esp), %eax1512; X86-MinGW-NEXT: cmpl %fs:20, %eax1513; X86-MinGW-NEXT: jbe LBB5_11514; X86-MinGW-NEXT: LBB5_2:1515; X86-MinGW-NEXT: movl $40000, %eax # imm = 0x9C401516; X86-MinGW-NEXT: calll __alloca1517; X86-MinGW-NEXT: .cfi_def_cfa_offset 400041518; X86-MinGW-NEXT: movl %esp, %eax1519; X86-MinGW-NEXT: pushl %ecx1520; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 41521; X86-MinGW-NEXT: pushl %eax1522; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 41523; X86-MinGW-NEXT: calll _dummy_use1524; X86-MinGW-NEXT: addl $40008, %esp # imm = 0x9C481525; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -400081526; X86-MinGW-NEXT: retl1527; X86-MinGW-NEXT: LBB5_1:1528; X86-MinGW-NEXT: pushl $01529; X86-MinGW-NEXT: pushl $40000 # imm = 0x9C401530; X86-MinGW-NEXT: calll ___morestack1531; X86-MinGW-NEXT: retl1532; X86-MinGW-NEXT: jmp LBB5_21533;1534; X64-FreeBSD-LABEL: test_fastcc_large_with_ecx_arg:1535; X64-FreeBSD: # %bb.0:1536; X64-FreeBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r111537; X64-FreeBSD-NEXT: cmpq %fs:24, %r111538; X64-FreeBSD-NEXT: jbe .LBB5_11539; X64-FreeBSD-NEXT: .LBB5_2:1540; X64-FreeBSD-NEXT: subq $40008, %rsp # imm = 0x9C481541; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 400161542; X64-FreeBSD-NEXT: movl %edi, %esi1543; X64-FreeBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1544; X64-FreeBSD-NEXT: callq dummy_use@PLT1545; X64-FreeBSD-NEXT: addq $40008, %rsp # imm = 0x9C481546; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 81547; X64-FreeBSD-NEXT: retq1548; X64-FreeBSD-NEXT: .LBB5_1:1549; X64-FreeBSD-NEXT: movl $40008, %r10d # imm = 0x9C481550; X64-FreeBSD-NEXT: movl $0, %r11d1551; X64-FreeBSD-NEXT: callq __morestack1552; X64-FreeBSD-NEXT: retq1553; X64-FreeBSD-NEXT: jmp .LBB5_21554;1555; X86-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg:1556; X86-DFlyBSD: # %bb.0:1557; X86-DFlyBSD-NEXT: leal -{{[0-9]+}}(%esp), %eax1558; X86-DFlyBSD-NEXT: cmpl %fs:16, %eax1559; X86-DFlyBSD-NEXT: jbe .LBB5_11560; X86-DFlyBSD-NEXT: .LBB5_2:1561; X86-DFlyBSD-NEXT: subl $40000, %esp # imm = 0x9C401562; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 400041563; X86-DFlyBSD-NEXT: movl %esp, %eax1564; X86-DFlyBSD-NEXT: pushl %ecx1565; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 41566; X86-DFlyBSD-NEXT: pushl %eax1567; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 41568; X86-DFlyBSD-NEXT: calll dummy_use@PLT1569; X86-DFlyBSD-NEXT: addl $40008, %esp # imm = 0x9C481570; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -400081571; X86-DFlyBSD-NEXT: retl1572; X86-DFlyBSD-NEXT: .LBB5_1:1573; X86-DFlyBSD-NEXT: pushl $01574; X86-DFlyBSD-NEXT: pushl $40000 # imm = 0x9C401575; X86-DFlyBSD-NEXT: calll __morestack1576; X86-DFlyBSD-NEXT: retl1577; X86-DFlyBSD-NEXT: jmp .LBB5_21578;1579; X64-DFlyBSD-LABEL: test_fastcc_large_with_ecx_arg:1580; X64-DFlyBSD: # %bb.0:1581; X64-DFlyBSD-NEXT: leaq -{{[0-9]+}}(%rsp), %r111582; X64-DFlyBSD-NEXT: cmpq %fs:32, %r111583; X64-DFlyBSD-NEXT: jbe .LBB5_11584; X64-DFlyBSD-NEXT: .LBB5_2:1585; X64-DFlyBSD-NEXT: subq $40008, %rsp # imm = 0x9C481586; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 400161587; X64-DFlyBSD-NEXT: movl %edi, %esi1588; X64-DFlyBSD-NEXT: leaq {{[0-9]+}}(%rsp), %rdi1589; X64-DFlyBSD-NEXT: callq dummy_use@PLT1590; X64-DFlyBSD-NEXT: addq $40008, %rsp # imm = 0x9C481591; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 81592; X64-DFlyBSD-NEXT: retq1593; X64-DFlyBSD-NEXT: .LBB5_1:1594; X64-DFlyBSD-NEXT: movl $40008, %r10d # imm = 0x9C481595; X64-DFlyBSD-NEXT: movl $0, %r11d1596; X64-DFlyBSD-NEXT: callq __morestack1597; X64-DFlyBSD-NEXT: retq1598; X64-DFlyBSD-NEXT: jmp .LBB5_21599;1600; X64-MinGW-LABEL: test_fastcc_large_with_ecx_arg:1601; X64-MinGW: # %bb.0:1602; X64-MinGW-NEXT: leaq -{{[0-9]+}}(%rsp), %r111603; X64-MinGW-NEXT: cmpq %gs:40, %r111604; X64-MinGW-NEXT: jbe .LBB5_11605; X64-MinGW-NEXT: .LBB5_2:1606; X64-MinGW-NEXT: movl $40040, %eax # imm = 0x9C681607; X64-MinGW-NEXT: callq ___chkstk_ms1608; X64-MinGW-NEXT: subq %rax, %rsp1609; X64-MinGW-NEXT: .seh_stackalloc 400401610; X64-MinGW-NEXT: .seh_endprologue1611; X64-MinGW-NEXT: movl %ecx, %edx1612; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx1613; X64-MinGW-NEXT: callq dummy_use1614; X64-MinGW-NEXT: nop1615; X64-MinGW-NEXT: .seh_startepilogue1616; X64-MinGW-NEXT: addq $40040, %rsp # imm = 0x9C681617; X64-MinGW-NEXT: .seh_endepilogue1618; X64-MinGW-NEXT: retq1619; X64-MinGW-NEXT: .LBB5_1:1620; X64-MinGW-NEXT: movl $40040, %r10d # imm = 0x9C681621; X64-MinGW-NEXT: movl $32, %r11d1622; X64-MinGW-NEXT: callq __morestack1623; X64-MinGW-NEXT: retq1624; X64-MinGW-NEXT: jmp .LBB5_21625; X64-MinGW-NEXT: .seh_endproc1626 %mem = alloca i32, i32 100001627 call void @dummy_use (ptr %mem, i32 %a)1628 ret void1629}1630 1631define void @test_nostack() #0 {1632; X86-Linux-LABEL: test_nostack:1633; X86-Linux: # %bb.0:1634; X86-Linux-NEXT: retl1635;1636; X64-Linux-LABEL: test_nostack:1637; X64-Linux: # %bb.0:1638; X64-Linux-NEXT: retq1639;1640; X64-Linux-Large-LABEL: test_nostack:1641; X64-Linux-Large: # %bb.0:1642; X64-Linux-Large-NEXT: retq1643;1644; X32ABI-LABEL: test_nostack:1645; X32ABI: # %bb.0:1646; X32ABI-NEXT: retq1647;1648; X86-Darwin-LABEL: test_nostack:1649; X86-Darwin: ## %bb.0:1650; X86-Darwin-NEXT: retl1651;1652; X64-Darwin-LABEL: test_nostack:1653; X64-Darwin: ## %bb.0:1654; X64-Darwin-NEXT: retq1655;1656; X86-MinGW-LABEL: test_nostack:1657; X86-MinGW: # %bb.0:1658; X86-MinGW-NEXT: retl1659;1660; X64-FreeBSD-LABEL: test_nostack:1661; X64-FreeBSD: # %bb.0:1662; X64-FreeBSD-NEXT: retq1663;1664; X86-DFlyBSD-LABEL: test_nostack:1665; X86-DFlyBSD: # %bb.0:1666; X86-DFlyBSD-NEXT: retl1667;1668; X64-DFlyBSD-LABEL: test_nostack:1669; X64-DFlyBSD: # %bb.0:1670; X64-DFlyBSD-NEXT: retq1671;1672; X64-MinGW-LABEL: test_nostack:1673; X64-MinGW: # %bb.0:1674; X64-MinGW-NEXT: retq1675 ret void1676}1677 1678define void @test_nosplitstck() {1679; X86-Linux-LABEL: test_nosplitstck:1680; X86-Linux: # %bb.0:1681; X86-Linux-NEXT: retl1682;1683; X64-Linux-LABEL: test_nosplitstck:1684; X64-Linux: # %bb.0:1685; X64-Linux-NEXT: retq1686;1687; X64-Linux-Large-LABEL: test_nosplitstck:1688; X64-Linux-Large: # %bb.0:1689; X64-Linux-Large-NEXT: retq1690;1691; X32ABI-LABEL: test_nosplitstck:1692; X32ABI: # %bb.0:1693; X32ABI-NEXT: retq1694;1695; X86-Darwin-LABEL: test_nosplitstck:1696; X86-Darwin: ## %bb.0:1697; X86-Darwin-NEXT: retl1698;1699; X64-Darwin-LABEL: test_nosplitstck:1700; X64-Darwin: ## %bb.0:1701; X64-Darwin-NEXT: retq1702;1703; X86-MinGW-LABEL: test_nosplitstck:1704; X86-MinGW: # %bb.0:1705; X86-MinGW-NEXT: retl1706;1707; X64-FreeBSD-LABEL: test_nosplitstck:1708; X64-FreeBSD: # %bb.0:1709; X64-FreeBSD-NEXT: retq1710;1711; X86-DFlyBSD-LABEL: test_nosplitstck:1712; X86-DFlyBSD: # %bb.0:1713; X86-DFlyBSD-NEXT: retl1714;1715; X64-DFlyBSD-LABEL: test_nosplitstck:1716; X64-DFlyBSD: # %bb.0:1717; X64-DFlyBSD-NEXT: retq1718;1719; X64-MinGW-LABEL: test_nosplitstck:1720; X64-MinGW: # %bb.0:1721; X64-MinGW-NEXT: retq1722 ret void1723}1724 1725; Test to make sure that a morestack call is generated if there is a1726; sibling call, even if the function in question has no stack frame1727; (PR37807).1728 1729declare i32 @callee(i32)1730 1731define i32 @test_sibling_call_empty_frame(i32 %x) #0 {1732; X86-Linux-LABEL: test_sibling_call_empty_frame:1733; X86-Linux: # %bb.0:1734; X86-Linux-NEXT: cmpl %gs:48, %esp1735; X86-Linux-NEXT: ja callee@PLT # TAILCALL1736; X86-Linux-NEXT: # %bb.1:1737; X86-Linux-NEXT: pushl $41738; X86-Linux-NEXT: pushl $01739; X86-Linux-NEXT: calll __morestack1740; X86-Linux-NEXT: retl1741; X86-Linux-NEXT: jmp callee@PLT # TAILCALL1742;1743; X64-Linux-LABEL: test_sibling_call_empty_frame:1744; X64-Linux: # %bb.0:1745; X64-Linux-NEXT: cmpq %fs:112, %rsp1746; X64-Linux-NEXT: ja callee@PLT # TAILCALL1747; X64-Linux-NEXT: # %bb.1:1748; X64-Linux-NEXT: movl $0, %r10d1749; X64-Linux-NEXT: movl $0, %r11d1750; X64-Linux-NEXT: callq __morestack1751; X64-Linux-NEXT: retq1752; X64-Linux-NEXT: jmp callee@PLT # TAILCALL1753;1754; X64-Linux-Large-LABEL: test_sibling_call_empty_frame:1755; X64-Linux-Large: # %bb.0:1756; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp1757; X64-Linux-Large-NEXT: jbe .LBB8_11758; X64-Linux-Large-NEXT: # %bb.2:1759; X64-Linux-Large-NEXT: movabsq $callee, %rax1760; X64-Linux-Large-NEXT: jmpq *%rax # TAILCALL1761; X64-Linux-Large-NEXT: .LBB8_1:1762; X64-Linux-Large-NEXT: movl $0, %r10d1763; X64-Linux-Large-NEXT: movl $0, %r11d1764; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)1765; X64-Linux-Large-NEXT: retq1766; X64-Linux-Large-NEXT: movabsq $callee, %rax1767; X64-Linux-Large-NEXT: jmpq *%rax # TAILCALL1768;1769; X32ABI-LABEL: test_sibling_call_empty_frame:1770; X32ABI: # %bb.0:1771; X32ABI-NEXT: cmpl %fs:64, %esp1772; X32ABI-NEXT: ja callee@PLT # TAILCALL1773; X32ABI-NEXT: # %bb.1:1774; X32ABI-NEXT: movl $0, %r10d1775; X32ABI-NEXT: movl $0, %r11d1776; X32ABI-NEXT: callq __morestack1777; X32ABI-NEXT: retq1778; X32ABI-NEXT: jmp callee@PLT # TAILCALL1779;1780; X86-Darwin-LABEL: test_sibling_call_empty_frame:1781; X86-Darwin: ## %bb.0:1782; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B01783; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp1784; X86-Darwin-NEXT: ja _callee ## TAILCALL1785; X86-Darwin-NEXT: ## %bb.1:1786; X86-Darwin-NEXT: pushl $41787; X86-Darwin-NEXT: pushl $01788; X86-Darwin-NEXT: calll ___morestack1789; X86-Darwin-NEXT: retl1790; X86-Darwin-NEXT: jmp _callee ## TAILCALL1791;1792; X64-Darwin-LABEL: test_sibling_call_empty_frame:1793; X64-Darwin: ## %bb.0:1794; X64-Darwin-NEXT: cmpq %gs:816, %rsp1795; X64-Darwin-NEXT: ja _callee ## TAILCALL1796; X64-Darwin-NEXT: ## %bb.1:1797; X64-Darwin-NEXT: movl $0, %r10d1798; X64-Darwin-NEXT: movl $0, %r11d1799; X64-Darwin-NEXT: callq ___morestack1800; X64-Darwin-NEXT: retq1801; X64-Darwin-NEXT: jmp _callee ## TAILCALL1802;1803; X86-MinGW-LABEL: test_sibling_call_empty_frame:1804; X86-MinGW: # %bb.0:1805; X86-MinGW-NEXT: cmpl %fs:20, %esp1806; X86-MinGW-NEXT: ja _callee # TAILCALL1807; X86-MinGW-NEXT: # %bb.1:1808; X86-MinGW-NEXT: pushl $41809; X86-MinGW-NEXT: pushl $01810; X86-MinGW-NEXT: calll ___morestack1811; X86-MinGW-NEXT: retl1812; X86-MinGW-NEXT: jmp _callee # TAILCALL1813;1814; X64-FreeBSD-LABEL: test_sibling_call_empty_frame:1815; X64-FreeBSD: # %bb.0:1816; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp1817; X64-FreeBSD-NEXT: ja callee@PLT # TAILCALL1818; X64-FreeBSD-NEXT: # %bb.1:1819; X64-FreeBSD-NEXT: movl $0, %r10d1820; X64-FreeBSD-NEXT: movl $0, %r11d1821; X64-FreeBSD-NEXT: callq __morestack1822; X64-FreeBSD-NEXT: retq1823; X64-FreeBSD-NEXT: jmp callee@PLT # TAILCALL1824;1825; X86-DFlyBSD-LABEL: test_sibling_call_empty_frame:1826; X86-DFlyBSD: # %bb.0:1827; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp1828; X86-DFlyBSD-NEXT: ja callee@PLT # TAILCALL1829; X86-DFlyBSD-NEXT: # %bb.1:1830; X86-DFlyBSD-NEXT: pushl $41831; X86-DFlyBSD-NEXT: pushl $01832; X86-DFlyBSD-NEXT: calll __morestack1833; X86-DFlyBSD-NEXT: retl1834; X86-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL1835;1836; X64-DFlyBSD-LABEL: test_sibling_call_empty_frame:1837; X64-DFlyBSD: # %bb.0:1838; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp1839; X64-DFlyBSD-NEXT: ja callee@PLT # TAILCALL1840; X64-DFlyBSD-NEXT: # %bb.1:1841; X64-DFlyBSD-NEXT: movl $0, %r10d1842; X64-DFlyBSD-NEXT: movl $0, %r11d1843; X64-DFlyBSD-NEXT: callq __morestack1844; X64-DFlyBSD-NEXT: retq1845; X64-DFlyBSD-NEXT: jmp callee@PLT # TAILCALL1846;1847; X64-MinGW-LABEL: test_sibling_call_empty_frame:1848; X64-MinGW: # %bb.0:1849; X64-MinGW-NEXT: cmpq %gs:40, %rsp1850; X64-MinGW-NEXT: ja callee # TAILCALL1851; X64-MinGW-NEXT: # %bb.1:1852; X64-MinGW-NEXT: movl $0, %r10d1853; X64-MinGW-NEXT: movl $32, %r11d1854; X64-MinGW-NEXT: callq __morestack1855; X64-MinGW-NEXT: retq1856; X64-MinGW-NEXT: jmp callee # TAILCALL1857 %call = tail call i32 @callee(i32 %x) #01858 ret i32 %call1859}1860 1861; Test that unused nested argument doesn't need saving/restoring.1862 1863define i32 @test_nested_unused(ptr nest %unused) #0 {1864; X86-Linux-LABEL: test_nested_unused:1865; X86-Linux: # %bb.0:1866; X86-Linux-NEXT: cmpl %gs:48, %esp1867; X86-Linux-NEXT: jbe .LBB9_11868; X86-Linux-NEXT: .LBB9_2:1869; X86-Linux-NEXT: subl $52, %esp1870; X86-Linux-NEXT: .cfi_adjust_cfa_offset 521871; X86-Linux-NEXT: leal {{[0-9]+}}(%esp), %eax1872; X86-Linux-NEXT: pushl $101873; X86-Linux-NEXT: .cfi_adjust_cfa_offset 41874; X86-Linux-NEXT: pushl %eax1875; X86-Linux-NEXT: .cfi_adjust_cfa_offset 41876; X86-Linux-NEXT: calll dummy_use@PLT1877; X86-Linux-NEXT: addl $16, %esp1878; X86-Linux-NEXT: .cfi_adjust_cfa_offset -161879; X86-Linux-NEXT: movl $123, %eax1880; X86-Linux-NEXT: addl $44, %esp1881; X86-Linux-NEXT: .cfi_def_cfa_offset 41882; X86-Linux-NEXT: retl1883; X86-Linux-NEXT: .LBB9_1:1884; X86-Linux-NEXT: pushl $01885; X86-Linux-NEXT: pushl $441886; X86-Linux-NEXT: calll __morestack1887; X86-Linux-NEXT: retl1888; X86-Linux-NEXT: jmp .LBB9_21889;1890; X64-Linux-LABEL: test_nested_unused:1891; X64-Linux: # %bb.0:1892; X64-Linux-NEXT: cmpq %fs:112, %rsp1893; X64-Linux-NEXT: jbe .LBB9_11894; X64-Linux-NEXT: .LBB9_2:1895; X64-Linux-NEXT: subq $40, %rsp1896; X64-Linux-NEXT: .cfi_def_cfa_offset 481897; X64-Linux-NEXT: movq %rsp, %rdi1898; X64-Linux-NEXT: movl $10, %esi1899; X64-Linux-NEXT: callq dummy_use@PLT1900; X64-Linux-NEXT: movl $123, %eax1901; X64-Linux-NEXT: addq $40, %rsp1902; X64-Linux-NEXT: .cfi_def_cfa_offset 81903; X64-Linux-NEXT: retq1904; X64-Linux-NEXT: .LBB9_1:1905; X64-Linux-NEXT: movl $40, %r10d1906; X64-Linux-NEXT: movl $0, %r11d1907; X64-Linux-NEXT: callq __morestack1908; X64-Linux-NEXT: retq1909; X64-Linux-NEXT: jmp .LBB9_21910;1911; X64-Linux-Large-LABEL: test_nested_unused:1912; X64-Linux-Large: # %bb.0:1913; X64-Linux-Large-NEXT: cmpq %fs:112, %rsp1914; X64-Linux-Large-NEXT: jbe .LBB9_11915; X64-Linux-Large-NEXT: .LBB9_2:1916; X64-Linux-Large-NEXT: subq $40, %rsp1917; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 481918; X64-Linux-Large-NEXT: movabsq $dummy_use, %rax1919; X64-Linux-Large-NEXT: movq %rsp, %rdi1920; X64-Linux-Large-NEXT: movl $10, %esi1921; X64-Linux-Large-NEXT: callq *%rax1922; X64-Linux-Large-NEXT: movl $123, %eax1923; X64-Linux-Large-NEXT: addq $40, %rsp1924; X64-Linux-Large-NEXT: .cfi_def_cfa_offset 81925; X64-Linux-Large-NEXT: retq1926; X64-Linux-Large-NEXT: .LBB9_1:1927; X64-Linux-Large-NEXT: movl $40, %r10d1928; X64-Linux-Large-NEXT: movl $0, %r11d1929; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip)1930; X64-Linux-Large-NEXT: retq1931; X64-Linux-Large-NEXT: jmp .LBB9_21932;1933; X32ABI-LABEL: test_nested_unused:1934; X32ABI: # %bb.0:1935; X32ABI-NEXT: cmpl %fs:64, %esp1936; X32ABI-NEXT: jbe .LBB9_11937; X32ABI-NEXT: .LBB9_2:1938; X32ABI-NEXT: subl $40, %esp1939; X32ABI-NEXT: .cfi_def_cfa_offset 481940; X32ABI-NEXT: movl %esp, %edi1941; X32ABI-NEXT: movl $10, %esi1942; X32ABI-NEXT: callq dummy_use@PLT1943; X32ABI-NEXT: movl $123, %eax1944; X32ABI-NEXT: addl $40, %esp1945; X32ABI-NEXT: .cfi_def_cfa_offset 81946; X32ABI-NEXT: retq1947; X32ABI-NEXT: .LBB9_1:1948; X32ABI-NEXT: movl $40, %r10d1949; X32ABI-NEXT: movl $0, %r11d1950; X32ABI-NEXT: callq __morestack1951; X32ABI-NEXT: retq1952; X32ABI-NEXT: jmp .LBB9_21953;1954; X86-Darwin-LABEL: test_nested_unused:1955; X86-Darwin: ## %bb.0:1956; X86-Darwin-NEXT: movl $432, %ecx ## imm = 0x1B01957; X86-Darwin-NEXT: cmpl %gs:(%ecx), %esp1958; X86-Darwin-NEXT: jbe LBB9_11959; X86-Darwin-NEXT: LBB9_2:1960; X86-Darwin-NEXT: subl $60, %esp1961; X86-Darwin-NEXT: .cfi_def_cfa_offset 641962; X86-Darwin-NEXT: leal {{[0-9]+}}(%esp), %eax1963; X86-Darwin-NEXT: movl %eax, (%esp)1964; X86-Darwin-NEXT: movl $10, {{[0-9]+}}(%esp)1965; X86-Darwin-NEXT: calll _dummy_use1966; X86-Darwin-NEXT: movl $123, %eax1967; X86-Darwin-NEXT: addl $60, %esp1968; X86-Darwin-NEXT: retl1969; X86-Darwin-NEXT: LBB9_1:1970; X86-Darwin-NEXT: pushl $01971; X86-Darwin-NEXT: pushl $601972; X86-Darwin-NEXT: calll ___morestack1973; X86-Darwin-NEXT: retl1974; X86-Darwin-NEXT: jmp LBB9_21975;1976; X64-Darwin-LABEL: test_nested_unused:1977; X64-Darwin: ## %bb.0:1978; X64-Darwin-NEXT: cmpq %gs:816, %rsp1979; X64-Darwin-NEXT: jbe LBB9_11980; X64-Darwin-NEXT: LBB9_2:1981; X64-Darwin-NEXT: subq $40, %rsp1982; X64-Darwin-NEXT: .cfi_def_cfa_offset 481983; X64-Darwin-NEXT: movq %rsp, %rdi1984; X64-Darwin-NEXT: movl $10, %esi1985; X64-Darwin-NEXT: callq _dummy_use1986; X64-Darwin-NEXT: movl $123, %eax1987; X64-Darwin-NEXT: addq $40, %rsp1988; X64-Darwin-NEXT: retq1989; X64-Darwin-NEXT: LBB9_1:1990; X64-Darwin-NEXT: movl $40, %r10d1991; X64-Darwin-NEXT: movl $0, %r11d1992; X64-Darwin-NEXT: callq ___morestack1993; X64-Darwin-NEXT: retq1994; X64-Darwin-NEXT: jmp LBB9_21995;1996; X86-MinGW-LABEL: test_nested_unused:1997; X86-MinGW: # %bb.0:1998; X86-MinGW-NEXT: cmpl %fs:20, %esp1999; X86-MinGW-NEXT: jbe LBB9_12000; X86-MinGW-NEXT: LBB9_2:2001; X86-MinGW-NEXT: subl $40, %esp2002; X86-MinGW-NEXT: .cfi_def_cfa_offset 442003; X86-MinGW-NEXT: movl %esp, %eax2004; X86-MinGW-NEXT: pushl $102005; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 42006; X86-MinGW-NEXT: pushl %eax2007; X86-MinGW-NEXT: .cfi_adjust_cfa_offset 42008; X86-MinGW-NEXT: calll _dummy_use2009; X86-MinGW-NEXT: addl $8, %esp2010; X86-MinGW-NEXT: .cfi_adjust_cfa_offset -82011; X86-MinGW-NEXT: movl $123, %eax2012; X86-MinGW-NEXT: addl $40, %esp2013; X86-MinGW-NEXT: retl2014; X86-MinGW-NEXT: LBB9_1:2015; X86-MinGW-NEXT: .cfi_def_cfa_offset 42016; X86-MinGW-NEXT: pushl $02017; X86-MinGW-NEXT: pushl $402018; X86-MinGW-NEXT: calll ___morestack2019; X86-MinGW-NEXT: retl2020; X86-MinGW-NEXT: jmp LBB9_22021;2022; X64-FreeBSD-LABEL: test_nested_unused:2023; X64-FreeBSD: # %bb.0:2024; X64-FreeBSD-NEXT: cmpq %fs:24, %rsp2025; X64-FreeBSD-NEXT: jbe .LBB9_12026; X64-FreeBSD-NEXT: .LBB9_2:2027; X64-FreeBSD-NEXT: subq $40, %rsp2028; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 482029; X64-FreeBSD-NEXT: movq %rsp, %rdi2030; X64-FreeBSD-NEXT: movl $10, %esi2031; X64-FreeBSD-NEXT: callq dummy_use@PLT2032; X64-FreeBSD-NEXT: movl $123, %eax2033; X64-FreeBSD-NEXT: addq $40, %rsp2034; X64-FreeBSD-NEXT: .cfi_def_cfa_offset 82035; X64-FreeBSD-NEXT: retq2036; X64-FreeBSD-NEXT: .LBB9_1:2037; X64-FreeBSD-NEXT: movl $40, %r10d2038; X64-FreeBSD-NEXT: movl $0, %r11d2039; X64-FreeBSD-NEXT: callq __morestack2040; X64-FreeBSD-NEXT: retq2041; X64-FreeBSD-NEXT: jmp .LBB9_22042;2043; X86-DFlyBSD-LABEL: test_nested_unused:2044; X86-DFlyBSD: # %bb.0:2045; X86-DFlyBSD-NEXT: cmpl %fs:16, %esp2046; X86-DFlyBSD-NEXT: jbe .LBB9_12047; X86-DFlyBSD-NEXT: .LBB9_2:2048; X86-DFlyBSD-NEXT: subl $40, %esp2049; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 442050; X86-DFlyBSD-NEXT: movl %esp, %eax2051; X86-DFlyBSD-NEXT: pushl $102052; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 42053; X86-DFlyBSD-NEXT: pushl %eax2054; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset 42055; X86-DFlyBSD-NEXT: calll dummy_use@PLT2056; X86-DFlyBSD-NEXT: addl $8, %esp2057; X86-DFlyBSD-NEXT: .cfi_adjust_cfa_offset -82058; X86-DFlyBSD-NEXT: movl $123, %eax2059; X86-DFlyBSD-NEXT: addl $40, %esp2060; X86-DFlyBSD-NEXT: .cfi_def_cfa_offset 42061; X86-DFlyBSD-NEXT: retl2062; X86-DFlyBSD-NEXT: .LBB9_1:2063; X86-DFlyBSD-NEXT: pushl $02064; X86-DFlyBSD-NEXT: pushl $402065; X86-DFlyBSD-NEXT: calll __morestack2066; X86-DFlyBSD-NEXT: retl2067; X86-DFlyBSD-NEXT: jmp .LBB9_22068;2069; X64-DFlyBSD-LABEL: test_nested_unused:2070; X64-DFlyBSD: # %bb.0:2071; X64-DFlyBSD-NEXT: cmpq %fs:32, %rsp2072; X64-DFlyBSD-NEXT: jbe .LBB9_12073; X64-DFlyBSD-NEXT: .LBB9_2:2074; X64-DFlyBSD-NEXT: subq $40, %rsp2075; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 482076; X64-DFlyBSD-NEXT: movq %rsp, %rdi2077; X64-DFlyBSD-NEXT: movl $10, %esi2078; X64-DFlyBSD-NEXT: callq dummy_use@PLT2079; X64-DFlyBSD-NEXT: movl $123, %eax2080; X64-DFlyBSD-NEXT: addq $40, %rsp2081; X64-DFlyBSD-NEXT: .cfi_def_cfa_offset 82082; X64-DFlyBSD-NEXT: retq2083; X64-DFlyBSD-NEXT: .LBB9_1:2084; X64-DFlyBSD-NEXT: movl $40, %r10d2085; X64-DFlyBSD-NEXT: movl $0, %r11d2086; X64-DFlyBSD-NEXT: callq __morestack2087; X64-DFlyBSD-NEXT: retq2088; X64-DFlyBSD-NEXT: jmp .LBB9_22089;2090; X64-MinGW-LABEL: test_nested_unused:2091; X64-MinGW: # %bb.0:2092; X64-MinGW-NEXT: cmpq %gs:40, %rsp2093; X64-MinGW-NEXT: jbe .LBB9_12094; X64-MinGW-NEXT: .LBB9_2:2095; X64-MinGW-NEXT: subq $72, %rsp2096; X64-MinGW-NEXT: .seh_stackalloc 722097; X64-MinGW-NEXT: .seh_endprologue2098; X64-MinGW-NEXT: leaq {{[0-9]+}}(%rsp), %rcx2099; X64-MinGW-NEXT: movl $10, %edx2100; X64-MinGW-NEXT: callq dummy_use2101; X64-MinGW-NEXT: movl $123, %eax2102; X64-MinGW-NEXT: .seh_startepilogue2103; X64-MinGW-NEXT: addq $72, %rsp2104; X64-MinGW-NEXT: .seh_endepilogue2105; X64-MinGW-NEXT: retq2106; X64-MinGW-NEXT: .LBB9_1:2107; X64-MinGW-NEXT: movl $72, %r10d2108; X64-MinGW-NEXT: movl $32, %r11d2109; X64-MinGW-NEXT: callq __morestack2110; X64-MinGW-NEXT: retq2111; X64-MinGW-NEXT: jmp .LBB9_22112; X64-MinGW-NEXT: .seh_endproc2113 %mem = alloca i32, i32 102114 call void @dummy_use (ptr %mem, i32 10)2115 ret i32 1232116}2117 2118attributes #0 = { "split-stack" }2119 2120; X64-Linux-Large: .section ".note.GNU-split-stack","",@progbits2121; X64-Linux-Large-NEXT: .section ".note.GNU-no-split-stack","",@progbits2122; X64-Linux-Large-NEXT: .section ".note.GNU-stack","",@progbits2123; X64-Linux-Large-NEXT: .rodata2124; X64-Linux-Large-NEXT: __morestack_addr:2125; X64-Linux-Large-NEXT: .quad __morestack2126 2127; X86-Linux: .section ".note.GNU-split-stack","",@progbits2128; X86-Linux: .section ".note.GNU-no-split-stack","",@progbits2129 2130; X64-Linux: .section ".note.GNU-split-stack","",@progbits2131; X64-Linux: .section ".note.GNU-no-split-stack","",@progbits2132 2133; X64-FreeBSD: .section ".note.GNU-split-stack","",@progbits2134; X64-FreeBSD: .section ".note.GNU-no-split-stack","",@progbits2135 2136; X86-DFlyBSD: .section ".note.GNU-split-stack","",@progbits2137; X86-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits2138 2139; X64-DFlyBSD: .section ".note.GNU-split-stack","",@progbits2140; X64-DFlyBSD: .section ".note.GNU-no-split-stack","",@progbits2141