1; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X32-Linux 2; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux 3; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -code-model=large -verify-machineinstrs | FileCheck %s -check-prefix=X64-Linux-Large 4; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=X32ABI 5; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X32-Darwin 6; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -verify-machineinstrs | FileCheck %s -check-prefix=X64-Darwin 7; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X32-MinGW 8; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -verify-machineinstrs | FileCheck %s -check-prefix=X64-FreeBSD 9; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X32-DFlyBSD 10; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -verify-machineinstrs | FileCheck %s -check-prefix=X64-DFlyBSD 11; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -verify-machineinstrs | FileCheck %s -check-prefix=X64-MinGW 12 13; We used to crash with filetype=obj 14; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -filetype=obj -o /dev/null 15; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj -o /dev/null 16; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj -o /dev/null 17; RUN: llc < %s -mcpu=generic -mtriple=i686-darwin -filetype=obj -o /dev/null 18; RUN: llc < %s -mcpu=generic -mtriple=x86_64-darwin -filetype=obj -o /dev/null 19; RUN: llc < %s -mcpu=generic -mtriple=i686-mingw32 -filetype=obj -o /dev/null 20; RUN: llc < %s -mcpu=generic -mtriple=x86_64-freebsd -filetype=obj -o /dev/null 21; RUN: llc < %s -mcpu=generic -mtriple=i686-dragonfly -filetype=obj -o /dev/null 22; RUN: llc < %s -mcpu=generic -mtriple=x86_64-dragonfly -filetype=obj -o /dev/null 23; RUN: llc < %s -mcpu=generic -mtriple=x86_64-mingw32 -filetype=obj -o /dev/null 24 25; RUN: not llc < %s -mcpu=generic -mtriple=x86_64-solaris 2> %t.log 26; RUN: FileCheck %s -input-file=%t.log -check-prefix=X64-Solaris 27; RUN: not llc < %s -mcpu=generic -mtriple=i686-freebsd 2> %t.log 28; RUN: FileCheck %s -input-file=%t.log -check-prefix=X32-FreeBSD 29 30; X64-Solaris: Segmented stacks not supported on this platform 31; X32-FreeBSD: Segmented stacks not supported on FreeBSD i386 32 33; Just to prevent the alloca from being optimized away 34declare void @dummy_use(i32*, i32) 35 36define void @test_basic() #0 { 37 %mem = alloca i32, i32 10 38 call void @dummy_use (i32* %mem, i32 10) 39 ret void 40 41; X32-Linux-LABEL: test_basic: 42 43; X32-Linux: cmpl %gs:48, %esp 44; X32-Linux-NEXT: ja .LBB0_2 45 46; X32-Linux: pushl $0 47; X32-Linux-NEXT: pushl $44 48; X32-Linux-NEXT: calll __morestack 49; X32-Linux-NEXT: ret 50 51; X64-Linux-LABEL: test_basic: 52 53; X64-Linux: cmpq %fs:112, %rsp 54; X64-Linux-NEXT: ja .LBB0_2 55 56; X64-Linux: movabsq $40, %r10 57; X64-Linux-NEXT: movabsq $0, %r11 58; X64-Linux-NEXT: callq __morestack 59; X64-Linux-NEXT: ret 60 61; X64-Linux-Large-LABEL: test_basic: 62 63; X64-Linux-Large: cmpq %fs:112, %rsp 64; X64-Linux-Large-NEXT: ja .LBB0_2 65 66; X64-Linux-Large: movabsq $40, %r10 67; X64-Linux-Large-NEXT: movabsq $0, %r11 68; X64-Linux-Large-NEXT: callq *__morestack_addr(%rip) 69; X64-Linux-Large-NEXT: ret 70 71; X32ABI-LABEL: test_basic: 72 73; X32ABI: cmpl %fs:64, %esp 74; X32ABI-NEXT: ja .LBB0_2 75 76; X32ABI: movl $40, %r10d 77; X32ABI-NEXT: movl $0, %r11d 78; X32ABI-NEXT: callq __morestack 79; X32ABI-NEXT: ret 80 81; X32-Darwin-LABEL: test_basic: 82 83; X32-Darwin: movl $432, %ecx 84; X32-Darwin-NEXT: cmpl %gs:(%ecx), %esp 85; X32-Darwin-NEXT: ja LBB0_2 86 87; X32-Darwin: pushl $0 88; X32-Darwin-NEXT: pushl $60 89; X32-Darwin-NEXT: calll ___morestack 90; X32-Darwin-NEXT: ret 91 92; X64-Darwin-LABEL: test_basic: 93 94; X64-Darwin: cmpq %gs:816, %rsp 95; X64-Darwin-NEXT: ja LBB0_2 96 97; X64-Darwin: movabsq $40, %r10 98; X64-Darwin-NEXT: movabsq $0, %r11 99; X64-Darwin-NEXT: callq ___morestack 100; X64-Darwin-NEXT: ret 101 102; X32-MinGW-LABEL: test_basic: 103 104; X32-MinGW: cmpl %fs:20, %esp 105; X32-MinGW-NEXT: ja LBB0_2 106 107; X32-MinGW: pushl $0 108; X32-MinGW-NEXT: pushl $40 109; X32-MinGW-NEXT: calll ___morestack 110; X32-MinGW-NEXT: ret 111 112; X64-MinGW-LABEL: test_basic: 113 114; X64-MinGW: cmpq %gs:40, %rsp 115; X64-MinGW-NEXT: ja .LBB0_2 116 117; X64-MinGW: movabsq $72, %r10 118; X64-MinGW-NEXT: movabsq $32, %r11 119; X64-MinGW-NEXT: callq __morestack 120; X64-MinGW-NEXT: retq 121 122; X64-FreeBSD-LABEL: test_basic: 123 124; X64-FreeBSD: cmpq %fs:24, %rsp 125; X64-FreeBSD-NEXT: ja .LBB0_2 126 127; X64-FreeBSD: movabsq $40, %r10 128; X64-FreeBSD-NEXT: movabsq $0, %r11 129; X64-FreeBSD-NEXT: callq __morestack 130; X64-FreeBSD-NEXT: ret 131 132; X32-DFlyBSD-LABEL: test_basic: 133 134; X32-DFlyBSD: cmpl %fs:16, %esp 135; X32-DFlyBSD-NEXT: ja .LBB0_2 136 137; X32-DFlyBSD: pushl $0 138; X32-DFlyBSD-NEXT: pushl $40 139; X32-DFlyBSD-NEXT: calll __morestack 140; X32-DFlyBSD-NEXT: ret 141 142; X64-DFlyBSD-LABEL: test_basic: 143 144; X64-DFlyBSD: cmpq %fs:32, %rsp 145; X64-DFlyBSD-NEXT: ja .LBB0_2 146 147; X64-DFlyBSD: movabsq $40, %r10 148; X64-DFlyBSD-NEXT: movabsq $0, %r11 149; X64-DFlyBSD-NEXT: callq __morestack 150; X64-DFlyBSD-NEXT: ret 151 152} 153 154define i32 @test_nested(i32 * nest %closure, i32 %other) #0 { 155 %addend = load i32 , i32 * %closure 156 %result = add i32 %other, %addend 157 %mem = alloca i32, i32 10 158 call void @dummy_use (i32* %mem, i32 10) 159 ret i32 %result 160 161; X32-Linux: cmpl %gs:48, %esp 162; X32-Linux-NEXT: ja .LBB1_2 163 164; X32-Linux: pushl $4 165; X32-Linux-NEXT: pushl $44 166; X32-Linux-NEXT: calll __morestack 167; X32-Linux-NEXT: ret 168 169; X64-Linux: cmpq %fs:112, %rsp 170; X64-Linux-NEXT: ja .LBB1_2 171 172; X64-Linux: movq %r10, %rax 173; X64-Linux-NEXT: movabsq $56, %r10 174; X64-Linux-NEXT: movabsq $0, %r11 175; X64-Linux-NEXT: callq __morestack 176; X64-Linux-NEXT: ret 177; X64-Linux-NEXT: movq %rax, %r10 178 179; X32ABI: cmpl %fs:64, %esp 180; X32ABI-NEXT: ja .LBB1_2 181 182; X32ABI: movl %r10d, %eax 183; X32ABI-NEXT: movl $56, %r10d 184; X32ABI-NEXT: movl $0, %r11d 185; X32ABI-NEXT: callq __morestack 186; X32ABI-NEXT: ret 187; X32ABI-NEXT: movq %rax, %r10 188 189; X32-Darwin: movl $432, %edx 190; X32-Darwin-NEXT: cmpl %gs:(%edx), %esp 191; X32-Darwin-NEXT: ja LBB1_2 192 193; X32-Darwin: pushl $4 194; X32-Darwin-NEXT: pushl $60 195; X32-Darwin-NEXT: calll ___morestack 196; X32-Darwin-NEXT: ret 197 198; X64-Darwin: cmpq %gs:816, %rsp 199; X64-Darwin-NEXT: ja LBB1_2 200 201; X64-Darwin: movq %r10, %rax 202; X64-Darwin-NEXT: movabsq $56, %r10 203; X64-Darwin-NEXT: movabsq $0, %r11 204; X64-Darwin-NEXT: callq ___morestack 205; X64-Darwin-NEXT: ret 206; X64-Darwin-NEXT: movq %rax, %r10 207 208; X32-MinGW: cmpl %fs:20, %esp 209; X32-MinGW-NEXT: ja LBB1_2 210 211; X32-MinGW: pushl $4 212; X32-MinGW-NEXT: pushl $44 213; X32-MinGW-NEXT: calll ___morestack 214; X32-MinGW-NEXT: ret 215 216; X64-MinGW-LABEL: test_nested: 217; X64-MinGW: cmpq %gs:40, %rsp 218; X64-MinGW-NEXT: ja .LBB1_2 219 220; X64-MinGW: movq %r10, %rax 221; X64-MinGW-NEXT: movabsq $88, %r10 222; X64-MinGW-NEXT: movabsq $32, %r11 223; X64-MinGW-NEXT: callq __morestack 224; X64-MinGW-NEXT: retq 225; X64-MinGW-NEXT: movq %rax, %r10 226 227; X64-FreeBSD: cmpq %fs:24, %rsp 228; X64-FreeBSD-NEXT: ja .LBB1_2 229 230; X64-FreeBSD: movq %r10, %rax 231; X64-FreeBSD-NEXT: movabsq $56, %r10 232; X64-FreeBSD-NEXT: movabsq $0, %r11 233; X64-FreeBSD-NEXT: callq __morestack 234; X64-FreeBSD-NEXT: ret 235; X64-FreeBSD-NEXT: movq %rax, %r10 236 237; X32-DFlyBSD: cmpl %fs:16, %esp 238; X32-DFlyBSD-NEXT: ja .LBB1_2 239 240; X32-DFlyBSD: pushl $4 241; X32-DFlyBSD-NEXT: pushl $44 242; X32-DFlyBSD-NEXT: calll __morestack 243; X32-DFlyBSD-NEXT: ret 244 245; X64-DFlyBSD: cmpq %fs:32, %rsp 246; X64-DFlyBSD-NEXT: ja .LBB1_2 247 248; X64-DFlyBSD: movq %r10, %rax 249; X64-DFlyBSD-NEXT: movabsq $56, %r10 250; X64-DFlyBSD-NEXT: movabsq $0, %r11 251; X64-DFlyBSD-NEXT: callq __morestack 252; X64-DFlyBSD-NEXT: ret 253; X64-DFlyBSD-NEXT: movq %rax, %r10 254 255} 256 257define void @test_large() #0 { 258 %mem = alloca i32, i32 10000 259 call void @dummy_use (i32* %mem, i32 0) 260 ret void 261 262; X32-Linux: leal -40012(%esp), %ecx 263; X32-Linux-NEXT: cmpl %gs:48, %ecx 264; X32-Linux-NEXT: ja .LBB2_2 265 266; X32-Linux: pushl $0 267; X32-Linux-NEXT: pushl $40012 268; X32-Linux-NEXT: calll __morestack 269; X32-Linux-NEXT: ret 270 271; X64-Linux: leaq -40008(%rsp), %r11 272; X64-Linux-NEXT: cmpq %fs:112, %r11 273; X64-Linux-NEXT: ja .LBB2_2 274 275; X64-Linux: movabsq $40008, %r10 276; X64-Linux-NEXT: movabsq $0, %r11 277; X64-Linux-NEXT: callq __morestack 278; X64-Linux-NEXT: ret 279 280; X32ABI: leal -40008(%rsp), %r11d 281; X32ABI-NEXT: cmpl %fs:64, %r11d 282; X32ABI-NEXT: ja .LBB2_2 283 284; X32ABI: movl $40008, %r10d 285; X32ABI-NEXT: movl $0, %r11d 286; X32ABI-NEXT: callq __morestack 287; X32ABI-NEXT: ret 288 289; X32-Darwin: leal -40012(%esp), %ecx 290; X32-Darwin-NEXT: movl $432, %eax 291; X32-Darwin-NEXT: cmpl %gs:(%eax), %ecx 292; X32-Darwin-NEXT: ja LBB2_2 293 294; X32-Darwin: pushl $0 295; X32-Darwin-NEXT: pushl $40012 296; X32-Darwin-NEXT: calll ___morestack 297; X32-Darwin-NEXT: ret 298 299; X64-Darwin: leaq -40008(%rsp), %r11 300; X64-Darwin-NEXT: cmpq %gs:816, %r11 301; X64-Darwin-NEXT: ja LBB2_2 302 303; X64-Darwin: movabsq $40008, %r10 304; X64-Darwin-NEXT: movabsq $0, %r11 305; X64-Darwin-NEXT: callq ___morestack 306; X64-Darwin-NEXT: ret 307 308; X32-MinGW: leal -40000(%esp), %ecx 309; X32-MinGW-NEXT: cmpl %fs:20, %ecx 310; X32-MinGW-NEXT: ja LBB2_2 311 312; X32-MinGW: pushl $0 313; X32-MinGW-NEXT: pushl $40000 314; X32-MinGW-NEXT: calll ___morestack 315; X32-MinGW-NEXT: ret 316 317; X64-MinGW-LABEL: test_large: 318; X64-MinGW: leaq -40040(%rsp), %r11 319; X64-MinGW-NEXT: cmpq %gs:40, %r11 320; X64-MinGW-NEXT: ja .LBB2_2 321 322; X64-MinGW: movabsq $40040, %r10 323; X64-MinGW-NEXT: movabsq $32, %r11 324; X64-MinGW-NEXT: callq __morestack 325; X64-MinGW-NEXT: retq 326 327; X64-FreeBSD: leaq -40008(%rsp), %r11 328; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 329; X64-FreeBSD-NEXT: ja .LBB2_2 330 331; X64-FreeBSD: movabsq $40008, %r10 332; X64-FreeBSD-NEXT: movabsq $0, %r11 333; X64-FreeBSD-NEXT: callq __morestack 334; X64-FreeBSD-NEXT: ret 335 336; X32-DFlyBSD: leal -40000(%esp), %ecx 337; X32-DFlyBSD-NEXT: cmpl %fs:16, %ecx 338; X32-DFlyBSD-NEXT: ja .LBB2_2 339 340; X32-DFlyBSD: pushl $0 341; X32-DFlyBSD-NEXT: pushl $40000 342; X32-DFlyBSD-NEXT: calll __morestack 343; X32-DFlyBSD-NEXT: ret 344 345; X64-DFlyBSD: leaq -40008(%rsp), %r11 346; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 347; X64-DFlyBSD-NEXT: ja .LBB2_2 348 349; X64-DFlyBSD: movabsq $40008, %r10 350; X64-DFlyBSD-NEXT: movabsq $0, %r11 351; X64-DFlyBSD-NEXT: callq __morestack 352; X64-DFlyBSD-NEXT: ret 353 354} 355 356define fastcc void @test_fastcc() #0 { 357 %mem = alloca i32, i32 10 358 call void @dummy_use (i32* %mem, i32 10) 359 ret void 360 361; X32-Linux-LABEL: test_fastcc: 362 363; X32-Linux: cmpl %gs:48, %esp 364; X32-Linux-NEXT: ja .LBB3_2 365 366; X32-Linux: pushl $0 367; X32-Linux-NEXT: pushl $44 368; X32-Linux-NEXT: calll __morestack 369; X32-Linux-NEXT: ret 370 371; X64-Linux-LABEL: test_fastcc: 372 373; X64-Linux: cmpq %fs:112, %rsp 374; X64-Linux-NEXT: ja .LBB3_2 375 376; X64-Linux: movabsq $40, %r10 377; X64-Linux-NEXT: movabsq $0, %r11 378; X64-Linux-NEXT: callq __morestack 379; X64-Linux-NEXT: ret 380 381; X32ABI-LABEL: test_fastcc: 382 383; X32ABI: cmpl %fs:64, %esp 384; X32ABI-NEXT: ja .LBB3_2 385 386; X32ABI: movl $40, %r10d 387; X32ABI-NEXT: movl $0, %r11d 388; X32ABI-NEXT: callq __morestack 389; X32ABI-NEXT: ret 390 391; X32-Darwin-LABEL: test_fastcc: 392 393; X32-Darwin: movl $432, %eax 394; X32-Darwin-NEXT: cmpl %gs:(%eax), %esp 395; X32-Darwin-NEXT: ja LBB3_2 396 397; X32-Darwin: pushl $0 398; X32-Darwin-NEXT: pushl $60 399; X32-Darwin-NEXT: calll ___morestack 400; X32-Darwin-NEXT: ret 401 402; X64-Darwin-LABEL: test_fastcc: 403 404; X64-Darwin: cmpq %gs:816, %rsp 405; X64-Darwin-NEXT: ja LBB3_2 406 407; X64-Darwin: movabsq $40, %r10 408; X64-Darwin-NEXT: movabsq $0, %r11 409; X64-Darwin-NEXT: callq ___morestack 410; X64-Darwin-NEXT: ret 411 412; X32-MinGW-LABEL: test_fastcc: 413 414; X32-MinGW: cmpl %fs:20, %esp 415; X32-MinGW-NEXT: ja LBB3_2 416 417; X32-MinGW: pushl $0 418; X32-MinGW-NEXT: pushl $40 419; X32-MinGW-NEXT: calll ___morestack 420; X32-MinGW-NEXT: ret 421 422; X64-MinGW-LABEL: test_fastcc: 423 424; X64-MinGW: cmpq %gs:40, %rsp 425; X64-MinGW-NEXT: ja .LBB3_2 426 427; X64-MinGW: movabsq $72, %r10 428; X64-MinGW-NEXT: movabsq $32, %r11 429; X64-MinGW-NEXT: callq __morestack 430; X64-MinGW-NEXT: retq 431 432; X64-FreeBSD-LABEL: test_fastcc: 433 434; X64-FreeBSD: cmpq %fs:24, %rsp 435; X64-FreeBSD-NEXT: ja .LBB3_2 436 437; X64-FreeBSD: movabsq $40, %r10 438; X64-FreeBSD-NEXT: movabsq $0, %r11 439; X64-FreeBSD-NEXT: callq __morestack 440; X64-FreeBSD-NEXT: ret 441 442; X32-DFlyBSD-LABEL: test_fastcc: 443 444; X32-DFlyBSD: cmpl %fs:16, %esp 445; X32-DFlyBSD-NEXT: ja .LBB3_2 446 447; X32-DFlyBSD: pushl $0 448; X32-DFlyBSD-NEXT: pushl $40 449; X32-DFlyBSD-NEXT: calll __morestack 450; X32-DFlyBSD-NEXT: ret 451 452; X64-DFlyBSD-LABEL: test_fastcc: 453 454; X64-DFlyBSD: cmpq %fs:32, %rsp 455; X64-DFlyBSD-NEXT: ja .LBB3_2 456 457; X64-DFlyBSD: movabsq $40, %r10 458; X64-DFlyBSD-NEXT: movabsq $0, %r11 459; X64-DFlyBSD-NEXT: callq __morestack 460; X64-DFlyBSD-NEXT: ret 461 462} 463 464define fastcc void @test_fastcc_large() #0 { 465 %mem = alloca i32, i32 10000 466 call void @dummy_use (i32* %mem, i32 0) 467 ret void 468 469; X32-Linux-LABEL: test_fastcc_large: 470 471; X32-Linux: leal -40012(%esp), %eax 472; X32-Linux-NEXT: cmpl %gs:48, %eax 473; X32-Linux-NEXT: ja .LBB4_2 474 475; X32-Linux: pushl $0 476; X32-Linux-NEXT: pushl $40012 477; X32-Linux-NEXT: calll __morestack 478; X32-Linux-NEXT: ret 479 480; X64-Linux-LABEL: test_fastcc_large: 481 482; X64-Linux: leaq -40008(%rsp), %r11 483; X64-Linux-NEXT: cmpq %fs:112, %r11 484; X64-Linux-NEXT: ja .LBB4_2 485 486; X64-Linux: movabsq $40008, %r10 487; X64-Linux-NEXT: movabsq $0, %r11 488; X64-Linux-NEXT: callq __morestack 489; X64-Linux-NEXT: ret 490 491; X32ABI-LABEL: test_fastcc_large: 492 493; X32ABI: leal -40008(%rsp), %r11d 494; X32ABI-NEXT: cmpl %fs:64, %r11d 495; X32ABI-NEXT: ja .LBB4_2 496 497; X32ABI: movl $40008, %r10d 498; X32ABI-NEXT: movl $0, %r11d 499; X32ABI-NEXT: callq __morestack 500; X32ABI-NEXT: ret 501 502; X32-Darwin-LABEL: test_fastcc_large: 503 504; X32-Darwin: leal -40012(%esp), %eax 505; X32-Darwin-NEXT: movl $432, %ecx 506; X32-Darwin-NEXT: cmpl %gs:(%ecx), %eax 507; X32-Darwin-NEXT: ja LBB4_2 508 509; X32-Darwin: pushl $0 510; X32-Darwin-NEXT: pushl $40012 511; X32-Darwin-NEXT: calll ___morestack 512; X32-Darwin-NEXT: ret 513 514; X64-Darwin-LABEL: test_fastcc_large: 515 516; X64-Darwin: leaq -40008(%rsp), %r11 517; X64-Darwin-NEXT: cmpq %gs:816, %r11 518; X64-Darwin-NEXT: ja LBB4_2 519 520; X64-Darwin: movabsq $40008, %r10 521; X64-Darwin-NEXT: movabsq $0, %r11 522; X64-Darwin-NEXT: callq ___morestack 523; X64-Darwin-NEXT: ret 524 525; X32-MinGW-LABEL: test_fastcc_large: 526 527; X32-MinGW: leal -40000(%esp), %eax 528; X32-MinGW-NEXT: cmpl %fs:20, %eax 529; X32-MinGW-NEXT: ja LBB4_2 530 531; X32-MinGW: pushl $0 532; X32-MinGW-NEXT: pushl $40000 533; X32-MinGW-NEXT: calll ___morestack 534; X32-MinGW-NEXT: ret 535 536; X64-MinGW-LABEL: test_fastcc_large: 537 538; X64-MinGW: leaq -40040(%rsp), %r11 539; X64-MinGW-NEXT: cmpq %gs:40, %r11 540; X64-MinGW-NEXT: ja .LBB4_2 541 542; X64-MinGW: movabsq $40040, %r10 543; X64-MinGW-NEXT: movabsq $32, %r11 544; X64-MinGW-NEXT: callq __morestack 545; X64-MinGW-NEXT: retq 546 547; X64-FreeBSD-LABEL: test_fastcc_large: 548 549; X64-FreeBSD: leaq -40008(%rsp), %r11 550; X64-FreeBSD-NEXT: cmpq %fs:24, %r11 551; X64-FreeBSD-NEXT: ja .LBB4_2 552 553; X64-FreeBSD: movabsq $40008, %r10 554; X64-FreeBSD-NEXT: movabsq $0, %r11 555; X64-FreeBSD-NEXT: callq __morestack 556; X64-FreeBSD-NEXT: ret 557 558; X32-DFlyBSD-LABEL: test_fastcc_large: 559 560; X32-DFlyBSD: leal -40000(%esp), %eax 561; X32-DFlyBSD-NEXT: cmpl %fs:16, %eax 562; X32-DFlyBSD-NEXT: ja .LBB4_2 563 564; X32-DFlyBSD: pushl $0 565; X32-DFlyBSD-NEXT: pushl $40000 566; X32-DFlyBSD-NEXT: calll __morestack 567; X32-DFlyBSD-NEXT: ret 568 569; X64-DFlyBSD-LABEL: test_fastcc_large: 570 571; X64-DFlyBSD: leaq -40008(%rsp), %r11 572; X64-DFlyBSD-NEXT: cmpq %fs:32, %r11 573; X64-DFlyBSD-NEXT: ja .LBB4_2 574 575; X64-DFlyBSD: movabsq $40008, %r10 576; X64-DFlyBSD-NEXT: movabsq $0, %r11 577; X64-DFlyBSD-NEXT: callq __morestack 578; X64-DFlyBSD-NEXT: ret 579 580} 581 582define fastcc void @test_fastcc_large_with_ecx_arg(i32 %a) #0 { 583 %mem = alloca i32, i32 10000 584 call void @dummy_use (i32* %mem, i32 %a) 585 ret void 586 587; This is testing that the Mac implementation preserves ecx 588 589; X32-Darwin-LABEL: test_fastcc_large_with_ecx_arg: 590 591; X32-Darwin: leal -40012(%esp), %eax 592; X32-Darwin-NEXT: pushl %ecx 593; X32-Darwin-NEXT: movl $432, %ecx 594; X32-Darwin-NEXT: cmpl %gs:(%ecx), %eax 595; X32-Darwin-NEXT: popl %ecx 596; X32-Darwin-NEXT: ja LBB5_2 597 598; X32-Darwin: pushl $0 599; X32-Darwin-NEXT: pushl $40012 600; X32-Darwin-NEXT: calll ___morestack 601; X32-Darwin-NEXT: ret 602 603} 604 605define void @test_nostack() #0 { 606 ret void 607 608; X32-Linux-LABEL: test_nostack: 609; X32-Linux-NOT: calll __morestack 610 611; X64-Linux-LABEL: test_nostack: 612; X32-Linux-NOT: callq __morestack 613 614; X32ABI-LABEL: test_nostack: 615; X32ABI-NOT: callq __morestack 616 617; X32-Darwin-LABEL: test_nostack: 618; X32-Darwin-NOT: calll __morestack 619 620; X64-Darwin-LABEL: test_nostack: 621; X64-Darwin-NOT: callq __morestack 622 623; X32-MinGW-LABEL: test_nostack: 624; X32-MinGW-NOT: calll __morestack 625 626; X64-MinGW-LABEL: test_nostack: 627; X64-MinGW-NOT: callq __morestack 628 629; X64-FreeBSD-LABEL: test_nostack: 630; X64-FreeBSD-NOT: callq __morestack 631 632; X32-DFlyBSD-LABEL: test_nostack: 633; X32-DFlyBSD-NOT: calll __morestack 634 635; X64-DFlyBSD-LABEL: test_nostack: 636; X64-DFlyBSD-NOT: callq __morestack 637} 638 639attributes #0 = { "split-stack" } 640 641; X64-Linux-Large: .rodata 642; X64-Linux-Large-NEXT: __morestack_addr: 643; X64-Linux-Large-NEXT: .quad __morestack 644