Forward Dataflow
Forward dataclass
Forward(
dialects: DialectGroup,
*,
max_depth: int = 800,
max_python_recursion_depth: int = 131072,
debug: bool = False
)
Bases: ForwardExtra[ForwardFrame[LatticeType], LatticeType], ABC
flowchart TD
kirin.analysis.forward.Forward[Forward]
kirin.analysis.forward.ForwardExtra[ForwardExtra]
kirin.interp.abstract.AbstractInterpreter[AbstractInterpreter]
kirin.interp.abc.InterpreterABC[InterpreterABC]
kirin.analysis.forward.ForwardExtra --> kirin.analysis.forward.Forward
kirin.interp.abstract.AbstractInterpreter --> kirin.analysis.forward.ForwardExtra
kirin.interp.abc.InterpreterABC --> kirin.interp.abstract.AbstractInterpreter
click kirin.analysis.forward.Forward href "" "kirin.analysis.forward.Forward"
click kirin.analysis.forward.ForwardExtra href "" "kirin.analysis.forward.ForwardExtra"
click kirin.interp.abstract.AbstractInterpreter href "" "kirin.interp.abstract.AbstractInterpreter"
click kirin.interp.abc.InterpreterABC href "" "kirin.interp.abc.InterpreterABC"
Forward dataflow analysis.
This is the base class for forward dataflow analysis. If your analysis requires extra information per frame, you should subclass ForwardExtra instead.
initialize_frame
initialize_frame(
node: Statement, *, has_parent_access: bool = False
) -> ForwardFrame[LatticeType]
Initialize a new call frame for the given callable node.
Source code in src/kirin/analysis/forward.py
66 67 68 69 | |
ForwardExtra dataclass
ForwardExtra(
dialects: DialectGroup,
*,
max_depth: int = 800,
max_python_recursion_depth: int = 131072,
debug: bool = False
)
Bases: AbstractInterpreter[FrameType, LatticeType], ABC
flowchart TD
kirin.analysis.forward.ForwardExtra[ForwardExtra]
kirin.interp.abstract.AbstractInterpreter[AbstractInterpreter]
kirin.interp.abc.InterpreterABC[InterpreterABC]
kirin.interp.abstract.AbstractInterpreter --> kirin.analysis.forward.ForwardExtra
kirin.interp.abc.InterpreterABC --> kirin.interp.abstract.AbstractInterpreter
click kirin.analysis.forward.ForwardExtra href "" "kirin.analysis.forward.ForwardExtra"
click kirin.interp.abstract.AbstractInterpreter href "" "kirin.interp.abstract.AbstractInterpreter"
click kirin.interp.abc.InterpreterABC href "" "kirin.interp.abc.InterpreterABC"
Forward dataflow analysis but with custom frame for extra information/state per call frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
FrameType | The type of the frame used for the analysis. | required | |
LatticeType | The type of the lattice used for the analysis. | required |
method_self abstractmethod
method_self(method: Method) -> LatticeType
Return the self value for the given method.
Source code in src/kirin/analysis/forward.py
51 52 53 54 | |
ForwardFrame dataclass
ForwardFrame(
code: Statement,
worklist: WorkList[Successor[ResultType]] = WorkList(),
visited: dict[
Block, set[Successor[ResultType]]
] = dict(),
*,
parent: FrameABC | None = None,
has_parent_access: bool = False,
lineno_offset: int = 0,
entries: dict[SSAValue, ValueType] = dict()
)
Bases: AbstractFrame[LatticeType]
flowchart TD
kirin.analysis.forward.ForwardFrame[ForwardFrame]
kirin.interp.abstract.AbstractFrame[AbstractFrame]
kirin.interp.frame.Frame[Frame]
kirin.interp.frame.FrameABC[FrameABC]
kirin.interp.abstract.AbstractFrame --> kirin.analysis.forward.ForwardFrame
kirin.interp.frame.Frame --> kirin.interp.abstract.AbstractFrame
kirin.interp.frame.FrameABC --> kirin.interp.frame.Frame
click kirin.analysis.forward.ForwardFrame href "" "kirin.analysis.forward.ForwardFrame"
click kirin.interp.abstract.AbstractFrame href "" "kirin.interp.abstract.AbstractFrame"
click kirin.interp.frame.Frame href "" "kirin.interp.frame.Frame"
click kirin.interp.frame.FrameABC href "" "kirin.interp.frame.FrameABC"
set_values
set_values(
keys: Iterable[SSAValue], values: Iterable[LatticeType]
) -> None
Set the values of the given keys. This is a convenience method to set multiple values at once.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
keys | Iterable[KeyType] | The keys to set the values for. | required |
values | Iterable[ValueType] | The values. | required |
Source code in src/kirin/analysis/forward.py
15 16 17 18 19 20 21 22 | |