brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · e8359cb Raw
215 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -verify-machineinstrs | FileCheck %s -check-prefix=X863; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -verify-machineinstrs | FileCheck %s -check-prefix=X644; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=X32ABI5; RUN: llc < %s -mcpu=generic -mtriple=i686-linux -filetype=obj6; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux -filetype=obj7; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnux32 -filetype=obj8 9; Just to prevent the alloca from being optimized away10declare void @dummy_use(ptr, i32)11 12define i32 @test_basic(i32 %l) #0 {13; X86-LABEL: test_basic:14; X86:       # %bb.0:15; X86-NEXT:    cmpl %gs:48, %esp16; X86-NEXT:    jbe .LBB0_117; X86-NEXT:  .LBB0_2:18; X86-NEXT:    pushl %ebp19; X86-NEXT:    .cfi_def_cfa_offset 820; X86-NEXT:    .cfi_offset %ebp, -821; X86-NEXT:    movl %esp, %ebp22; X86-NEXT:    .cfi_def_cfa_register %ebp23; X86-NEXT:    pushl %esi24; X86-NEXT:    pushl %eax25; X86-NEXT:    .cfi_offset %esi, -1226; X86-NEXT:    movl 8(%ebp), %esi27; X86-NEXT:    movl %esp, %eax28; X86-NEXT:    leal 15(,%esi,4), %ecx29; X86-NEXT:    andl $-16, %ecx30; X86-NEXT:    subl %ecx, %eax31; X86-NEXT:    cmpl %eax, %gs:4832; X86-NEXT:    jg .LBB0_433; X86-NEXT:  # %bb.3:34; X86-NEXT:    movl %eax, %esp35; X86-NEXT:    jmp .LBB0_536; X86-NEXT:  .LBB0_4:37; X86-NEXT:    subl $12, %esp38; X86-NEXT:    pushl %ecx39; X86-NEXT:    calll __morestack_allocate_stack_space40; X86-NEXT:    addl $16, %esp41; X86-NEXT:  .LBB0_5:42; X86-NEXT:    subl $16, %esp43; X86-NEXT:    movl %esi, {{[0-9]+}}(%esp)44; X86-NEXT:    movl %eax, (%esp)45; X86-NEXT:    calll dummy_use@PLT46; X86-NEXT:    addl $16, %esp47; X86-NEXT:    testl %esi, %esi48; X86-NEXT:    je .LBB0_649; X86-NEXT:  # %bb.8: # %false50; X86-NEXT:    decl %esi51; X86-NEXT:    subl $16, %esp52; X86-NEXT:    movl %esi, (%esp)53; X86-NEXT:    calll test_basic@PLT54; X86-NEXT:    jmp .LBB0_755; X86-NEXT:  .LBB0_6: # %true56; X86-NEXT:    xorl %eax, %eax57; X86-NEXT:  .LBB0_7: # %true58; X86-NEXT:    leal -4(%ebp), %esp59; X86-NEXT:    popl %esi60; X86-NEXT:    popl %ebp61; X86-NEXT:    .cfi_def_cfa %esp, 462; X86-NEXT:    retl63; X86-NEXT:  .LBB0_1:64; X86-NEXT:    .cfi_restore %ebp65; X86-NEXT:    .cfi_restore %esi66; X86-NEXT:    pushl $467; X86-NEXT:    pushl $1268; X86-NEXT:    calll __morestack69; X86-NEXT:    retl70; X86-NEXT:    jmp .LBB0_271;72; X64-LABEL: test_basic:73; X64:       # %bb.0:74; X64-NEXT:    cmpq %fs:112, %rsp75; X64-NEXT:    jbe .LBB0_176; X64-NEXT:  .LBB0_2:77; X64-NEXT:    pushq %rbp78; X64-NEXT:    .cfi_def_cfa_offset 1679; X64-NEXT:    .cfi_offset %rbp, -1680; X64-NEXT:    movq %rsp, %rbp81; X64-NEXT:    .cfi_def_cfa_register %rbp82; X64-NEXT:    pushq %rbx83; X64-NEXT:    pushq %rax84; X64-NEXT:    .cfi_offset %rbx, -2485; X64-NEXT:    movl %edi, %ebx86; X64-NEXT:    movq %rsp, %rdi87; X64-NEXT:    movl %ebx, %eax88; X64-NEXT:    leaq 15(,%rax,4), %rax89; X64-NEXT:    andq $-16, %rax90; X64-NEXT:    subq %rax, %rdi91; X64-NEXT:    cmpq %rdi, %fs:11292; X64-NEXT:    jg .LBB0_493; X64-NEXT:  # %bb.3:94; X64-NEXT:    movq %rdi, %rsp95; X64-NEXT:    jmp .LBB0_596; X64-NEXT:  .LBB0_4:97; X64-NEXT:    movq %rax, %rdi98; X64-NEXT:    callq __morestack_allocate_stack_space99; X64-NEXT:    movq %rax, %rdi100; X64-NEXT:  .LBB0_5:101; X64-NEXT:    movl %ebx, %esi102; X64-NEXT:    callq dummy_use@PLT103; X64-NEXT:    testl %ebx, %ebx104; X64-NEXT:    je .LBB0_6105; X64-NEXT:  # %bb.8: # %false106; X64-NEXT:    decl %ebx107; X64-NEXT:    movl %ebx, %edi108; X64-NEXT:    callq test_basic@PLT109; X64-NEXT:    jmp .LBB0_7110; X64-NEXT:  .LBB0_6: # %true111; X64-NEXT:    xorl %eax, %eax112; X64-NEXT:  .LBB0_7: # %true113; X64-NEXT:    leaq -8(%rbp), %rsp114; X64-NEXT:    popq %rbx115; X64-NEXT:    popq %rbp116; X64-NEXT:    .cfi_def_cfa %rsp, 8117; X64-NEXT:    retq118; X64-NEXT:  .LBB0_1:119; X64-NEXT:    .cfi_restore %rbx120; X64-NEXT:    .cfi_restore %rbp121; X64-NEXT:    movl $24, %r10d122; X64-NEXT:    movl $0, %r11d123; X64-NEXT:    callq __morestack124; X64-NEXT:    retq125; X64-NEXT:    jmp .LBB0_2126;127; X32ABI-LABEL: test_basic:128; X32ABI:       # %bb.0:129; X32ABI-NEXT:    cmpl %fs:64, %esp130; X32ABI-NEXT:    jbe .LBB0_1131; X32ABI-NEXT:  .LBB0_2:132; X32ABI-NEXT:    pushq %rbp133; X32ABI-NEXT:    .cfi_def_cfa_offset 16134; X32ABI-NEXT:    .cfi_offset %rbp, -16135; X32ABI-NEXT:    movl %esp, %ebp136; X32ABI-NEXT:    .cfi_def_cfa_register %rbp137; X32ABI-NEXT:    pushq %rbx138; X32ABI-NEXT:    pushq %rax139; X32ABI-NEXT:    .cfi_offset %rbx, -24140; X32ABI-NEXT:    movl %edi, %ebx141; X32ABI-NEXT:    leal 15(,%rbx,4), %eax142; X32ABI-NEXT:    andl $-16, %eax143; X32ABI-NEXT:    movl %esp, %edi144; X32ABI-NEXT:    subl %eax, %edi145; X32ABI-NEXT:    cmpl %edi, %fs:64146; X32ABI-NEXT:    jg .LBB0_4147; X32ABI-NEXT:  # %bb.3:148; X32ABI-NEXT:    movl %edi, %esp149; X32ABI-NEXT:    jmp .LBB0_5150; X32ABI-NEXT:  .LBB0_4:151; X32ABI-NEXT:    movl %eax, %edi152; X32ABI-NEXT:    callq __morestack_allocate_stack_space153; X32ABI-NEXT:    movl %eax, %edi154; X32ABI-NEXT:  .LBB0_5:155; X32ABI-NEXT:    movl %ebx, %esi156; X32ABI-NEXT:    callq dummy_use@PLT157; X32ABI-NEXT:    testl %ebx, %ebx158; X32ABI-NEXT:    je .LBB0_6159; X32ABI-NEXT:  # %bb.8: # %false160; X32ABI-NEXT:    decl %ebx161; X32ABI-NEXT:    movl %ebx, %edi162; X32ABI-NEXT:    callq test_basic@PLT163; X32ABI-NEXT:    jmp .LBB0_7164; X32ABI-NEXT:  .LBB0_6: # %true165; X32ABI-NEXT:    xorl %eax, %eax166; X32ABI-NEXT:  .LBB0_7: # %true167; X32ABI-NEXT:    leal -8(%ebp), %esp168; X32ABI-NEXT:    popq %rbx169; X32ABI-NEXT:    popq %rbp170; X32ABI-NEXT:    .cfi_def_cfa %rsp, 8171; X32ABI-NEXT:    retq172; X32ABI-NEXT:  .LBB0_1:173; X32ABI-NEXT:    .cfi_def_cfa_register 4294967294174; X32ABI-NEXT:    .cfi_restore %rbx175; X32ABI-NEXT:    .cfi_restore %rbp176; X32ABI-NEXT:    movl $24, %r10d177; X32ABI-NEXT:    movl $0, %r11d178; X32ABI-NEXT:    callq __morestack179; X32ABI-NEXT:    retq180; X32ABI-NEXT:    jmp .LBB0_2181        %mem = alloca i32, i32 %l182        call void @dummy_use (ptr %mem, i32 %l)183        %terminate = icmp eq i32 %l, 0184        br i1 %terminate, label %true, label %false185 186true:187        ret i32 0188 189false:190        %newlen = sub i32 %l, 1191        %retvalue = call i32 @test_basic(i32 %newlen)192        ret i32 %retvalue193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212}213 214attributes #0 = { "split-stack" }215