-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathfrep.mlir
56 lines (51 loc) · 3.77 KB
/
frep.mlir
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// RUN: xdsl-opt -p "riscv-allocate-registers{allocation_strategy=LivenessBlockNaive}" %s | filecheck %s --check-prefix=CHECK-LIVENESS-BLOCK-NAIVE
// RUN: xdsl-opt -p "riscv-allocate-registers{allocation_strategy=LivenessBlockNaive limit_registers=0}" %s | filecheck %s --check-prefix=CHECK-LIVENESS-BLOCK-NAIVE-J
riscv_func.func @main() {
%0 = riscv.li 6 : !riscv.reg
%1 = riscv.li 5 : !riscv.reg<s0>
%2 = riscv.fcvt.s.w %0 : (!riscv.reg) -> !riscv.freg
%3 = riscv.fcvt.s.w %1 : (!riscv.reg<s0>) -> !riscv.freg
%4 = riscv.fadd.s %2, %3 : (!riscv.freg, !riscv.freg) -> !riscv.freg
%5 = riscv.add %0, %1 : (!riscv.reg, !riscv.reg<s0>) -> !riscv.reg
riscv_snitch.frep_outer %0 {
}
%7 = riscv_snitch.frep_outer %0 iter_args(%6 = %5) -> (!riscv.reg) {
%8 = riscv.mv %6 : (!riscv.reg) -> !riscv.reg
riscv_snitch.frep_yield %8 : !riscv.reg
}
riscv_func.return
}
// CHECK-LIVENESS-BLOCK-NAIVE: builtin.module {
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: riscv_func.func @main() {
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.li 6 : !riscv.reg<t1>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.li 5 : !riscv.reg<s0>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.fcvt.s.w %{{\d+}} : (!riscv.reg<t1>) -> !riscv.freg<ft0>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.fcvt.s.w %{{\d+}} : (!riscv.reg<s0>) -> !riscv.freg<ft1>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.fadd.s %{{\d+}}, %{{\d+}} : (!riscv.freg<ft0>, !riscv.freg<ft1>) -> !riscv.freg<ft0>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.add %{{\d+}}, %{{\d+}} : (!riscv.reg<t1>, !riscv.reg<s0>) -> !riscv.reg<t0>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: riscv_snitch.frep_outer %{{\d+}} {
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv_snitch.frep_outer %{{\d+}} iter_args(%{{\d+}} = %{{\d+}}) -> (!riscv.reg<t0>) {
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: %{{\d+}} = riscv.mv %{{\d+}} : (!riscv.reg<t0>) -> !riscv.reg<t0>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: riscv_snitch.frep_yield %{{\d+}} : !riscv.reg<t0>
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: riscv_func.return
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-J: builtin.module {
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: riscv_func.func @main() {
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.li 6 : !riscv.reg<j_1>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.li 5 : !riscv.reg<s0>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.fcvt.s.w %{{\d+}} : (!riscv.reg<j_1>) -> !riscv.freg<fj_0>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.fcvt.s.w %{{\d+}} : (!riscv.reg<s0>) -> !riscv.freg<fj_1>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.fadd.s %{{\d+}}, %{{\d+}} : (!riscv.freg<fj_0>, !riscv.freg<fj_1>) -> !riscv.freg<fj_0>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.add %{{\d+}}, %{{\d+}} : (!riscv.reg<j_1>, !riscv.reg<s0>) -> !riscv.reg<j_0>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: riscv_snitch.frep_outer %{{\d+}} {
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv_snitch.frep_outer %{{\d+}} iter_args(%{{\d+}} = %{{\d+}}) -> (!riscv.reg<j_0>) {
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: %{{\d+}} = riscv.mv %{{\d+}} : (!riscv.reg<j_0>) -> !riscv.reg<j_0>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: riscv_snitch.frep_yield %{{\d+}} : !riscv.reg<j_0>
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: riscv_func.return
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: }
// CHECK-LIVENESS-BLOCK-NAIVE-J-NEXT: }