|
MimIR 0.1
MimIR is my Intermediate Representation
|
Rewrites the RWPhase::old_world into the RWPhase::new_world and swaps them afterwards.
More...
#include <mim/phase.h>
Public Member Functions | |
| bool | is_bootstrapping () const |
| Returns whether we are currently bootstrapping (rewriting annexes). | |
| virtual bool | analyze () |
| You can do an optional fixed-point loop on the RWPhase::old_world before rewriting. | |
Construction | |
| RWPhase (World &world, std::string name, Analysis *analysis=nullptr) | |
| RWPhase (World &world, flags_t annex, Analysis *analysis=nullptr) | |
Rewrite | |
| virtual void | rewrite_annex (flags_t, const Def *) |
| virtual void | rewrite_external (Def *) |
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 |
| 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::Phase | |
| bool | todo_ = false |
Set to true to indicate that you want to rerun all Phasees in your current fixed-point PhaseMan. | |
Protected Attributes inherited from mim::Stage | |
| std::string | name_ |
Protected Attributes inherited from mim::Rewriter | |
| std::deque< Def2Def > | old2news_ |
Rewrites the RWPhase::old_world into the RWPhase::new_world and swaps them afterwards.
This will destroy RWPhase::old_world leaving RWPhase::new_world which will be created here as the current World to work with. This Phase will recursively Rewriter::rewrite
true), and thenfalse). All rewrites that refer to another annex have to be skipped during bootstrapping. Definition at line 112 of file phase.h.
References mim::Stage::name(), mim::Phase::Phase(), mim::Rewriter::Rewriter(), and world().
Referenced by mim::BetaRedPhase::BetaRedPhase(), mim::BranchNormalizePhase::BranchNormalizePhase(), mim::Cleanup::Cleanup(), mim::Cleanup::Cleanup(), mim::EtaExpPhase::EtaExpPhase(), 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 116 of file phase.h.
References mim::Stage::annex(), mim::Phase::Phase(), mim::Rewriter::Rewriter(), and world().
|
virtual |
You can do an optional fixed-point loop on the RWPhase::old_world before rewriting.
If analysis_ is set, use this for the fixed-point loop.
false after the first run of analyze. Reimplemented in mim::BetaRedPhase, mim::EtaExpPhase, and mim::RetWrap.
Definition at line 65 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 124 of file phase.h.
Referenced by mim::plug::affine::phase::LowerFor::rewrite_imm_App(), and mim::plug::matrix::LowerMatrixLowLevel::rewrite_imm_App().
|
inline |
Create new Defs into this.
Definition at line 146 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::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 145 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 75 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 77 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 46 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::BranchNormalizePhase::BranchNormalizePhase(), mim::Cleanup::Cleanup(), mim::Cleanup::Cleanup(), mim::EtaExpPhase::EtaExpPhase(), 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().