51 lines · plain
1; RUN: llc < %s -mtriple=arm64-apple-ios-8.0.0 | FileCheck -check-prefix CHECK -check-prefix CHECK-DARWIN %s2; RUN: llc < %s -mtriple=aarch64-unknown-windows-msvc | FileCheck -check-prefix CHECK -check-prefix CHECK-WIN %s3 4declare void @standard_cc_func()5declare preserve_mostcc void @preserve_mostcc_func()6 7; Registers r9-r15 should be saved before the call of a function8; with a standard calling convention.9define preserve_mostcc void @preserve_mostcc1() nounwind {10entry:11;CHECK-LABEL: preserve_mostcc112;CHECK-DARWIN-NOT: stp13;CHECK-DARWIN-NOT: str14;CHECK-DARWIN: str x1515;CHECK-DARWIN-NEXT: stp x14, x13,16;CHECK-DARWIN-NEXT: stp x12, x11,17;CHECK-DARWIN-NEXT: stp x10, x9,18;CHECK-WIN: stp x15, x1419;CHECK-WIN-NEXT: stp x13, x12,20;CHECK-WIN-NEXT: stp x11, x10,21;CHECK-WIN-NEXT: stp x9, x3022;CHECK: bl {{_?}}standard_cc_func23 call void @standard_cc_func()24;CHECK-DARWIN: ldp x10, x9,25;CHECK-DARWIN-NEXT: ldp x12, x11,26;CHECK-DARWIN-NEXT: ldp x14, x13,27;CHECK-DARWIN-NEXT: ldr x1528;CHECK-WIN: ldp x9, x3029;CHECK-WIN-NEXT: ldp x11, x10,30;CHECK-WIN-NEXT: ldp x13, x12,31;CHECK-WIN-NEXT: ldp x15, x14,32 ret void33}34 35; Registers r9-r15 don't need to be saved if one36; function with preserve_mostcc calling convention calls another37; function with preserve_mostcc calling convention, because the38; callee wil save these registers anyways.39define preserve_mostcc void @preserve_mostcc2() nounwind {40entry:41;CHECK-LABEL: preserve_mostcc242;CHECK-NOT: x1443;CHECK-DARWIN: stp x29, x30,44;CHECK-WIN: str x3045;CHECK-NOT: x1446;CHECK: bl {{_?}}preserve_mostcc_func47 call preserve_mostcc void @preserve_mostcc_func()48 ret void49}50 51