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