brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 77e41cb Raw
58 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s3 4;; In functions with 'no_caller_saved_registers' attribute, all registers should5;; be preserved except for registers used for passing/returning arguments.6;; In the following function registers %rdi, %rsi and %xmm0 are used to store7;; arguments %a0, %a1 and %b0 accordingally. The value is returned in %rax.8;; The above registers should not be preserved, however other registers9;; (that are modified by the function) should be preserved (%rdx and %xmm1).10define x86_64_sysvcc i32 @bar(i32 %a0, i32 %a1, float %b0) #0 {11; CHECK-LABEL: bar:12; CHECK:       # %bb.0:13; CHECK-NEXT:    pushq %rdx14; CHECK-NEXT:    .cfi_def_cfa_offset 1615; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT:    .cfi_offset %rdx, -1617; CHECK-NEXT:    .cfi_offset %xmm1, -3218; CHECK-NEXT:    #APP19; CHECK-NEXT:    #NO_APP20; CHECK-NEXT:    movl $4, %eax21; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload22; CHECK-NEXT:    popq %rdx23; CHECK-NEXT:    .cfi_def_cfa_offset 824; CHECK-NEXT:    retq25  call void asm sideeffect "", "~{rax},~{rdx},~{xmm1},~{rdi},~{rsi},~{xmm0}"()26  ret i32 427}28 29;; Because "bar" has 'no_caller_saved_registers' attribute, function "foo"30;; doesn't need to preserve registers except for the arguments passed31;; to "bar" (%esi, %edi and %xmm0).32define x86_64_sysvcc float @foo(i32 %a0, i32 %a1, float %b0) {33; CHECK-LABEL: foo:34; CHECK:       # %bb.0:35; CHECK-NEXT:    pushq %rax36; CHECK-NEXT:    .cfi_def_cfa_offset 1637; CHECK-NEXT:    movaps %xmm0, %xmm138; CHECK-NEXT:    movl %esi, %ecx39; CHECK-NEXT:    movl %edi, %edx40; CHECK-NEXT:    callq bar@PLT41; CHECK-NEXT:    addl %ecx, %edx42; CHECK-NEXT:    addl %eax, %edx43; CHECK-NEXT:    xorps %xmm0, %xmm044; CHECK-NEXT:    cvtsi2ss %edx, %xmm045; CHECK-NEXT:    addss %xmm1, %xmm046; CHECK-NEXT:    popq %rax47; CHECK-NEXT:    .cfi_def_cfa_offset 848; CHECK-NEXT:    retq49	%call = call i32 @bar(i32 %a0, i32 %a1, float %b0)50	%c0   = add i32 %a0, %call51	%c1   = add i32 %c0, %a152	%c2 = sitofp i32 %c1 to float53	%c3 = fadd float %c2, %b054	ret float %c355}56 57attributes #0 = { "no_caller_saved_registers" }58