MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches

Recurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map. More...

#include <mim/rewrite.h>

Inheritance diagram for mim::Rewriter:
[legend]

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
Worldworld ()
Push / Pop
virtual void push ()
virtual void pop ()
Map / Lookup

Map old_def to new_def and returns new_def.

virtual const Defmap (const Def *old_def, const Def *new_def)
const Defmap (const Def *old_def, Defs new_defs)
const Defmap (Defs old_defs, const Def *new_def)
const Defmap (Defs old_defs, Defs new_defs)
virtual const Deflookup (const Def *old_def)
 Lookup old_def by searching in reverse through the stack of maps.
rewrite

Recursively rewrite old Defs.

virtual const Defrewrite (const Def *)
virtual const Defrewrite_imm (const Def *)
virtual const Defrewrite_mut (Def *)
virtual const Defrewrite_stub (Def *, Def *)
virtual DefVec rewrite (Defs)
virtual const Defrewrite_imm_Seq (const Seq *seq)
virtual const Defrewrite_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< Def2Defold2news_

Friends

void swap (Rewriter &rw1, Rewriter &rw2) noexcept

Detailed Description

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.

See also
Rewriter

Definition at line 19 of file rewrite.h.

Constructor & Destructor Documentation

◆ Rewriter() [1/2]

◆ Rewriter() [2/2]

mim::Rewriter::Rewriter ( World & world)

Definition at line 23 of file rewrite.cpp.

References push(), and world().

◆ ~Rewriter()

mim::Rewriter::~Rewriter ( )
virtualdefault

Member Function Documentation

◆ curr_mut()

template<class D = Def>
D * mim::Rewriter::curr_mut ( ) const
inline

◆ enter()

auto mim::Rewriter::enter ( Def * new_mut)
inlineprotected

Updates curr_mut() to new_mut and restores it at the end of the scope.

Definition at line 102 of file rewrite.h.

Referenced by rewrite_stub().

◆ lookup()

virtual const Def * mim::Rewriter::lookup ( const Def * old_def)
inlinevirtual

Lookup old_def by searching in reverse through the stack of maps.

Returns
nullptr if nothing was found.

Reimplemented in mim::Zonker.

Definition at line 55 of file rewrite.h.

References old2news_.

Referenced by rewrite(), mim::VarRewriter::rewrite(), mim::plug::affine::phase::LowerIndex::rewrite_imm_App(), and mim::Analysis::rewrite_mut().

◆ map() [1/4]

◆ map() [2/4]

const Def * mim::Rewriter::map ( const Def * old_def,
Defs new_defs )

Definition at line 42 of file rewrite.cpp.

References map(), mim::World::tuple(), and world().

◆ map() [3/4]

const Def * mim::Rewriter::map ( Defs old_defs,
const Def * new_def )

Definition at line 46 of file rewrite.cpp.

References map(), mim::World::tuple(), and world().

◆ map() [4/4]

const Def * mim::Rewriter::map ( Defs old_defs,
Defs new_defs )

Definition at line 50 of file rewrite.cpp.

References map(), mim::World::tuple(), and world().

◆ pop()

◆ push()

◆ reset() [1/2]

void mim::Rewriter::reset ( )

Definition at line 36 of file rewrite.cpp.

References old2news_, pop(), and push().

Referenced by reset().

◆ reset() [2/2]

void mim::Rewriter::reset ( std::unique_ptr< World > && ptr)

Definition at line 30 of file rewrite.cpp.

References reset().

◆ rewrite() [1/2]

const Def * mim::Rewriter::rewrite ( const Def * old_def)
virtual

Reimplemented in mim::EtaConv, mim::plug::affine::phase::LowerIndex, mim::plug::clos::phase::LowerTypedClos, mim::plug::mem::phase::AddMem, mim::Repl, mim::RetWrap, mim::VarRewriter, and mim::Zonker.

Definition at line 56 of file rewrite.cpp.

References mim::Def::dbg(), mim::Def::isa_mut(), lookup(), rewrite_imm(), and rewrite_mut().

Referenced by mim::plug::autodiff::phase::Eval::augment_(), mim::EtaConv::rewrite(), mim::plug::affine::phase::LowerIndex::rewrite(), mim::plug::clos::phase::LowerTypedClos::rewrite(), mim::plug::mem::phase::AddMem::rewrite(), mim::Repl::rewrite(), mim::RetWrap::rewrite(), rewrite(), mim::Zonker::rewrite(), mim::Analysis::rewrite_annex(), mim::RWPhase::rewrite_annex(), mim::Analysis::rewrite_external(), mim::PrefixCleanup::rewrite_external(), mim::RWPhase::rewrite_external(), mim::BetaRed::rewrite_imm_App(), 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::matrix::phase::LowerMatrixHighLevelMapRed::rewrite_imm_App(), mim::plug::matrix::phase::LowerMatrixMediumLevel::rewrite_imm_App(), mim::plug::mem::phase::SEO::rewrite_imm_App(), mim::plug::regex::LowerRegex::rewrite_imm_App(), mim::plug::tensor::phase::LowerToMem::rewrite_imm_App(), mim::Scalarize::rewrite_imm_App(), mim::TailRecElim::rewrite_imm_App(), mim::Scalarize::rewrite_imm_Pi(), rewrite_imm_Seq(), mim::plug::clos::phase::LowerTypedClosPrep::rewrite_imm_Tuple(), mim::plug::clos::phase::ClosConv::rewrite_mut_Lam(), mim::plug::cps::Conv::rewrite_mut_Lam(), mim::plug::tensor::phase::LowerToMem::rewrite_mut_Lam(), mim::Scalarize::rewrite_mut_Lam(), mim::TailRecElim::rewrite_mut_Lam(), rewrite_mut_Seq(), rewrite_stub(), mim::Analysis::start(), mim::plug::clos::phase::ClosConv::start(), and mim::plug::gpu::phase::SplitOffKernels::start().

◆ rewrite() [2/2]

DefVec mim::Rewriter::rewrite ( Defs ops)
virtual

Definition at line 89 of file rewrite.cpp.

References rewrite().

◆ rewrite_imm()

const Def * mim::Rewriter::rewrite_imm ( const Def * old_def)
virtual

◆ rewrite_imm_Seq()

const Def * mim::Rewriter::rewrite_imm_Seq ( const Seq * seq)
virtual

◆ rewrite_mut()

const Def * mim::Rewriter::rewrite_mut ( Def * old_mut)
virtual

◆ rewrite_mut_Seq()

◆ rewrite_stub()

◆ world()

◆ swap

Member Data Documentation

◆ old2news_

std::deque<Def2Def> mim::Rewriter::old2news_
protected

The documentation for this class was generated from the following files: