|
MimIR 0.1
MimIR is my Intermediate Representation
|
Rebuilds old_world() into new_world() and then swaps them. More...
#include <mim/phase.h>
Public Member Functions | |
Construction | |
| RWPhase (World &world, std::string name, Analysis *analysis=nullptr) | |
| RWPhase (World &world, flags_t annex, Analysis *analysis=nullptr) | |
Analysis | |
| Analysis * | analysis () |
| const Analysis * | analysis () const |
| const Def * | lattice (const Def *old_def) |
| Returns the abstract value computed by the associated Analysis for the given old-world Def, or nullptr if no value is available. | |
| virtual bool | analyze () |
| Runs the optional pre-analysis on RWPhase::old_world(), typically to a fixed point, before rewriting begins. | |
Rewrite | |
| virtual void | rewrite_annex (flags_t, const Def *) |
| virtual void | rewrite_external (Def *) |
| bool | is_bootstrapping () const |
| Returns whether we are currently bootstrapping (rewriting annexes). | |
World | |
| |
| World & | world ()=delete |
| Hides both and forbids direct access. | |
| World & | old_world () |
| Get old Defs from here. | |
| World & | new_world () |
| Create new Defs into this. | |
| Public Member Functions inherited from mim::Phase | |
| Phase (World &world, std::string name) | |
| Phase (World &world, flags_t annex) | |
| bool | todo () const |
| void | invalidate (bool todo=true) |
| Signals that another round of fixed-point iteration is required, either as part of. | |
| virtual void | run () |
| Entry point and generates some debug output; invokes Phase::start. | |
| Public Member Functions inherited from mim::Stage | |
| World & | world () |
| Driver & | driver () |
| Log & | log () const |
| std::string_view | name () const |
| flags_t | annex () const |
| Stage (World &world, std::string name) | |
| Stage (World &world, flags_t annex) | |
| virtual | ~Stage ()=default |
| virtual std::unique_ptr< Stage > | recreate () |
| Creates a new instance; needed by a fixed-point PhaseMan. | |
| virtual void | apply (const App *) |
| Invoked if your Stage has additional args. | |
| virtual void | apply (Stage &) |
| Dito, but invoked by Stage::recreate. | |
| Public Member Functions inherited from mim::Rewriter | |
| Rewriter (std::unique_ptr< World > &&ptr) | |
| Rewriter (World &world) | |
| virtual | ~Rewriter ()=default |
| void | reset (std::unique_ptr< World > &&ptr) |
| void | reset () |
| World & | world () |
| virtual void | push () |
| virtual void | pop () |
| virtual const Def * | map (const Def *old_def, const Def *new_def) |
| const Def * | map (const Def *old_def, Defs new_defs) |
| const Def * | map (Defs old_defs, const Def *new_def) |
| const Def * | map (Defs old_defs, Defs new_defs) |
| virtual const Def * | lookup (const Def *old_def) |
| Lookup old_def by searching in reverse through the stack of maps. | |
| virtual const Def * | rewrite (const Def *) |
| virtual const Def * | rewrite_imm (const Def *) |
| virtual const Def * | rewrite_mut (Def *) |
| virtual const Def * | rewrite_stub (Def *, Def *) |
| virtual DefVec | rewrite (Defs) |
| virtual const Def * | rewrite_imm_Seq (const Seq *seq) |
| virtual const Def * | rewrite_mut_Seq (Seq *seq) |
Protected Member Functions | |
| void | start () override |
| Actual entry. | |
Additional Inherited Members | |
| template<class P, class... Args> | |
| static void | run (Args &&... args) |
| Runs a single Phase. | |
| static auto | create (const Flags2Stages &stages, const Def *def) |
| template<class A, class P> | |
| static void | hook (Flags2Stages &stages) |
| Protected Attributes inherited from mim::Stage | |
| std::string | name_ |
| Protected Attributes inherited from mim::Rewriter | |
| std::deque< Def2Def > | old2news_ |
Rebuilds old_world() into new_world() and then swaps them.
It recursively rewrites
During bootstrapping, rewrites that depend on other annexes may need to be skipped, since those annexes might not yet exist in the new world.
If an associated Analysis is provided, the rewrite can query its abstract results through lattice().
Definition at line 146 of file phase.h.
References mim::Phase::Analysis, analysis(), mim::Stage::name(), mim::Phase::Phase(), mim::Rewriter::Rewriter(), and world().
Referenced by mim::BetaRedPhase::BetaRedPhase(), mim::BetaRedPhase::BetaRedPhase(), mim::BranchNormalizePhase::BranchNormalizePhase(), mim::Cleanup::Cleanup(), mim::Cleanup::Cleanup(), mim::plug::direct::DS2CPS::DS2CPS(), mim::EtaExpPhase::EtaExpPhase(), mim::EtaExpPhase::EtaExpPhase(), mim::EtaRedPhase::EtaRedPhase(), mim::EtaRedPhase::EtaRedPhase(), mim::plug::affine::phase::LowerFor::LowerFor(), mim::plug::matrix::LowerMatrixLowLevel::LowerMatrixLowLevel(), mim::PrefixCleanup::PrefixCleanup(), mim::ReplManPhase::ReplManPhase(), mim::ReplManPhase::ReplManPhase(), mim::RetWrap::RetWrap(), and mim::SymExprOpt::SymExprOpt().
Definition at line 150 of file phase.h.
References mim::Phase::Analysis, analysis(), mim::Stage::annex(), mim::Phase::Phase(), mim::Rewriter::Rewriter(), and world().
|
inline |
Definition at line 158 of file phase.h.
References mim::Phase::Analysis.
|
inline |
Definition at line 159 of file phase.h.
References mim::Phase::Analysis.
|
virtual |
Runs the optional pre-analysis on RWPhase::old_world(), typically to a fixed point, before rewriting begins.
If analysis() is set, this is the natural place to iterate until Phase::todo() becomes false. If no Analysis is needed, simply return false.
Reimplemented in mim::BetaRedPhase, mim::EtaExpPhase, and mim::RetWrap.
Definition at line 84 of file phase.cpp.
Referenced by start().
|
inline |
Returns whether we are currently bootstrapping (rewriting annexes).
While bootstrapping, you have to skip rewrites that refer to other annexes, as they might not yet be available.
Definition at line 183 of file phase.h.
Referenced by mim::plug::affine::phase::LowerFor::rewrite_imm_App(), and mim::plug::matrix::LowerMatrixLowLevel::rewrite_imm_App().
Returns the abstract value computed by the associated Analysis for the given old-world Def, or nullptr if no value is available.
Definition at line 163 of file phase.h.
Referenced by mim::SymExprOpt::rewrite_imm_App().
|
inline |
Create new Defs into this.
Definition at line 195 of file phase.h.
References mim::Rewriter::world().
Referenced by mim::EtaExpPhase::rewrite_annex(), rewrite_annex(), mim::EtaExpPhase::rewrite_imm_App(), mim::plug::affine::phase::LowerFor::rewrite_imm_App(), mim::plug::direct::DS2CPS::rewrite_imm_App(), mim::plug::matrix::LowerMatrixLowLevel::rewrite_imm_App(), mim::SymExprOpt::rewrite_imm_App(), mim::EtaExpPhase::rewrite_imm_Var(), mim::EtaRedPhase::rewrite_imm_Var(), mim::RetWrap::rewrite_mut_Lam(), and start().
|
inline |
Get old Defs from here.
Definition at line 194 of file phase.h.
References mim::Stage::world().
Referenced by mim::BetaRedPhase::analyze(), mim::EtaExpPhase::analyze(), mim::RetWrap::analyze(), mim::ReplManPhase::apply(), mim::RetWrap::rewrite_mut_Lam(), mim::ReplManPhase::start(), and start().
Reimplemented in mim::EtaExpPhase.
Definition at line 94 of file phase.cpp.
References new_world(), mim::World::register_annex(), and mim::Rewriter::rewrite().
Referenced by start().
|
virtual |
Reimplemented in mim::EtaExpPhase, mim::EtaRedPhase, and mim::PrefixCleanup.
Definition at line 96 of file phase.cpp.
References mim::Def::as_mut(), mim::Def::is_external(), and mim::Rewriter::rewrite().
Referenced by start().
|
overrideprotectedvirtual |
Actual entry.
Implements mim::Phase.
Definition at line 65 of file phase.cpp.
References analyze(), new_world(), old_world(), rewrite_annex(), rewrite_external(), mim::Rewriter::swap, mim::Phase::todo(), and VLOG.
Referenced by mim::ReplManPhase::start().
|
delete |
Hides both and forbids direct access.
Referenced by mim::BetaRedPhase::BetaRedPhase(), mim::BetaRedPhase::BetaRedPhase(), mim::BranchNormalizePhase::BranchNormalizePhase(), mim::Cleanup::Cleanup(), mim::Cleanup::Cleanup(), mim::plug::direct::DS2CPS::DS2CPS(), mim::EtaExpPhase::EtaExpPhase(), mim::EtaExpPhase::EtaExpPhase(), mim::EtaRedPhase::EtaRedPhase(), mim::EtaRedPhase::EtaRedPhase(), mim::plug::affine::phase::LowerFor::LowerFor(), mim::plug::matrix::LowerMatrixLowLevel::LowerMatrixLowLevel(), mim::PrefixCleanup::PrefixCleanup(), mim::ReplManPhase::ReplManPhase(), mim::ReplManPhase::ReplManPhase(), mim::RetWrap::RetWrap(), RWPhase(), RWPhase(), and mim::SymExprOpt::SymExprOpt().