xref: /llvm-project/llvm/test/CodeGen/RISCV/machine-combiner-strategies.ll (revision 37b474a20e8a731bec9db7033e02013c07bd6fa4)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -verify-machineinstrs -mcpu=syntacore-scr1-max \
3; RUN: -O1 -riscv-enable-machine-combiner=true -riscv-force-machine-combiner-strategy=local < %s | \
4; RUN: FileCheck %s --check-prefixes=CHECK_LOCAL_SCR1
5
6; RUN: llc -mtriple=riscv32 -verify-machineinstrs -mcpu=syntacore-scr1-max \
7; RUN: -O1 -riscv-enable-machine-combiner=true -riscv-force-machine-combiner-strategy=min-instr < %s | \
8; RUN: FileCheck %s --check-prefixes=CHECK_GLOBAL_SCR1
9
10; RUN: llc -mtriple=riscv64 -verify-machineinstrs -mcpu=sifive-u74 \
11; RUN: -O1 -riscv-enable-machine-combiner=true -riscv-force-machine-combiner-strategy=local < %s | \
12; RUN: FileCheck %s --check-prefixes=CHECK_LOCAL_SIFIVE_U74
13
14; RUN: llc -mtriple=riscv64 -verify-machineinstrs -mcpu=sifive-u74 \
15; RUN: -O1 -riscv-enable-machine-combiner=true -riscv-force-machine-combiner-strategy=min-instr < %s | \
16; RUN: FileCheck %s --check-prefixes=CHECK_GLOBAL_SIFIVE_U74
17
18define i32 @test_local_strategy(i32 %a0, i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5) {
19; CHECK_LOCAL_SCR1-LABEL: test_local_strategy:
20; CHECK_LOCAL_SCR1:       # %bb.0: # %entry
21; CHECK_LOCAL_SCR1-NEXT:    div a0, a0, a1
22; CHECK_LOCAL_SCR1-NEXT:    sub a0, a0, a2
23; CHECK_LOCAL_SCR1-NEXT:    beqz a0, .LBB0_2
24; CHECK_LOCAL_SCR1-NEXT:  # %bb.1: # %b2
25; CHECK_LOCAL_SCR1-NEXT:    ret
26; CHECK_LOCAL_SCR1-NEXT:  .LBB0_2: # %b1
27; CHECK_LOCAL_SCR1-NEXT:    add a3, a3, a4
28; CHECK_LOCAL_SCR1-NEXT:    add a0, a0, a5
29; CHECK_LOCAL_SCR1-NEXT:    add a0, a0, a3
30; CHECK_LOCAL_SCR1-NEXT:    ret
31;
32; CHECK_GLOBAL_SCR1-LABEL: test_local_strategy:
33; CHECK_GLOBAL_SCR1:       # %bb.0: # %entry
34; CHECK_GLOBAL_SCR1-NEXT:    div a0, a0, a1
35; CHECK_GLOBAL_SCR1-NEXT:    sub a0, a0, a2
36; CHECK_GLOBAL_SCR1-NEXT:    beqz a0, .LBB0_2
37; CHECK_GLOBAL_SCR1-NEXT:  # %bb.1: # %b2
38; CHECK_GLOBAL_SCR1-NEXT:    ret
39; CHECK_GLOBAL_SCR1-NEXT:  .LBB0_2: # %b1
40; CHECK_GLOBAL_SCR1-NEXT:    add a3, a3, a4
41; CHECK_GLOBAL_SCR1-NEXT:    add a3, a3, a5
42; CHECK_GLOBAL_SCR1-NEXT:    add a0, a0, a3
43; CHECK_GLOBAL_SCR1-NEXT:    ret
44;
45; CHECK_LOCAL_SIFIVE_U74-LABEL: test_local_strategy:
46; CHECK_LOCAL_SIFIVE_U74:       # %bb.0: # %entry
47; CHECK_LOCAL_SIFIVE_U74-NEXT:    divw a0, a0, a1
48; CHECK_LOCAL_SIFIVE_U74-NEXT:    subw a0, a0, a2
49; CHECK_LOCAL_SIFIVE_U74-NEXT:    beqz a0, .LBB0_2
50; CHECK_LOCAL_SIFIVE_U74-NEXT:  # %bb.1: # %b2
51; CHECK_LOCAL_SIFIVE_U74-NEXT:    ret
52; CHECK_LOCAL_SIFIVE_U74-NEXT:  .LBB0_2: # %b1
53; CHECK_LOCAL_SIFIVE_U74-NEXT:    add a3, a3, a4
54; CHECK_LOCAL_SIFIVE_U74-NEXT:    add a0, a0, a5
55; CHECK_LOCAL_SIFIVE_U74-NEXT:    addw a0, a0, a3
56; CHECK_LOCAL_SIFIVE_U74-NEXT:    ret
57;
58; CHECK_GLOBAL_SIFIVE_U74-LABEL: test_local_strategy:
59; CHECK_GLOBAL_SIFIVE_U74:       # %bb.0: # %entry
60; CHECK_GLOBAL_SIFIVE_U74-NEXT:    divw a0, a0, a1
61; CHECK_GLOBAL_SIFIVE_U74-NEXT:    subw a0, a0, a2
62; CHECK_GLOBAL_SIFIVE_U74-NEXT:    beqz a0, .LBB0_2
63; CHECK_GLOBAL_SIFIVE_U74-NEXT:  # %bb.1: # %b2
64; CHECK_GLOBAL_SIFIVE_U74-NEXT:    ret
65; CHECK_GLOBAL_SIFIVE_U74-NEXT:  .LBB0_2: # %b1
66; CHECK_GLOBAL_SIFIVE_U74-NEXT:    add a3, a3, a4
67; CHECK_GLOBAL_SIFIVE_U74-NEXT:    add a3, a3, a5
68; CHECK_GLOBAL_SIFIVE_U74-NEXT:    addw a0, a0, a3
69; CHECK_GLOBAL_SIFIVE_U74-NEXT:    ret
70entry:
71  %div = sdiv i32 %a0, %a1
72  %sub0 = sub i32 %div, %a2
73  %cmp = icmp eq i32 %sub0, 0
74  br i1 %cmp, label %b1, label %b2
75b1:
76  %sub1 = add i32 %a3, %a4
77  %sub2 = add i32 %a5, %sub1
78  %sub3 = add i32 %sub2, %sub0
79  ret i32 %sub3
80b2:
81  ret i32 %sub0
82}
83