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