brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · d6080cf Raw
56 lines · plain
1; RUN: llc < %s -mtriple=x86_64-linux-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-642; RUN: llc < %s -mtriple=i386-linux-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-323; RUN: llc < %s -mtriple=x86_64-linux-gnux32 -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-324 5; Test that a large stack offset uses a single add/sub instruction to6; adjust the stack pointer.7 8define void @foo() nounwind {9; CHECK-64-LABEL: foo:10; CHECK-64:      movabsq $50000000{{..}}, %rax11; CHECK-64-NEXT: subq    %rax, %rsp12; CHECK-64-NOT:  subq    $2147483647, %rsp13; CHECK-64:      movabsq $50000000{{..}}, [[RAX:%r..]]14; CHECK-64-NEXT: addq    [[RAX]], %rsp15;16; CHECK-32-LABEL: foo:17; CHECK-32:      ud218; CHECK-32-NOT:  subl    $2147483647, %esp19; CHECK-32:      ud220  %1 = alloca [5000000000 x i8], align 1621  call void @bar(ptr %1)22  ret void23}24 25; Verify that we do not clobber the return value.26 27define i32 @foo2() nounwind {28; CHECK-64-LABEL: foo2:29; CHECK-64:     movl    $10, %eax30; CHECK-64-NOT: movabsq ${{.*}}, %rax31;32; CHECK-32-LABEL: foo2:33; CHECK-32:     movl    $10, %eax34; CHECK-32-NOT: movl    ${{.*}}, %eax35  %1 = alloca [5000000000 x i8], align 1636  call void @bar(ptr %1)37  ret i32 1038}39 40; Verify that we do not clobber EAX when using inreg attribute41 42define i32 @foo3(i32 inreg %x) nounwind {43; CHECK-64-LABEL: foo3:44; CHECK-64:      movabsq $50000000{{..}}, %rax45; CHECK-64-NEXT: subq    %rax, %rsp46;47; CHECK-32-LABEL: foo3:48; CHECK-32:      ud249; CHECK-32-NOT:  movl ${{.*}}, %eax50  %1 = alloca [5000000000 x i8], align 1651  call void @bar(ptr %1)52  ret i32 %x53}54 55declare void @bar(ptr)56