Compactify
CFGCompactify dataclass
CFGCompactify()
Bases: RewriteRule
flowchart TD
kirin.rewrite.compactify.CFGCompactify[CFGCompactify]
kirin.rewrite.abc.RewriteRule[RewriteRule]
kirin.rewrite.abc.RewriteRule --> kirin.rewrite.compactify.CFGCompactify
click kirin.rewrite.compactify.CFGCompactify href "" "kirin.rewrite.compactify.CFGCompactify"
click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.RewriteRule"
Compactify the CFG by removing dead blocks and merging blocks if the statement uses the SSACFG convention. Do nothing if given ir.Region or ir.Block due to no context of the region.
To compactify hierarchical CFG, combine this rule with kirin.rewrite.Walk to recursively apply this rule to all statements.
CFGEdge dataclass
CFGEdge(cfg: CFG)
Bases: RewriteRule
flowchart TD
kirin.rewrite.compactify.CFGEdge[CFGEdge]
kirin.rewrite.abc.RewriteRule[RewriteRule]
kirin.rewrite.abc.RewriteRule --> kirin.rewrite.compactify.CFGEdge
click kirin.rewrite.compactify.CFGEdge href "" "kirin.rewrite.compactify.CFGEdge"
click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.RewriteRule"
Merge non-branching blocks on the edge of the CFG.
Example:
/---> [B] --> [D] --> [E]
[A]-----> [C] -------------^
[B] and [D] are non-branching blocks on the same edge. They can be merged into one block.
/---> [B,D] --> [E]
[A]-----> [C] -------^
CompactifyRegion dataclass
CompactifyRegion(cfg: CFG)
Bases: RewriteRule
flowchart TD
kirin.rewrite.compactify.CompactifyRegion[CompactifyRegion]
kirin.rewrite.abc.RewriteRule[RewriteRule]
kirin.rewrite.abc.RewriteRule --> kirin.rewrite.compactify.CompactifyRegion
click kirin.rewrite.compactify.CompactifyRegion href "" "kirin.rewrite.compactify.CompactifyRegion"
click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.RewriteRule"
Wrapper to share the CFG object with same CFG region.
Source code in src/kirin/rewrite/compactify.py
258 259 260 261 262 263 264 | |
DeadBlock dataclass
DeadBlock(cfg: CFG)
Bases: RewriteRule
flowchart TD
kirin.rewrite.compactify.DeadBlock[DeadBlock]
kirin.rewrite.abc.RewriteRule[RewriteRule]
kirin.rewrite.abc.RewriteRule --> kirin.rewrite.compactify.DeadBlock
click kirin.rewrite.compactify.DeadBlock href "" "kirin.rewrite.compactify.DeadBlock"
click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.RewriteRule"
Compactify the CFG by removing dead blocks.
DuplicatedBranch dataclass
DuplicatedBranch()
Bases: RewriteRule
flowchart TD
kirin.rewrite.compactify.DuplicatedBranch[DuplicatedBranch]
kirin.rewrite.abc.RewriteRule[RewriteRule]
kirin.rewrite.abc.RewriteRule --> kirin.rewrite.compactify.DuplicatedBranch
click kirin.rewrite.compactify.DuplicatedBranch href "" "kirin.rewrite.compactify.DuplicatedBranch"
click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.RewriteRule"
Merge duplicated branches into a single branch.
Example:
[A]-->[B]
-----^
Merge the two branches into one without changing the CFG:
[A]-->[B]
SkipBlock dataclass
SkipBlock(cfg: CFG)
Bases: RewriteRule
flowchart TD
kirin.rewrite.compactify.SkipBlock[SkipBlock]
kirin.rewrite.abc.RewriteRule[RewriteRule]
kirin.rewrite.abc.RewriteRule --> kirin.rewrite.compactify.SkipBlock
click kirin.rewrite.compactify.SkipBlock href "" "kirin.rewrite.compactify.SkipBlock"
click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.RewriteRule"
Simplify a block that only contains a branch statement.