xref: /llvm-project/llvm/test/CodeGen/RISCV/machine-outliner-call.ll (revision 80df56e03b0455382cec51557bfc9f099d5c0a6f)
1*80df56e0SMark Goncharov; RUN: llc < %s -verify-machineinstrs -enable-machine-outliner | FileCheck %s
2*80df56e0SMark Goncharov
3*80df56e0SMark Goncharovtarget triple = "riscv64-unknown-linux-gnu"
4*80df56e0SMark Goncharov
5*80df56e0SMark Goncharovdeclare void @foo(i32, i32, i32, i32) minsize
6*80df56e0SMark Goncharov
7*80df56e0SMark Goncharovdefine void @fentry0(i1 %a) nounwind {
8*80df56e0SMark Goncharov; CHECK-LABEL: fentry0:
9*80df56e0SMark Goncharov; CHECK:       # %bb.1:
10*80df56e0SMark Goncharov; CHECK-NEXT:    call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]
11*80df56e0SMark Goncharov; CHECK-NEXT:    call foo
12*80df56e0SMark Goncharov; CHECK-LABEL: .LBB0_2:
13*80df56e0SMark Goncharov; CHECK-NEXT:    tail OUTLINED_FUNCTION_[[BB2:[0-9]+]]
14*80df56e0SMark Goncharoventry:
15*80df56e0SMark Goncharov  br i1 %a, label %if.then, label %if.end
16*80df56e0SMark Goncharovif.then:
17*80df56e0SMark Goncharov  call void @foo(i32 1, i32 2, i32 3, i32 4)
18*80df56e0SMark Goncharov  br label %if.end
19*80df56e0SMark Goncharovif.end:
20*80df56e0SMark Goncharov  call void @foo(i32 5, i32 6, i32 7, i32 8)
21*80df56e0SMark Goncharov  ret void
22*80df56e0SMark Goncharov}
23*80df56e0SMark Goncharov
24*80df56e0SMark Goncharovdefine void @fentry1(i1 %a) nounwind {
25*80df56e0SMark Goncharov; CHECK-LABEL: fentry1:
26*80df56e0SMark Goncharov; CHECK:       # %bb.1:
27*80df56e0SMark Goncharov; CHECK-NEXT:    call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]
28*80df56e0SMark Goncharov; CHECK-NEXT:    call foo
29*80df56e0SMark Goncharov; CHECK-LABEL: .LBB1_2:
30*80df56e0SMark Goncharov; CHECK-NEXT:    tail OUTLINED_FUNCTION_[[BB2:[0-9]+]]
31*80df56e0SMark Goncharoventry:
32*80df56e0SMark Goncharov  br i1 %a, label %if.then, label %if.end
33*80df56e0SMark Goncharovif.then:
34*80df56e0SMark Goncharov  call void @foo(i32 1, i32 2, i32 3, i32 4)
35*80df56e0SMark Goncharov  br label %if.end
36*80df56e0SMark Goncharovif.end:
37*80df56e0SMark Goncharov  call void @foo(i32 5, i32 6, i32 7, i32 8)
38*80df56e0SMark Goncharov  ret void
39*80df56e0SMark Goncharov}
40*80df56e0SMark Goncharov
41*80df56e0SMark Goncharovdefine void @fentry2(i1 %a) nounwind {
42*80df56e0SMark Goncharov; CHECK-LABEL: fentry2:
43*80df56e0SMark Goncharov; CHECK:       # %bb.1:
44*80df56e0SMark Goncharov; CHECK-NEXT:    call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]]
45*80df56e0SMark Goncharov; CHECK-NEXT:    call foo
46*80df56e0SMark Goncharov; CHECK-LABEL: .LBB2_2:
47*80df56e0SMark Goncharov; CHECK-NEXT:    tail OUTLINED_FUNCTION_[[BB2:[0-9]+]]
48*80df56e0SMark Goncharoventry:
49*80df56e0SMark Goncharov  br i1 %a, label %if.then, label %if.end
50*80df56e0SMark Goncharovif.then:
51*80df56e0SMark Goncharov  call void @foo(i32 1, i32 2, i32 3, i32 4)
52*80df56e0SMark Goncharov  br label %if.end
53*80df56e0SMark Goncharovif.end:
54*80df56e0SMark Goncharov  call void @foo(i32 5, i32 6, i32 7, i32 8)
55*80df56e0SMark Goncharov  ret void
56*80df56e0SMark Goncharov}
57*80df56e0SMark Goncharov
58*80df56e0SMark Goncharov; CHECK:       OUTLINED_FUNCTION_[[BB2]]:
59*80df56e0SMark Goncharov; CHECK:       li      a0, 5
60*80df56e0SMark Goncharov; CHECK-NEXT:  li      a1, 6
61*80df56e0SMark Goncharov; CHECK-NEXT:  li      a2, 7
62*80df56e0SMark Goncharov; CHECK-NEXT:  li      a3, 8
63*80df56e0SMark Goncharov; CHECK-NEXT:  call foo
64*80df56e0SMark Goncharov
65*80df56e0SMark Goncharov; CHECK:       OUTLINED_FUNCTION_[[BB1]]:
66*80df56e0SMark Goncharov; CHECK:       li      a0, 1
67*80df56e0SMark Goncharov; CHECK-NEXT:  li      a1, 2
68*80df56e0SMark Goncharov; CHECK-NEXT:  li      a2, 3
69*80df56e0SMark Goncharov; CHECK-NEXT:  li      a3, 4
70*80df56e0SMark Goncharov; CHECK-NEXT:  jr      t0
71