Recurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map. More...
#include <mim/rewrite.h>
Public Member Functions | |
| template<class D = Def> | |
| D * | curr_mut () const |
Construction & Destruction | |
| Rewriter (std::unique_ptr< World > &&ptr) | |
| Rewriter (World &world) | |
| virtual | ~Rewriter () |
| void | reset (std::unique_ptr< World > &&ptr) |
| void | reset () |
Getters | |
| World & | world () |
Push / Pop | |
| virtual void | push () |
| virtual void | pop () |
Map / Lookup | |
Map | |
| virtual const Def * | map (const Def *old_def, const Def *new_def) |
| const Def * | map_root (const Def *old_def, const Def *new_def) |
| Like map() but records into the root map, so the entry outlives the current push()/pop() scope. | |
| 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. | |
rewrite | |
Recursively rewrite old Defs. | |
| 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 | |
| auto | enter (Def *new_mut) |
Updates curr_mut() to new_mut and restores it at the end of the scope. | |
Protected Attributes | |
| std::deque< Def2Def > | old2news_ |
Friends | |
| void | swap (Rewriter &rw1, Rewriter &rw2) noexcept |
Recurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map.
This World may be different than the World we started with.
| mim::Rewriter::Rewriter | ( | std::unique_ptr< World > && | ptr | ) |
Definition at line 16 of file rewrite.cpp.
References push().
Referenced by mim::Analysis::Analysis(), mim::Analysis::Analysis(), mim::RWBase::RWBase(), mim::RWBase::RWBase(), mim::RWBase::RWBase(), mim::RWBase::RWBase(), swap, mim::VarRewriter::swap, mim::Zonker::swap, mim::VarRewriter::VarRewriter(), mim::VarRewriter::VarRewriter(), and mim::Zonker::Zonker().
| mim::Rewriter::Rewriter | ( | World & | world | ) |
Definition at line 22 of file rewrite.cpp.
|
virtualdefault |
References reset().
|
inline |
Definition at line 96 of file rewrite.h.
Referenced by mim::plug::clos::phase::ClosConvPrep::rewrite_imm_App(), and mim::plug::mem::phase::SEO::rewrite_imm_App().
|
inlineprotected |
Updates curr_mut() to new_mut and restores it at the end of the scope.
Definition at line 109 of file rewrite.h.
Referenced by mim::InplaceRWPhase::rewrite_mut(), and rewrite_stub().
Lookup old_def by searching in reverse through the stack of maps.
Reimplemented in mim::Zonker.
Definition at line 62 of file rewrite.h.
References old2news_.
Referenced by mim::plug::clos::phase::LowerTypedClos::rewrite(), rewrite(), mim::VarRewriter::rewrite(), mim::plug::affine::phase::LowerIndex::rewrite_imm_App(), and mim::Analysis::rewrite_mut().
Reimplemented in mim::plug::cps::Conv, and mim::Zonker.
Definition at line 47 of file rewrite.h.
References old2news_.
Referenced by mim::VarRewriter::add(), mim::Analysis::lattice(), mim::Analysis::lattice_force(), map(), map(), map(), mim::plug::clos::phase::LowerTypedClos::rewrite(), rewrite_imm(), mim::BetaRed::rewrite_imm_App(), mim::plug::affine::phase::LowerFor::rewrite_imm_App(), mim::plug::affine::phase::LowerIndex::rewrite_imm_App(), mim::plug::gpu::phase::RemoveDoubleSyncs::rewrite_imm_App(), mim::plug::mem::phase::SEO::rewrite_imm_App(), mim::Analysis::rewrite_mut(), mim::InplaceRWPhase::rewrite_mut(), mim::plug::clos::phase::ClosConv::rewrite_mut_Lam(), mim::plug::mem::phase::AddMem::rewrite_mut_Lam(), mim::RetWrap::rewrite_mut_Lam(), mim::Scalarize::rewrite_mut_Lam(), mim::StaticArgOpt::rewrite_mut_Lam(), rewrite_mut_Seq(), rewrite_stub(), and mim::Analysis::start().
Definition at line 41 of file rewrite.cpp.
References map(), mim::World::tuple(), and world().
Definition at line 45 of file rewrite.cpp.
References map(), mim::World::tuple(), and world().
Definition at line 49 of file rewrite.cpp.
References map(), mim::World::tuple(), and world().
Like map() but records into the root map, so the entry outlives the current push()/pop() scope.
Use this for a context-free mapping - e.g. a Var of a rebuilt binder - that must stay valid after a scope opened by rewrite_mut_Seq's scalarization is popped again.
Definition at line 52 of file rewrite.h.
References old2news_.
|
inlinevirtual |
Reimplemented in mim::VarRewriter.
Definition at line 41 of file rewrite.h.
References old2news_.
Referenced by mim::plug::clos::phase::ClosConv::finalize(), mim::VarRewriter::pop(), reset(), mim::plug::clos::phase::ClosConv::rewrite_external(), mim::plug::affine::phase::LowerFor::rewrite_imm_App(), mim::plug::affine::phase::LowerIndex::rewrite_imm_App(), mim::plug::clos::phase::ClosConv::rewrite_mut_Global(), and rewrite_mut_Seq().
|
inlinevirtual |
Reimplemented in mim::VarRewriter.
Definition at line 40 of file rewrite.h.
References old2news_.
Referenced by mim::plug::clos::phase::ClosConv::finalize(), mim::VarRewriter::push(), mim::Analysis::reset(), reset(), mim::plug::clos::phase::ClosConv::rewrite_external(), mim::plug::affine::phase::LowerFor::rewrite_imm_App(), mim::plug::affine::phase::LowerIndex::rewrite_imm_App(), mim::plug::clos::phase::ClosConv::rewrite_mut_Global(), rewrite_mut_Seq(), Rewriter(), and Rewriter().
| void mim::Rewriter::reset | ( | ) |
Definition at line 35 of file rewrite.cpp.
| void mim::Rewriter::reset | ( | std::unique_ptr< World > && | ptr | ) |
Definition at line 29 of file rewrite.cpp.
References reset().
Referenced by reset(), and ~Rewriter().
Reimplemented in mim::Analysis, mim::EtaConv, mim::plug::affine::phase::LowerIndex, mim::plug::clos::phase::Clos2SJLJ, mim::plug::clos::phase::LowerTypedClos, mim::plug::mem::phase::AddMem, mim::plug::tensor::phase::LowerToMem, mim::Repl, mim::RetWrap, mim::VarRewriter, and mim::Zonker.
Definition at line 55 of file rewrite.cpp.
References mim::Def::dbg_key(), mim::Def::isa_mut(), lookup(), rewrite_imm(), and rewrite_mut().
Referenced by mim::plug::autodiff::phase::Eval::augment_(), mim::Analysis::rewrite(), mim::EtaConv::rewrite(), mim::plug::affine::phase::LowerIndex::rewrite(), mim::plug::clos::phase::Clos2SJLJ::rewrite(), mim::plug::clos::phase::LowerTypedClos::rewrite(), mim::plug::mem::phase::AddMem::rewrite(), mim::plug::tensor::phase::LowerToMem::rewrite(), mim::Repl::rewrite(), mim::RetWrap::rewrite(), rewrite(), mim::Zonker::rewrite(), mim::LamSpec::rewrite_imm_App(), mim::plug::affine::phase::LowerFor::rewrite_imm_App(), mim::plug::autodiff::phase::Eval::rewrite_imm_App(), mim::plug::buffer::LowerPtr::rewrite_imm_App(), mim::plug::clos::phase::BranchClosElim::rewrite_imm_App(), mim::plug::clos::phase::ClosConv::rewrite_imm_App(), mim::plug::clos::phase::ClosConvPrep::rewrite_imm_App(), mim::plug::cps::Conv::rewrite_imm_App(), mim::plug::gpu::phase::RemoveDoubleSyncs::rewrite_imm_App(), mim::plug::mem::phase::SEO::rewrite_imm_App(), mim::plug::regex::LowerRegex::rewrite_imm_App(), mim::plug::tensor::phase::Fuse::rewrite_imm_App(), mim::plug::tensor::phase::Lower::rewrite_imm_App(), mim::plug::tensor::phase::LowerMapReduce::rewrite_imm_App(), mim::Scalarize::rewrite_imm_App(), mim::StaticArgOpt::rewrite_imm_App(), mim::Scalarize::rewrite_imm_Pi(), rewrite_imm_Seq(), mim::plug::clos::phase::LowerTypedClosPrep::rewrite_imm_Tuple(), mim::InplaceRWPhase::rewrite_mut(), mim::plug::clos::phase::ClosConv::rewrite_mut_Lam(), mim::plug::cps::Conv::rewrite_mut_Lam(), mim::Scalarize::rewrite_mut_Lam(), mim::StaticArgOpt::rewrite_mut_Lam(), rewrite_mut_Seq(), mim::RWBase::rewrite_root(), rewrite_stub(), and mim::plug::gpu::phase::SplitOffKernels::start().
Definition at line 88 of file rewrite.cpp.
References rewrite().
Reimplemented in mim::plug::clos::phase::LowerTypedClos.
Definition at line 67 of file rewrite.cpp.
References CODE_IMM, map(), MIM_IMM_NODE, and mim::Def::node().
Referenced by rewrite(), mim::VarRewriter::rewrite(), and mim::plug::clos::phase::LowerTypedClos::rewrite_imm().
Definition at line 232 of file rewrite.cpp.
References mim::Def::arity(), mim::Seq::body(), mim::Def::is_intro(), mim::Lit::isa(), mim::World::prod(), rewrite(), mim::World::seq(), and world().
Referenced by mim::plug::mem::phase::AddMem::rewrite(), and rewrite_mut_Seq().
Reimplemented in mim::Analysis, mim::InplaceRWPhase, mim::VarRewriter, and mim::Zonker.
Definition at line 76 of file rewrite.cpp.
References CODE_MUT, MIM_MUT_NODE, and mim::Def::node().
Referenced by mim::plug::clos::phase::LowerTypedClos::rewrite(), rewrite(), mim::InplaceRWPhase::rewrite_mut(), and mim::VarRewriter::rewrite_mut().
Definition at line 238 of file rewrite.cpp.
References mim::Def::arity(), mim::Seq::body(), mim::Def::has_var(), mim::Def::is_immutabilizable(), mim::Def::is_intro(), mim::Def::is_set(), mim::Lit::isa(), map(), mim::World::mut_seq(), pop(), mim::World::prod(), push(), rewrite(), rewrite_imm_Seq(), rewrite_stub(), mim::Def::type(), world(), and mim::Def::zonk().
Definition at line 265 of file rewrite.cpp.
References enter(), mim::Def::immutabilize(), mim::Def::is_immutabilizable(), mim::Def::is_set(), map(), mim::Def::num_ops(), mim::Def::op(), rewrite(), and mim::Def::set().
Referenced by mim::RetWrap::rewrite_mut_Lam(), mim::Scalarize::rewrite_mut_Lam(), and rewrite_mut_Seq().
|
inline |
Definition at line 35 of file rewrite.h.
Referenced by map(), map(), map(), mim::RWPhase::new_world(), rewrite_imm_Seq(), mim::VarRewriter::rewrite_mut(), rewrite_mut_Seq(), Rewriter(), mim::RWBase::start(), mim::VarRewriter::VarRewriter(), mim::VarRewriter::VarRewriter(), and mim::Zonker::Zonker().
Definition at line 89 of file rewrite.h.
References Rewriter(), and swap.
Referenced by mim::plug::gpu::phase::SplitApply::start(), mim::RWPhase::start(), and swap.
|
protected |
Definition at line 106 of file rewrite.h.
Referenced by lookup(), mim::Zonker::lookup(), mim::plug::cps::Conv::map(), map(), mim::Zonker::map(), map_root(), pop(), push(), mim::Analysis::reset(), and reset().