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