1; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-arm-none-eabi -frame-pointer=non-leaf < %s | FileCheck %s --check-prefix=NOOMIT 2; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-arm-none-eabi -frame-pointer=none < %s | FileCheck %s --check-prefix=OMITFP 3 4define void @_Z1giii(i32 %x, i32 %y, i32 %z) minsize { 5; NOOMIT-LABEL: _Z1giii: 6; NOOMIT: // %bb.0: // %entry 7; NOOMIT-NEXT: b _Z1hiii 8; 9; OMITFP-LABEL: _Z1giii: 10; OMITFP: // %bb.0: // %entry 11; OMITFP-NEXT: b _Z1hiii 12entry: 13 tail call void @_Z1hiii(i32 %x, i32 %y, i32 %z) 14 ret void 15} 16 17declare void @_Z1hiii(i32, i32, i32) minsize 18 19define void @_Z2f1v() minsize { 20; NOOMIT-LABEL: _Z2f1v: 21; NOOMIT: // %bb.0: // %entry 22; NOOMIT-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill 23; NOOMIT-NEXT: mov x29, sp 24; NOOMIT-NEXT: .cfi_def_cfa w29, 16 25; NOOMIT-NEXT: .cfi_offset w30, -8 26; NOOMIT-NEXT: .cfi_offset w29, -16 27; NOOMIT-NEXT: bl OUTLINED_FUNCTION_0 28; NOOMIT-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload 29; NOOMIT-NEXT: b _Z1giii 30; 31; OMITFP-LABEL: _Z2f1v: 32; OMITFP: // %bb.0: // %entry 33; OMITFP-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 34; OMITFP-NEXT: .cfi_def_cfa_offset 16 35; OMITFP-NEXT: .cfi_offset w30, -16 36; OMITFP-NEXT: bl OUTLINED_FUNCTION_0 37; OMITFP-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 38; OMITFP-NEXT: b _Z1giii 39entry: 40 tail call void @_Z1giii(i32 1, i32 2, i32 3) 41 tail call void @_Z1giii(i32 1, i32 2, i32 3) 42 ret void 43} 44 45define void @_Z2f2v() minsize { 46; NOOMIT-LABEL: _Z2f2v: 47; NOOMIT: // %bb.0: // %entry 48; NOOMIT-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill 49; NOOMIT-NEXT: mov x29, sp 50; NOOMIT-NEXT: .cfi_def_cfa w29, 16 51; NOOMIT-NEXT: .cfi_offset w30, -8 52; NOOMIT-NEXT: .cfi_offset w29, -16 53; NOOMIT-NEXT: bl OUTLINED_FUNCTION_0 54; NOOMIT-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload 55; NOOMIT-NEXT: b _Z1giii 56; 57; OMITFP-LABEL: _Z2f2v: 58; OMITFP: // %bb.0: // %entry 59; OMITFP-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 60; OMITFP-NEXT: .cfi_def_cfa_offset 16 61; OMITFP-NEXT: .cfi_offset w30, -16 62; OMITFP-NEXT: bl OUTLINED_FUNCTION_0 63; OMITFP-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 64; OMITFP-NEXT: b _Z1giii 65entry: 66 tail call void @_Z1giii(i32 1, i32 2, i32 3) 67 tail call void @_Z1giii(i32 1, i32 2, i32 3) 68 ret void 69} 70 71; OMITFP-LABEL: OUTLINED_FUNCTION_0: 72; OMITFP: .cfi_startproc 73; OMITFP-NEXT: // %bb.0: 74; OMITFP-NEXT: .cfi_def_cfa_offset 16 75; OMITFP-NEXT: .cfi_offset w30, -16 76; OMITFP-NEXT: str x30, [sp, #-16]! 77; OMITFP-NEXT: mov w0, #1 78; OMITFP-NEXT: mov w1, #2 79; OMITFP-NEXT: mov w2, #3 80; OMITFP-NEXT: bl _Z1giii 81; OMITFP-NEXT: mov w0, #1 82; OMITFP-NEXT: mov w1, #2 83; OMITFP-NEXT: mov w2, #3 84; OMITFP-NEXT: ldr x30, [sp], #16 85; OMITFP-NEXT: ret 86 87; NOOMIT-LABEL: OUTLINED_FUNCTION_0: 88; NOOMIT: .cfi_startproc 89; NOOMIT-NEXT: // %bb.0: 90; NOOMIT-NEXT: .cfi_def_cfa_offset 16 91; NOOMIT-NEXT: .cfi_offset w30, -16 92; NOOMIT-NEXT: str x30, [sp, #-16]! 93; NOOMIT-NEXT: mov w0, #1 94; NOOMIT-NEXT: mov w1, #2 95; NOOMIT-NEXT: mov w2, #3 96; NOOMIT-NEXT: bl _Z1giii 97; NOOMIT-NEXT: mov w0, #1 98; NOOMIT-NEXT: mov w1, #2 99; NOOMIT-NEXT: mov w2, #3 100; NOOMIT-NEXT: ldr x30, [sp], #16 101; NOOMIT-NEXT: ret 102