brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · ccf7e1d Raw
131 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp2; RUN: llc < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-linux-gnu"6 7; | case1 | alloca + align < probe_size8define i32 @foo1(i64 %i) local_unnamed_addr #0 {9; CHECK-LABEL: foo1:10; CHECK:       # %bb.0:11; CHECK-NEXT:    pushq %rbp12; CHECK-NEXT:    .cfi_def_cfa_offset 1613; CHECK-NEXT:    .cfi_offset %rbp, -1614; CHECK-NEXT:    movq %rsp, %rbp15; CHECK-NEXT:    .cfi_def_cfa_register %rbp16; CHECK-NEXT:    andq $-64, %rsp17; CHECK-NEXT:    subq $832, %rsp # imm = 0x34018; CHECK-NEXT:    movl $1, (%rsp,%rdi,4)19; CHECK-NEXT:    movl (%rsp), %eax20; CHECK-NEXT:    movq %rbp, %rsp21; CHECK-NEXT:    popq %rbp22; CHECK-NEXT:    .cfi_def_cfa %rsp, 823; CHECK-NEXT:    retq24  %a = alloca i32, i32 200, align 6425  %b = getelementptr inbounds i32, ptr %a, i64 %i26  store volatile i32 1, ptr %b27  %c = load volatile i32, ptr %a28  ret i32 %c29}30 31; | case2 | alloca > probe_size, align > probe_size32define i32 @foo2(i64 %i) local_unnamed_addr #0 {33; CHECK-LABEL: foo2:34; CHECK:       # %bb.0:35; CHECK-NEXT:    pushq %rbp36; CHECK-NEXT:    .cfi_def_cfa_offset 1637; CHECK-NEXT:    .cfi_offset %rbp, -1638; CHECK-NEXT:    movq %rsp, %rbp39; CHECK-NEXT:    .cfi_def_cfa_register %rbp40; CHECK-NEXT:    andq $-2048, %rsp # imm = 0xF80041; CHECK-NEXT:    subq $2048, %rsp # imm = 0x80042; CHECK-NEXT:    movq $0, (%rsp)43; CHECK-NEXT:    subq $4096, %rsp # imm = 0x100044; CHECK-NEXT:    movq $0, (%rsp)45; CHECK-NEXT:    subq $2048, %rsp # imm = 0x80046; CHECK-NEXT:    movl $1, (%rsp,%rdi,4)47; CHECK-NEXT:    movl (%rsp), %eax48; CHECK-NEXT:    movq %rbp, %rsp49; CHECK-NEXT:    popq %rbp50; CHECK-NEXT:    .cfi_def_cfa %rsp, 851; CHECK-NEXT:    retq52  %a = alloca i32, i32 2000, align 204853  %b = getelementptr inbounds i32, ptr %a, i64 %i54  store volatile i32 1, ptr %b55  %c = load volatile i32, ptr %a56  ret i32 %c57}58 59; | case3 | alloca < probe_size, align < probe_size, alloca + align > probe_size60define i32 @foo3(i64 %i) local_unnamed_addr #0 {61; CHECK-LABEL: foo3:62; CHECK:       # %bb.0:63; CHECK-NEXT:    pushq %rbp64; CHECK-NEXT:    .cfi_def_cfa_offset 1665; CHECK-NEXT:    .cfi_offset %rbp, -1666; CHECK-NEXT:    movq %rsp, %rbp67; CHECK-NEXT:    .cfi_def_cfa_register %rbp68; CHECK-NEXT:    andq $-1024, %rsp # imm = 0xFC0069; CHECK-NEXT:    subq $3072, %rsp # imm = 0xC0070; CHECK-NEXT:    movq $0, (%rsp)71; CHECK-NEXT:    subq $1024, %rsp # imm = 0x40072; CHECK-NEXT:    movl $1, (%rsp,%rdi,4)73; CHECK-NEXT:    movl (%rsp), %eax74; CHECK-NEXT:    movq %rbp, %rsp75; CHECK-NEXT:    popq %rbp76; CHECK-NEXT:    .cfi_def_cfa %rsp, 877; CHECK-NEXT:    retq78  %a = alloca i32, i32 1000, align 102479  %b = getelementptr inbounds i32, ptr %a, i64 %i80  store volatile i32 1, ptr %b81  %c = load volatile i32, ptr %a82  ret i32 %c83}84 85; | case4 | alloca + probe_size < probe_size, followed by dynamic alloca86define i32 @foo4(i64 %i) local_unnamed_addr #0 {87; CHECK-LABEL: foo4:88; CHECK:       # %bb.0:89; CHECK-NEXT:    pushq %rbp90; CHECK-NEXT:    .cfi_def_cfa_offset 1691; CHECK-NEXT:    .cfi_offset %rbp, -1692; CHECK-NEXT:    movq %rsp, %rbp93; CHECK-NEXT:    .cfi_def_cfa_register %rbp94; CHECK-NEXT:    pushq %rbx95; CHECK-NEXT:    andq $-64, %rsp96; CHECK-NEXT:    subq $896, %rsp # imm = 0x38097; CHECK-NEXT:    movq %rsp, %rbx98; CHECK-NEXT:    .cfi_offset %rbx, -2499; CHECK-NEXT:    movl $1, (%rbx,%rdi,4)100; CHECK-NEXT:    movl (%rbx), %ecx101; CHECK-NEXT:    movq %rsp, %rax102; CHECK-NEXT:    leaq 15(,%rcx,4), %rcx103; CHECK-NEXT:    andq $-16, %rcx104; CHECK-NEXT:    subq %rcx, %rax105; CHECK-NEXT:    cmpq %rsp, %rax106; CHECK-NEXT:    jge .LBB3_3107; CHECK-NEXT:  .LBB3_2: # =>This Inner Loop Header: Depth=1108; CHECK-NEXT:    xorq $0, (%rsp)109; CHECK-NEXT:    subq $4096, %rsp # imm = 0x1000110; CHECK-NEXT:    cmpq %rsp, %rax111; CHECK-NEXT:    jl .LBB3_2112; CHECK-NEXT:  .LBB3_3:113; CHECK-NEXT:    andq $-64, %rax114; CHECK-NEXT:    movq %rax, %rsp115; CHECK-NEXT:    movl (%rax), %eax116; CHECK-NEXT:    leaq -8(%rbp), %rsp117; CHECK-NEXT:    popq %rbx118; CHECK-NEXT:    popq %rbp119; CHECK-NEXT:    .cfi_def_cfa %rsp, 8120; CHECK-NEXT:    retq121  %a = alloca i32, i32 200, align 64122  %b = getelementptr inbounds i32, ptr %a, i64 %i123  store volatile i32 1, ptr %b124  %c = load volatile i32, ptr %a125  %d = alloca i32, i32 %c, align 64126  %e = load volatile i32, ptr %d127  ret i32 %e128}129 130attributes #0 =  {"probe-stack"="inline-asm"}131