86 lines · plain
1; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -homogeneous-prolog-epilog | FileCheck %s2; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -homogeneous-prolog-epilog | FileCheck %s --check-prefixes=CHECK-LINUX3 4; CHECK-LABEL: __Z3foofffi:5; CHECK: stp x29, x30, [sp, #-16]!6; CHECK-NEXT: bl _OUTLINED_FUNCTION_PROLOG_FRAME48_x30x29x19x20d8d9d10d117; CHECK: bl __Z3goof8; CHECK: bl __Z3goof9; CHECK: b _OUTLINED_FUNCTION_EPILOG_TAIL_x30x29x19x20d8d9d10d1110 11; CHECK-LINUX-LABEL: _Z3foofffi:12; CHECK-LINUX: stp x29, x30, [sp, #-32]!13; CHECK-LINUX-NEXT: bl OUTLINED_FUNCTION_PROLOG_FRAME32_x19x20x30x29d8d9d10d1114; CHECK-LINUX: bl _Z3goof15; CHECK-LINUX: bl _Z3goof16; CHECK-LINUX: b OUTLINED_FUNCTION_EPILOG_TAIL_x19x20x30x29d8d9d10d1117 18define float @_Z3foofffi(float %b, float %x, float %y, i32 %z) ssp minsize "frame-pointer"="non-leaf" {19entry:20 %inc = fadd float %b, 1.000000e+0021 %add = fadd float %inc, %x22 %add1 = fadd float %add, %y23 %conv = sitofp i32 %z to float24 %sub = fsub float %add1, %conv25 %dec = add nsw i32 %z, -126 %call = tail call float @_Z3goof(float %inc) #227 %call2 = tail call float @_Z3goof(float %sub) #228 %add3 = fadd float %call, %call229 %mul = fmul float %inc, %add330 %add4 = fadd float %sub, %mul31 %conv5 = sitofp i32 %dec to float32 %sub6 = fsub float %add4, %conv533 ret float %sub634}35 36; CHECK-LABEL: _Z3zoov:37; CHECK: stp x29, x30, [sp, #-16]!38; CHECK: bl __Z3hoo39; CHECK: b _OUTLINED_FUNCTION_EPILOG_TAIL_x30x2940 41define i32 @_Z3zoov() nounwind ssp minsize {42 %1 = tail call i32 @_Z3hoov() #243 %2 = add nsw i32 %1, 144 ret i32 %245}46 47 48declare float @_Z3goof(float) nounwind ssp minsize49declare i32 @_Z3hoov() nounwind ssp optsize50 51; CHECK-LABEL: _OUTLINED_FUNCTION_PROLOG_FRAME48_x30x29x19x20d8d9d10d11:52; CHECK: stp d11, d10, [sp, #-48]!53; CHECK-NEXT: stp d9, d8, [sp, #16]54; CHECK-NEXT: add x29, sp, #4855; CHECK-NEXT: stp x20, x19, [sp, #32]56; CHECK-NEXT: ret57 58; CHECK-LABEL: _OUTLINED_FUNCTION_EPILOG_TAIL_x30x29x19x20d8d9d10d11:59; CHECK: ldp x29, x30, [sp, #48]60; CHECK-NEXT: ldp x20, x19, [sp, #32]61; CHECK-NEXT: ldp d9, d8, [sp, #16]62; CHECK-NEXT: ldp d11, d10, [sp], #6463; CHECK-NEXT: ret64 65; CHECK-LABEL: _OUTLINED_FUNCTION_EPILOG_TAIL_x30x29:66; CHECK: ldp x29, x30, [sp], #1667; CHECK-NEXT: ret68 69; CHECK-LINUX-LABEL: OUTLINED_FUNCTION_PROLOG_FRAME32_x19x20x30x29d8d9d10d11:70; CHECK-LINUX: stp d11, d10, [sp, #-32]!71; CHECK-LINUX-NEXT: stp d9, d8, [sp, #16]72; CHECK-LINUX-NEXT: add x29, sp, #3273; CHECK-LINUX-NEXT: stp x20, x19, [sp, #48]74; CHECK-LINUX-NEXT: ret75 76; CHECK-LINUX-LABEL: OUTLINED_FUNCTION_EPILOG_TAIL_x19x20x30x29d8d9d10d11:77; CHECK-LINUX: ldp x20, x19, [sp, #48]78; CHECK-LINUX-NEXT: ldp x29, x30, [sp, #32]79; CHECK-LINUX-NEXT: ldp d9, d8, [sp, #16]80; CHECK-LINUX-NEXT: ldp d11, d10, [sp], #6481; CHECK-LINUX-NEXT: ret82 83; CHECK-LINUX-LABEL: OUTLINED_FUNCTION_EPILOG_TAIL_x30x29:84; CHECK-LINUX: ldp x29, x30, [sp], #1685; CHECK-LINUX-NEXT: ret86