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_[[BB1:[0-9]+]] 15; CHECK-NEXT: call foo 16; CHECK-LABEL: .LBB0_2: 17; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]] 18; CHECK-NEXT: call foo 19entry: 20 br i1 %a, label %if.then, label %if.end 21if.then: 22 call void @foo(i32 1, i32 2, i32 3, i32 4) 23 br label %if.end 24if.end: 25 call void @foo(i32 5, i32 6, i32 7, i32 8) 26 ret void 27} 28 29define void @fentry1(i1 %a) nounwind "fentry-call"="true" { 30; CHECK-LABEL: fentry1: 31; CHECK-NEXT: # %bb.0: 32; CHECK-NEXT: # FEntry call 33; CHECK: # %bb.1: 34; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]] 35; CHECK-NEXT: call foo 36; CHECK-LABEL: .LBB1_2: 37; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]] 38; CHECK-NEXT: call foo 39entry: 40 br i1 %a, label %if.then, label %if.end 41if.then: 42 call void @foo(i32 1, i32 2, i32 3, i32 4) 43 br label %if.end 44if.end: 45 call void @foo(i32 5, i32 6, i32 7, i32 8) 46 ret void 47} 48 49;; TargetOpcode::PATCHABLE_FUNCTION_ENTER at the start of the function expands to 50;; NOPs which must be present. Don't outline them. 51define void @patchable0(i1 %a) nounwind "patchable-function-entry"="2" { 52; CHECK-LABEL: patchable0: 53; CHECK-NEXT: .Lfunc_begin0: 54; CHECK-NEXT: # %bb.0: 55; CHECK-NEXT: nop 56; CHECK-NEXT: nop 57; CHECK: # %bb.1: 58; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]] 59; CHECK-NEXT: call foo 60; CHECK-LABEL: .LBB2_2: 61; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]] 62; CHECK-NEXT: call foo 63entry: 64 br i1 %a, label %if.then, label %if.end 65if.then: 66 call void @foo(i32 1, i32 2, i32 3, i32 4) 67 br label %if.end 68if.end: 69 call void @foo(i32 5, i32 6, i32 7, i32 8) 70 ret void 71} 72 73define void @patchable1(i1 %a) nounwind "patchable-function-entry"="2" { 74; CHECK-LABEL: patchable1: 75; CHECK-NEXT: .Lfunc_begin1: 76; CHECK-NEXT: # %bb.0: 77; CHECK-NEXT: nop 78; CHECK-NEXT: nop 79; CHECK: # %bb.1: 80; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]] 81; CHECK-NEXT: call foo 82; CHECK-LABEL: .LBB3_2: 83; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]] 84; CHECK-NEXT: call foo 85entry: 86 br i1 %a, label %if.then, label %if.end 87if.then: 88 call void @foo(i32 1, i32 2, i32 3, i32 4) 89 br label %if.end 90if.end: 91 call void @foo(i32 5, i32 6, i32 7, i32 8) 92 ret void 93} 94