MimIR 0.1
MimIR is my Intermediate Representation
|
This FPPass is similar to sparse conditional constant propagation (SCCP). More...
#include <mim/plug/mem/pass/copy_prop.h>
Public Types | |
using | Data = LamMap<DefVec> |
Public Types inherited from mim::FPPass< CopyProp, Lam > | |
using | Super |
using | Data |
Default. | |
Public Member Functions | |
CopyProp (PassMan &man, BetaRed *beta_red, EtaExp *eta_exp, bool bb_only=false) | |
Public Member Functions inherited from mim::FPPass< CopyProp, Lam > | |
FPPass (PassMan &man, std::string_view name) | |
bool | fixed_point () const override |
Public Member Functions inherited from mim::RWPass< CopyProp, Lam > | |
RWPass (PassMan &man, std::string_view name) | |
bool | inspect () const override |
Should the PassMan even consider this pass? | |
Lam * | curr_mut () const |
Public Member Functions inherited from mim::Pass | |
Pass (PassMan &, std::string_view name) | |
virtual | ~Pass ()=default |
World & | world () |
PassMan & | man () |
const PassMan & | man () const |
std::string_view | name () const |
size_t | index () const |
virtual Ref | rewrite (const Var *var) |
virtual Ref | rewrite (const Proxy *proxy) |
virtual undo_t | analyze (Ref) |
virtual undo_t | analyze (const Var *) |
virtual void | enter () |
Invoked just before Pass::rewriteing PassMan::curr_mut's body. | |
virtual void | prepare () |
Invoked once before entering the main rewrite loop. | |
const Proxy * | proxy (Ref type, Defs ops, u32 tag=0) |
const Proxy * | isa_proxy (Ref def, u32 tag=0) |
Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index . | |
const Proxy * | as_proxy (Ref def, u32 tag=0) |
Private Member Functions | |
PassMan hooks | |
Ref | rewrite (Ref) override |
undo_t | analyze (const Proxy *) override |
Additional Inherited Members | |
Protected Member Functions inherited from mim::FPPass< CopyProp, Lam > | |
const auto & | states () const |
auto & | states () |
auto & | data () |
auto & | data () |
auto & | data (const K &key) |
Use this for your convenience if P::Data is a map. | |
auto & | data (const K &key) |
Use this for your convenience if P::Data<I> is a map. | |
undo_t | curr_undo () const |
Current undo point. | |
undo_t | undo_visit (Def *mut) const |
Retrieves the point to backtrack to just before mut was seen the very first time. | |
undo_t | undo_enter (Def *mut) const |
Retrieves the point to backtrack to just before rewriting mut's body. | |
This FPPass is similar to sparse conditional constant propagation (SCCP).
However, this optmization also works on all Lams alike and does not only consider basic blocks as opposed to traditional SCCP. What is more, this optimization will also propagate arbitrary Defs and not only constants. Finally, it will also remove dead Vars.
Definition at line 16 of file copy_prop.h.
using mim::plug::mem::CopyProp::Data = LamMap<DefVec> |
Definition at line 24 of file copy_prop.h.
|
inline |
Definition at line 18 of file copy_prop.h.
Reimplemented from mim::Pass.
Definition at line 93 of file copy_prop.cpp.
References mim::Lit::as(), mim::Def::as_mut(), mim::No_Undo, mim::Def::op(), mim::Def::ops(), mim::Pass::proxy(), mim::Proxy::tag(), mim::FPPass< CopyProp, Lam >::undo_visit(), and mim::Pass::world().
Reimplemented from mim::Pass.
Definition at line 10 of file copy_prop.cpp.
References mim::World::app(), mim::FPPass< CopyProp, Lam >::data(), mim::isa_apped_mut_lam(), mim::Lam::isa_returning(), mim::isa_workable(), mim::BetaRed::keep(), mim::plug::mem::mem_var(), mim::EtaExp::new2old(), mim::World::pi(), mim::Proxy, mim::Pass::proxy(), mim::World::sigma(), mim::Pi::stub(), and mim::Pass::world().