1; RUN: llc < %s -verify-machineinstrs -enable-machine-outliner | FileCheck %s 2 3target triple = "riscv64-unknown-linux-gnu" 4 5declare void @foo(i32, i32, i32, i32) minsize 6 7;; TargetOpcode::FENTRY_CALL at the start of the function expands to a __fentry__ 8;; call which must be present. Don't outline it. 9define void @fentry0(i1 %a) nounwind "fentry-call"="true" { 10; CHECK-LABEL: fentry0: 11; CHECK-NEXT: # %bb.0: 12; CHECK-NEXT: # FEntry call 13; CHECK: # %bb.1: 14; CHECK-NEXT: call t0, OUTLINED_FUNCTION_1 15entry: 16 br i1 %a, label %if.then, label %if.end 17if.then: 18 call void @foo(i32 1, i32 2, i32 3, i32 4) 19 br label %if.end 20if.end: 21 call void @foo(i32 5, i32 6, i32 7, i32 8) 22 ret void 23} 24 25define void @fentry1(i1 %a) nounwind "fentry-call"="true" { 26; CHECK-LABEL: fentry1: 27; CHECK-NEXT: # %bb.0: 28; CHECK-NEXT: # FEntry call 29; CHECK: # %bb.1: 30; CHECK-NEXT: call t0, OUTLINED_FUNCTION_1 31entry: 32 br i1 %a, label %if.then, label %if.end 33if.then: 34 call void @foo(i32 1, i32 2, i32 3, i32 4) 35 br label %if.end 36if.end: 37 call void @foo(i32 5, i32 6, i32 7, i32 8) 38 ret void 39} 40 41;; TargetOpcode::PATCHABLE_FUNCTION_ENTER at the start of the function expands to 42;; NOPs which must be present. Don't outline them. 43define void @patchable0(i1 %a) nounwind "patchable-function-entry"="2" { 44; CHECK-LABEL: patchable0: 45; CHECK-NEXT: .Lfunc_begin0: 46; CHECK-NEXT: # %bb.0: 47; CHECK-NEXT: nop 48; CHECK-NEXT: nop 49; CHECK: # %bb.1: 50; CHECK-NEXT: call t0, OUTLINED_FUNCTION_1 51entry: 52 br i1 %a, label %if.then, label %if.end 53if.then: 54 call void @foo(i32 1, i32 2, i32 3, i32 4) 55 br label %if.end 56if.end: 57 call void @foo(i32 5, i32 6, i32 7, i32 8) 58 ret void 59} 60 61define void @patchable1(i1 %a) nounwind "patchable-function-entry"="2" { 62; CHECK-LABEL: patchable1: 63; CHECK-NEXT: .Lfunc_begin1: 64; CHECK-NEXT: # %bb.0: 65; CHECK-NEXT: nop 66; CHECK-NEXT: nop 67; CHECK: # %bb.1: 68; CHECK-NEXT: call t0, OUTLINED_FUNCTION_1 69entry: 70 br i1 %a, label %if.then, label %if.end 71if.then: 72 call void @foo(i32 1, i32 2, i32 3, i32 4) 73 br label %if.end 74if.end: 75 call void @foo(i32 5, i32 6, i32 7, i32 8) 76 ret void 77} 78