blob: e4e4483ff94911fef209bfb6bc4597dda1e150f8 [file] [log] [blame]
Anton Korobeynikova5a64552010-09-02 23:03:46 +00001; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s -check-prefix=WIN_X32
Anton Korobeynikovff856882010-10-03 22:02:38 +00002; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck %s -check-prefix=WIN_X64
Anton Korobeynikova5a64552010-09-02 23:03:46 +00003; RUN: llc < %s -mtriple=i686-pc-mingw32 | FileCheck %s -check-prefix=MINGW_X32
4; RUN: llc < %s -mtriple=x86_64-pc-mingw32 | FileCheck %s -check-prefix=MINGW_X64
5; RUN: llc < %s -mtriple=i386-pc-linux | FileCheck %s -check-prefix=LINUX
NAKAMURA Takumi521eb7c2011-03-24 07:07:00 +00006; RUN: llc < %s -mtriple=x86_64-pc-win32-macho | FileCheck %s -check-prefix=LINUX
Anton Korobeynikova5a64552010-09-02 23:03:46 +00007
8; Windows and mingw require a prologue helper routine if more than 4096 bytes area
9; allocated on the stack. Windows uses __chkstk and mingw uses __alloca. __alloca
10; and the 32-bit version of __chkstk will probe the stack and adjust the stack pointer.
11; The 64-bit version of __chkstk is only responsible for probing the stack. The 64-bit
12; prologue is responsible for adjusting the stack pointer.
13
14; Stack allocation >= 4096 bytes will require call to __chkstk in the Windows ABI.
15define i32 @main4k() nounwind {
16entry:
Chris Lattnerbd857252010-09-22 05:49:14 +000017; WIN_X32: calll __chkstk
Anton Korobeynikovff856882010-10-03 22:02:38 +000018; WIN_X64: callq __chkstk
Chris Lattnerbd857252010-09-22 05:49:14 +000019; MINGW_X32: calll __alloca
NAKAMURA Takumi521eb7c2011-03-24 07:07:00 +000020; MINGW_X64: callq ___chkstk
Anton Korobeynikova5a64552010-09-02 23:03:46 +000021; LINUX-NOT: call __chkstk
22 %array4096 = alloca [4096 x i8], align 16 ; <[4096 x i8]*> [#uses=0]
23 ret i32 0
24}
25
26; Make sure we don't call __chkstk or __alloca when we have less than a 4096 stack
27; allocation.
28define i32 @main128() nounwind {
29entry:
30; WIN_X32: # BB#0:
Chris Lattnerbd857252010-09-22 05:49:14 +000031; WIN_X32-NOT: calll __chkstk
Anton Korobeynikova5a64552010-09-02 23:03:46 +000032; WIN_X32: ret
33
34; WIN_X64: # BB#0:
Anton Korobeynikovff856882010-10-03 22:02:38 +000035; WIN_X64-NOT: callq __chkstk
Anton Korobeynikova5a64552010-09-02 23:03:46 +000036; WIN_X64: ret
37
38; MINGW_X64: # BB#0:
Cameron Esfahanibbb92872010-09-22 22:35:21 +000039; MINGW_X64-NOT: callq _alloca
Anton Korobeynikova5a64552010-09-02 23:03:46 +000040; MINGW_X64: ret
41
42; LINUX: # BB#0:
43; LINUX-NOT: call __chkstk
44; LINUX: ret
45 %array128 = alloca [128 x i8], align 16 ; <[128 x i8]*> [#uses=0]
46 ret i32 0
47}