| ; RUN: llc < %s -verify-machineinstrs -enable-machine-outliner | FileCheck %s |
| |
| target triple = "riscv64-unknown-linux-gnu" |
| |
| declare void @foo(i32, i32, i32, i32) minsize |
| |
| define void @fentry0(i1 %a) nounwind { |
| ; CHECK-LABEL: fentry0: |
| ; CHECK: # %bb.1: |
| ; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]] |
| ; CHECK-NEXT: call foo |
| ; CHECK-LABEL: .LBB0_2: |
| ; CHECK-NEXT: tail OUTLINED_FUNCTION_[[BB2:[0-9]+]] |
| entry: |
| br i1 %a, label %if.then, label %if.end |
| if.then: |
| call void @foo(i32 1, i32 2, i32 3, i32 4) |
| br label %if.end |
| if.end: |
| call void @foo(i32 5, i32 6, i32 7, i32 8) |
| ret void |
| } |
| |
| define void @fentry1(i1 %a) nounwind { |
| ; CHECK-LABEL: fentry1: |
| ; CHECK: # %bb.1: |
| ; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]] |
| ; CHECK-NEXT: call foo |
| ; CHECK-LABEL: .LBB1_2: |
| ; CHECK-NEXT: tail OUTLINED_FUNCTION_[[BB2:[0-9]+]] |
| entry: |
| br i1 %a, label %if.then, label %if.end |
| if.then: |
| call void @foo(i32 1, i32 2, i32 3, i32 4) |
| br label %if.end |
| if.end: |
| call void @foo(i32 5, i32 6, i32 7, i32 8) |
| ret void |
| } |
| |
| define void @fentry2(i1 %a) nounwind { |
| ; CHECK-LABEL: fentry2: |
| ; CHECK: # %bb.1: |
| ; CHECK-NEXT: call t0, OUTLINED_FUNCTION_[[BB1:[0-9]+]] |
| ; CHECK-NEXT: call foo |
| ; CHECK-LABEL: .LBB2_2: |
| ; CHECK-NEXT: tail OUTLINED_FUNCTION_[[BB2:[0-9]+]] |
| entry: |
| br i1 %a, label %if.then, label %if.end |
| if.then: |
| call void @foo(i32 1, i32 2, i32 3, i32 4) |
| br label %if.end |
| if.end: |
| call void @foo(i32 5, i32 6, i32 7, i32 8) |
| ret void |
| } |
| |
| ; CHECK: OUTLINED_FUNCTION_[[BB2]]: |
| ; CHECK: li a0, 5 |
| ; CHECK-NEXT: li a1, 6 |
| ; CHECK-NEXT: li a2, 7 |
| ; CHECK-NEXT: li a3, 8 |
| ; CHECK-NEXT: call foo |
| |
| ; CHECK: OUTLINED_FUNCTION_[[BB1]]: |
| ; CHECK: li a0, 1 |
| ; CHECK-NEXT: li a1, 2 |
| ; CHECK-NEXT: li a2, 3 |
| ; CHECK-NEXT: li a3, 4 |
| ; CHECK-NEXT: jr t0 |