MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::plug::mem::pass::CopyProp Class Reference

This FPPass is similar to sparse conditional constant propagation (SCCP). More...

#include <mim/plug/mem/pass/copy_prop.h>

Inheritance diagram for mim::plug::mem::pass::CopyProp:
[legend]

Public Types

using Data = LamMap<DefVec>
 
- Public Types inherited from mim::FPPass< CopyProp, Lam >
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
 
- Public Member Functions inherited from mim::FPPass< CopyProp, Lam >
 FPPass (World &world, std::string name)
 
 FPPass (World &world, flags_t annex)
 
bool fixed_point () const override
 
- Public Member Functions inherited from mim::RWPass< CopyProp, Lam >
 RWPass (World &world, std::string name)
 
 RWPass (World &world, flags_t annex)
 
bool inspect () const override
 Should the PassMan even consider this pass?
 
Lamcurr_mut () const
 
- Public Member Functions inherited from mim::Pass
 Pass (World &world, std::string name)
 
 Pass (World &world, flags_t annex)
 
PassManman ()
 
const PassManman () const
 
size_t index () const
 
virtual const Defrewrite (const Var *var)
 
virtual const Defrewrite (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 Proxyproxy (const Def *type, Defs ops, u32 tag=0)
 
const Proxyisa_proxy (const Def *def, u32 tag=0)
 Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index.
 
const Proxyas_proxy (const Def *def, u32 tag=0)
 
- Public Member Functions inherited from mim::Stage
Worldworld ()
 
Driverdriver ()
 
Loglog () 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< Stagerecreate ()
 Creates a new instance; needed by a fixed-point PhaseMan.
 

Private Member Functions

PassMan hooks
const Defrewrite (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)
 
- 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.
 
- Protected Attributes inherited from mim::Stage
std::string name_
 

Detailed Description

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.

Member Typedef Documentation

◆ Data

Definition at line 28 of file copy_prop.h.

Constructor & Destructor Documentation

◆ CopyProp()

mim::plug::mem::pass::CopyProp::CopyProp ( World & world,
flags_t annex )
inline

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().

Member Function Documentation

◆ analyze()

undo_t mim::plug::mem::pass::CopyProp::analyze ( const Proxy * proxy)
overrideprivatevirtual

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().

◆ apply() [1/3]

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_.

◆ apply() [2/3]

void mim::plug::mem::pass::CopyProp::apply ( const App * )
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().

◆ apply() [3/3]

void mim::plug::mem::pass::CopyProp::apply ( Stage & )
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().

◆ bb_only()

bool mim::plug::mem::pass::CopyProp::bb_only ( ) const
inline

Definition at line 26 of file copy_prop.h.

Referenced by apply(), and apply().

◆ init()

void mim::plug::mem::pass::CopyProp::init ( PassMan * man)
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.

◆ rewrite()

const Def * mim::plug::mem::pass::CopyProp::rewrite ( const Def * def)
overrideprivatevirtual

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