Skip to content

Commit 8d2a3fd

Browse files
superlopuhEdmundGoodman
authored andcommitted
backend: (riscv) remove optimization level from test-lower-linalg-to-snitch (xdslproject#3385)
We introduced this for benchmarking purposes, but it was easier to just construct the pass pipeline programmatically instead in the test setup, so this is no longer used/useful.
1 parent 12d8a61 commit 8d2a3fd

File tree

3 files changed

+2
-156
lines changed

3 files changed

+2
-156
lines changed

tests/filecheck/projects/riscv-backend-paper/nsnet.mlir

-49
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
// RUN: xdsl-opt -p arith-add-fastmath,test-lower-linalg-to-snitch -t riscv-asm %s | filecheck %s
2-
// RUN: xdsl-opt -p arith-add-fastmath,test-lower-linalg-to-snitch{optimization-level=4} -t riscv-asm %s | filecheck %s
3-
// RUN: xdsl-opt -p arith-add-fastmath,test-lower-linalg-to-snitch{optimization-level=0} -t riscv-asm %s | filecheck %s --check-prefix=CHECK-OPT
42

53
func.func @main$async_dispatch_0_matmul_transpose_b_1x400x161_f64$xdsl_kernel1(%arg0: memref<1x161xf64>, %arg1: memref<5x161xf64, strided<[161, 1]>>, %arg2: memref<1x5xf64, strided<[40, 1]>>) {
64
linalg.generic {indexing_maps = [affine_map<(d0, d1, d2) -> (d0, d2)>, affine_map<(d0, d1, d2) -> (d1, d2)>, affine_map<(d0, d1, d2) -> (d0, d1)>], iterator_types = ["parallel", "parallel", "reduction"]} ins(%arg0, %arg1 : memref<1x161xf64>, memref<5x161xf64, strided<[161, 1]>>) outs(%arg2 : memref<1x5xf64, strided<[40, 1]>>) {
@@ -59,50 +57,3 @@ func.func @main$async_dispatch_0_matmul_transpose_b_1x400x161_f64$xdsl_kernel1(%
5957
// CHECK-NEXT: fsd ft3, 32(t0) # store double value to memref of shape (1, 5)
6058
// CHECK-NEXT: csrrci zero, 1984, 1
6159
// CHECK-NEXT: ret
62-
63-
// CHECK-OPT: .text
64-
// CHECK-OPT-NEXT: .globl main$async_dispatch_0_matmul_transpose_b_1x400x161_f64$xdsl_kernel1
65-
// CHECK-OPT-NEXT: .p2align 2
66-
// CHECK-OPT-NEXT: # Regalloc stats: {"preallocated_float": [], "preallocated_int": ["a0", "a1", "a2", "zero"], "allocated_float": ["ft0", "ft1", "ft2"], "allocated_int": ["a0", "a1", "a2", "a3", "a4", "a5", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "zero"]}
67-
// CHECK-OPT-NEXT: main$async_dispatch_0_matmul_transpose_b_1x400x161_f64$xdsl_kernel1:
68-
// CHECK-OPT-NEXT: mv t4, a0
69-
// CHECK-OPT-NEXT: mv t3, a1
70-
// CHECK-OPT-NEXT: mv t2, a2
71-
// CHECK-OPT-NEXT: li t6, 5
72-
// CHECK-OPT-NEXT: li t0, 161
73-
// CHECK-OPT-NEXT: mv t5, zero
74-
// CHECK-OPT-NEXT: # Constant folded riscv_cf.bge
75-
// CHECK-OPT-NEXT: scf_body_1_for:
76-
// CHECK-OPT-NEXT: mv a3, zero
77-
// CHECK-OPT-NEXT: # Constant folded riscv_cf.bge
78-
// CHECK-OPT-NEXT: scf_body_0_for:
79-
// CHECK-OPT-NEXT: mv a4, a3
80-
// CHECK-OPT-NEXT: li a5, 8
81-
// CHECK-OPT-NEXT: mul a4, a4, a5 # multiply by element size
82-
// CHECK-OPT-NEXT: add a4, t4, a4
83-
// CHECK-OPT-NEXT: fld ft0, 0(a4) # load double from memref of shape (1, 161)
84-
// CHECK-OPT-NEXT: li a4, 161
85-
// CHECK-OPT-NEXT: mul a4, t5, a4
86-
// CHECK-OPT-NEXT: add a4, a4, a3
87-
// CHECK-OPT-NEXT: li a5, 8
88-
// CHECK-OPT-NEXT: mul a4, a4, a5 # multiply by element size
89-
// CHECK-OPT-NEXT: add a4, t3, a4
90-
// CHECK-OPT-NEXT: fld ft1, 0(a4) # load double from memref of shape (5, 161)
91-
// CHECK-OPT-NEXT: mv a4, t5
92-
// CHECK-OPT-NEXT: li a5, 8
93-
// CHECK-OPT-NEXT: mul a4, a4, a5 # multiply by element size
94-
// CHECK-OPT-NEXT: add a4, t2, a4
95-
// CHECK-OPT-NEXT: fld ft2, 0(a4) # load double from memref of shape (1, 5)
96-
// CHECK-OPT-NEXT: fmadd.d ft0, ft0, ft1, ft2
97-
// CHECK-OPT-NEXT: mv a4, t5
98-
// CHECK-OPT-NEXT: li a5, 8
99-
// CHECK-OPT-NEXT: mul a4, a4, a5 # multiply by element size
100-
// CHECK-OPT-NEXT: add a4, t2, a4
101-
// CHECK-OPT-NEXT: fsd ft0, 0(a4) # store double value to memref of shape (1, 5)
102-
// CHECK-OPT-NEXT: addi a3, a3, 1
103-
// CHECK-OPT-NEXT: blt a3, t0, scf_body_0_for
104-
// CHECK-OPT-NEXT: scf_body_end_0_for:
105-
// CHECK-OPT-NEXT: addi t5, t5, 1
106-
// CHECK-OPT-NEXT: blt t5, t6, scf_body_1_for
107-
// CHECK-OPT-NEXT: scf_body_end_1_for:
108-
// CHECK-OPT-NEXT: ret

tests/transforms/test_test_lower_linalg_to_snitch.py

-48
This file was deleted.

xdsl/transforms/test_lower_linalg_to_snitch.py

+2-59
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass, field
1+
from dataclasses import dataclass
22

33
from xdsl.backend.riscv.lowering import (
44
convert_arith_to_riscv,
@@ -96,73 +96,16 @@
9696
memref_streamify.MemrefStreamifyPass(),
9797
)
9898

99-
MAX_OPT_LEVEL = len(LINALG_SNITCH_OPTIMIZATION_PASSES)
100-
101-
102-
def get_excluded_passes(
103-
optimization_level: int = MAX_OPT_LEVEL,
104-
) -> tuple[ModulePass, ...]:
105-
"""
106-
This function determines which optimization passes should be excluded from the
107-
lowering pipeline based on the specified optimization level. A higher optimization
108-
level includes more passes.
109-
110-
Args:
111-
optimization_level (int): The desired optimization level, ranging from 0 to
112-
4 (inclusive). Defaults to 4.
113-
114-
Returns:
115-
tuple[ModulePass, ...]: A tuple containing the ModulePass objects to be excluded
116-
from the lowering pipeline.
117-
"""
118-
119-
if optimization_level == MAX_OPT_LEVEL:
120-
return ()
121-
122-
return (
123-
LINALG_SNITCH_OPTIMIZATION_PASSES[:-optimization_level]
124-
if optimization_level
125-
else LINALG_SNITCH_OPTIMIZATION_PASSES
126-
)
127-
128-
129-
def get_passes(optimization_level: int = MAX_OPT_LEVEL) -> tuple[ModulePass, ...]:
130-
"""
131-
This function returns a tuple of ModulePass objects to be applied in the lowering
132-
pipeline, based on the specified optimization level.
133-
134-
Args:
135-
optimization_level (int): The desired optimization level, ranging from 0 to
136-
4 (inclusive). Defaults to 4.
137-
138-
Returns:
139-
tuple[ModulePass, ...]: A tuple containing the ModulePass objects to be applied
140-
in the lowering pipeline.
141-
"""
142-
143-
excluded_passes = get_excluded_passes(optimization_level)
144-
return tuple(
145-
p for p in TEST_LOWER_LINALG_TO_SNITCH_PASSES if p not in excluded_passes
146-
)
147-
14899

149100
@dataclass(frozen=True)
150101
class TestLowerLinalgToSnitchPass(ModulePass):
151102
"""
152103
A compiler pass used for testing lowering microkernels from linalg generic to snitch
153104
assembly.
154-
155-
Args:
156-
optimization_level (int): The desired optimization level, ranging from 0 to
157-
4 (inclusive). Defaults to 4.
158105
"""
159106

160107
name = "test-lower-linalg-to-snitch"
161108

162-
optimization_level: int = field(default=MAX_OPT_LEVEL)
163-
164109
def apply(self, ctx: MLContext, op: builtin.ModuleOp) -> None:
165-
passes = get_passes(self.optimization_level)
166-
167-
for p in passes:
110+
for p in TEST_LOWER_LINALG_TO_SNITCH_PASSES:
168111
p.apply(ctx, op)

0 commit comments

Comments
 (0)