Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -mtriple=arm64-apple-ios-8.0.0 | FileCheck %s
      2 
      3 declare void @standard_cc_func()
      4 declare preserve_mostcc void @preserve_mostcc_func()
      5 
      6 ; Registers r9-r15 should be saved before the call of a function
      7 ; with a standard calling convention.
      8 define preserve_mostcc void @preserve_mostcc1() nounwind {
      9 entry:
     10 ;CHECK-LABEL: preserve_mostcc1
     11 ;CHECK-NOT:   stp
     12 ;CHECK-NOT:   str
     13 ;CHECK:       str     x15
     14 ;CHECK-NEXT:  stp     x14, x13,
     15 ;CHECK-NEXT:  stp     x12, x11,
     16 ;CHECK-NEXT:  stp     x10, x9,
     17 ;CHECK:       bl      _standard_cc_func
     18   call void @standard_cc_func()
     19 ;CHECK:       ldp     x10, x9,
     20 ;CHECK-NEXT:  ldp     x12, x11,
     21 ;CHECK-NEXT:  ldp     x14, x13,
     22 ;CHECK-NEXT:  ldr     x15
     23   ret void
     24 }
     25 
     26 ; Registers r9-r15 don't need to be saved if one
     27 ; function with preserve_mostcc calling convention calls another
     28 ; function with preserve_mostcc calling convention, because the
     29 ; callee wil save these registers anyways.
     30 define preserve_mostcc void @preserve_mostcc2() nounwind {
     31 entry:
     32 ;CHECK-LABEL: preserve_mostcc2
     33 ;CHECK-NOT: x14
     34 ;CHECK:     stp     x29, x30,
     35 ;CHECK-NOT: x14
     36 ;CHECK:     bl      _preserve_mostcc_func
     37   call preserve_mostcc void @preserve_mostcc_func()
     38   ret void
     39 }
     40 
     41