94 lines · plain
1; RUN: llc < %s -verify-machineinstrs -enable-machine-outliner | FileCheck %s2 3target triple = "riscv64-unknown-linux-gnu"4 5declare void @foo(i32, i32, i32, i32) minsize6 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 call13; CHECK: # %bb.1:14; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]15; CHECK-NEXT: call foo16; CHECK-LABEL: .LBB0_2:17; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]]18; CHECK-NEXT: call foo19entry:20 br i1 %a, label %if.then, label %if.end21if.then:22 call void @foo(i32 1, i32 2, i32 3, i32 4)23 br label %if.end24if.end:25 call void @foo(i32 5, i32 6, i32 7, i32 8)26 ret void27}28 29define void @fentry1(i1 %a) nounwind "fentry-call"="true" {30; CHECK-LABEL: fentry1:31; CHECK-NEXT: # %bb.0:32; CHECK-NEXT: # FEntry call33; CHECK: # %bb.1:34; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]35; CHECK-NEXT: call foo36; CHECK-LABEL: .LBB1_2:37; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]]38; CHECK-NEXT: call foo39entry:40 br i1 %a, label %if.then, label %if.end41if.then:42 call void @foo(i32 1, i32 2, i32 3, i32 4)43 br label %if.end44if.end:45 call void @foo(i32 5, i32 6, i32 7, i32 8)46 ret void47}48 49;; TargetOpcode::PATCHABLE_FUNCTION_ENTER at the start of the function expands to50;; 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: nop56; CHECK-NEXT: nop57; CHECK: # %bb.1:58; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]59; CHECK-NEXT: call foo60; CHECK-LABEL: .LBB2_2:61; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]]62; CHECK-NEXT: call foo63entry:64 br i1 %a, label %if.then, label %if.end65if.then:66 call void @foo(i32 1, i32 2, i32 3, i32 4)67 br label %if.end68if.end:69 call void @foo(i32 5, i32 6, i32 7, i32 8)70 ret void71}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: nop78; CHECK-NEXT: nop79; CHECK: # %bb.1:80; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]81; CHECK-NEXT: call foo82; CHECK-LABEL: .LBB3_2:83; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB2:[0-9]+]]84; CHECK-NEXT: call foo85entry:86 br i1 %a, label %if.then, label %if.end87if.then:88 call void @foo(i32 1, i32 2, i32 3, i32 4)89 br label %if.end90if.end:91 call void @foo(i32 5, i32 6, i32 7, i32 8)92 ret void93}94