1; RUN: llc -mtriple=x86_64-linux-android < %s | FileCheck -check-prefix=CHECK-X86-64 %s
2; RUN: llc -mtriple=i686-linux-android < %s | FileCheck -check-prefix=CHECK-X86-32 %s
3
4define i32 @foo(i32 %n) local_unnamed_addr #0 {
5  %a = alloca i32, i32 %n, align 16
6  %b = getelementptr inbounds i32, i32* %a, i64 1198
7  store volatile i32 1, i32* %b
8  %c = load volatile i32, i32* %a
9  ret i32 %c
10}
11
12attributes #0 =  {"probe-stack"="inline-asm"}
13
14; CHECK-X86-64-LABEL: foo:
15; CHECK-X86-64:       # %bb.0:
16; CHECK-X86-64-NEXT:  	pushq	%rbp
17; CHECK-X86-64-NEXT:  	.cfi_def_cfa_offset 16
18; CHECK-X86-64-NEXT:  	.cfi_offset %rbp, -16
19; CHECK-X86-64-NEXT:  	movq	%rsp, %rbp
20; CHECK-X86-64-NEXT:  	.cfi_def_cfa_register %rbp
21; CHECK-X86-64-NEXT:  	movq    %rsp, %rax
22; CHECK-X86-64-NEXT:    movl    %edi, %ecx
23; CHECK-X86-64-NEXT:  	leaq 15(,%rcx,4), %rcx
24; CHECK-X86-64-NEXT:  	andq	$-16, %rcx
25; CHECK-X86-64-NEXT:  	subq	%rcx, %rax
26; CHECK-X86-64-NEXT:  	cmpq	%rsp, %rax
27; CHECK-X86-64-NEXT:  	jl	.LBB0_3
28; CHECK-X86-64-NEXT:  .LBB0_2: # =>This Inner Loop Header: Depth=1
29; CHECK-X86-64-NEXT:  	movq	$0, (%rsp)
30; CHECK-X86-64-NEXT:  	subq	$4096, %rsp # imm = 0x1000
31; CHECK-X86-64-NEXT:  	cmpq	%rsp, %rax
32; CHECK-X86-64-NEXT:  	jge	.LBB0_2
33; CHECK-X86-64-NEXT:  .LBB0_3:
34; CHECK-X86-64-NEXT:  	movq	%rax, %rsp
35; CHECK-X86-64-NEXT:  	movl	$1, 4792(%rax)
36; CHECK-X86-64-NEXT:  	movl	(%rax), %eax
37; CHECK-X86-64-NEXT:  	movq	%rbp, %rsp
38; CHECK-X86-64-NEXT:  	popq	%rbp
39; CHECK-X86-64-NEXT:  .cfi_def_cfa %rsp, 8
40; CHECK-X86-64-NEXT:   retq
41
42
43; CHECK-X86-32-LABEL: foo:
44; CHECK-X86-32:       # %bb.0:
45; CHECK-X86-32-NEXT:    pushl   %ebp
46; CHECK-X86-32-NEXT:    .cfi_def_cfa_offset 8
47; CHECK-X86-32-NEXT:    .cfi_offset %ebp, -8
48; CHECK-X86-32-NEXT:    movl    %esp, %ebp
49; CHECK-X86-32-NEXT:    .cfi_def_cfa_register %ebp
50; CHECK-X86-32-NEXT:    subl    $8, %esp
51; CHECK-X86-32-NEXT:    movl    8(%ebp), %ecx
52; CHECK-X86-32-NEXT:    movl    %esp, %eax
53; CHECK-X86-32-NEXT:    leal    15(,%ecx,4), %ecx
54; CHECK-X86-32-NEXT:    andl    $-16, %ecx
55; CHECK-X86-32-NEXT:    subl    %ecx, %eax
56; CHECK-X86-32-NEXT:    cmpl    %esp, %eax
57; CHECK-X86-32-NEXT:    jl  .LBB0_3
58; CHECK-X86-32-NEXT:  .LBB0_2: # =>This Inner Loop Header: Depth=1
59; CHECK-X86-32-NEXT:    movl    $0, (%esp)
60; CHECK-X86-32-NEXT:    subl    $4096, %esp # imm = 0x1000
61; CHECK-X86-32-NEXT:    cmpl    %esp, %eax
62; CHECK-X86-32-NEXT:    jge .LBB0_2
63; CHECK-X86-32-NEXT:  .LBB0_3:
64; CHECK-X86-32-NEXT:    movl    %eax, %esp
65; CHECK-X86-32-NEXT:    movl    $1, 4792(%eax)
66; CHECK-X86-32-NEXT:    movl    (%eax), %eax
67; CHECK-X86-32-NEXT:    movl    %ebp, %esp
68; CHECK-X86-32-NEXT:    popl    %ebp
69; CHECK-X86-32-NEXT:    .cfi_def_cfa %esp, 4
70; CHECK-X86-32-NEXT:    retl
71
72