Convert riscv scf for to frep
convert_riscv_scf_for_to_frep
ALLOWED_FREP_OP_LOWERING_TYPES = (*(riscv_snitch.ALLOWED_FREP_OP_TYPES), riscv_scf.YieldOp)
module-attribute
ScfForLowering
Bases: RewritePattern
Source code in xdsl/transforms/convert_riscv_scf_for_to_frep.py
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | |
match_and_rewrite(op: riscv_scf.ForOp, rewriter: PatternRewriter) -> None
Source code in xdsl/transforms/convert_riscv_scf_for_to_frep.py
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | |
ScfYieldLowering
Bases: RewritePattern
Source code in xdsl/transforms/convert_riscv_scf_for_to_frep.py
76 77 78 79 80 81 82 | |
match_and_rewrite(op: riscv_scf.YieldOp, rewriter: PatternRewriter) -> None
Source code in xdsl/transforms/convert_riscv_scf_for_to_frep.py
77 78 79 80 81 82 | |
ConvertRiscvScfForToFrepPass
dataclass
Bases: ModulePass
Converts all riscv_scf.for loops to riscv_snitch.frep_outer loops, if the loops pass the riscv_snitch.frep_outer verification criteria:
- The induction variable is not used
- Step is 1
- All operations in the loop all operate on float registers
- All operations are pure or one of a) riscv_snitch.read b) riscv_snitch.write c) builtin.unrealized_conversion_cast
Source code in xdsl/transforms/convert_riscv_scf_for_to_frep.py
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | |
name = 'convert-riscv-scf-for-to-frep'
class-attribute
instance-attribute
apply(ctx: Context, op: builtin.ModuleOp) -> None
Source code in xdsl/transforms/convert_riscv_scf_for_to_frep.py
102 103 104 105 106 107 108 109 110 111 | |