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> |
![]() | |
using | Super |
using | Data |
Default. | |
Public Member Functions | |
CopyProp (World &world, flags_t annex) | |
void | apply (bool bb_only) |
void | apply (const App *app) final |
Invoked if your Stage has additional args. | |
void | apply (Stage &s) final |
Dito, but invoked by Stage::recreate. | |
void | init (PassMan *) final |
bool | bb_only () const |
![]() | |
FPPass (World &world, std::string name) | |
FPPass (World &world, flags_t annex) | |
bool | fixed_point () const override |
![]() | |
RWPass (World &world, std::string name) | |
RWPass (World &world, flags_t annex) | |
bool | inspect () const override |
Should the PassMan even consider this pass? | |
Lam * | curr_mut () const |
![]() | |
Pass (World &world, std::string name) | |
Pass (World &world, flags_t annex) | |
PassMan & | man () |
const PassMan & | man () const |
size_t | index () const |
virtual const Def * | rewrite (const Var *var) |
virtual const Def * | rewrite (const Proxy *proxy) |
virtual undo_t | analyze (const Def *) |
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 (const Def *type, Defs ops, u32 tag=0) |
const Proxy * | isa_proxy (const Def *def, u32 tag=0) |
Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index . | |
const Proxy * | as_proxy (const Def *def, u32 tag=0) |
![]() | |
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. | |
Private Member Functions | |
PassMan hooks | |
const Def * | rewrite (const Def *) override |
undo_t | analyze (const Proxy *) override |
Additional Inherited Members | |
static auto | create (const Flags2Stages &stages, const Def *def) |
template<class A, class P> | |
static void | hook (Flags2Stages &stages) |
![]() | |
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. | |
![]() | |
std::string | name_ |
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.
Definition at line 28 of file copy_prop.h.
Definition at line 18 of file copy_prop.h.
References mim::Stage::annex(), mim::FPPass< CopyProp, Lam >::FPPass(), and mim::Stage::world().
Referenced by apply().
Reimplemented from mim::Pass.
Definition at line 104 of file copy_prop.cpp.
References mim::Lit::as(), DLOG, mim::No_Undo, mim::Pass::proxy(), and mim::FPPass< CopyProp, Lam >::undo_visit().
void mim::plug::mem::pass::CopyProp::apply | ( | bool | bb_only | ) |
Definition at line 10 of file copy_prop.cpp.
References bb_only(), and mim::Stage::name_.
|
inlinefinalvirtual |
Invoked if your Stage has additional args.
Reimplemented from mim::Stage.
Definition at line 22 of file copy_prop.h.
References apply(), and mim::Lit::as().
Referenced by apply().
|
inlinefinalvirtual |
Dito, but invoked by Stage::recreate.
Reimplemented from mim::Stage.
Definition at line 23 of file copy_prop.h.
References apply(), bb_only(), CopyProp(), and mim::Stage::Stage().
Referenced by apply().
|
inline |
Definition at line 26 of file copy_prop.h.
|
finalvirtual |
Reimplemented from mim::Pass.
Definition at line 15 of file copy_prop.cpp.
References mim::Pass::init(), mim::Pass::man(), and mim::Pass::PassMan.
Reimplemented from mim::Pass.
Definition at line 21 of file copy_prop.cpp.
References mim::FPPass< CopyProp, Lam >::data(), DLOG, mim::isa_apped_mut_lam(), mim::Lam::isa_returning(), mim::isa_workable(), mim::plug::mem::mem_var(), mim::World::pi(), mim::Proxy, mim::Pass::proxy(), mim::World::sigma(), mim::Pi::stub(), and mim::Stage::world().