MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::plug::mem::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::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 (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?
 
Lamcurr_mut () const
 
- Public Member Functions inherited from mim::Pass
 Pass (PassMan &, std::string_view name)
 
virtual ~Pass ()=default
 
Worldworld ()
 
PassManman ()
 
const PassManman () 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 Proxyproxy (Ref type, Defs ops, u32 tag=0)
 
const Proxyisa_proxy (Ref def, u32 tag=0)
 Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index.
 
const Proxyas_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.
 

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 24 of file copy_prop.h.

Constructor & Destructor Documentation

◆ CopyProp()

mim::plug::mem::CopyProp::CopyProp ( PassMan & man,
BetaRed * beta_red,
EtaExp * eta_exp,
bool bb_only = false )
inline

Definition at line 18 of file copy_prop.h.

Member Function Documentation

◆ analyze()

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

◆ rewrite()


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