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

SSA construction algorithm that promotes slots, loads, and stores to SSA values. More...

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

Inheritance diagram for mim::plug::mem::SSAConstr:
[legend]

Classes

struct  Info
 

Public Types

enum  : u32 {
  Phixy ,
  Sloxy ,
  Traxy
}
 
using Data = GIDNodeMap<Lam*, Info>
 
- Public Types inherited from mim::FPPass< SSAConstr, Lam >
using Super
 
using Data
 Default.
 

Public Member Functions

 SSAConstr (PassMan &man, EtaExp *eta_exp)
 
- Public Member Functions inherited from mim::FPPass< SSAConstr, Lam >
 FPPass (PassMan &man, std::string_view name)
 
bool fixed_point () const override
 
- Public Member Functions inherited from mim::RWPass< SSAConstr, 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 undo_t analyze (const Var *)
 
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
void enter () override
 Invoked just before Pass::rewriteing PassMan::curr_mut's body.
 
Ref rewrite (const Proxy *) override
 
Ref rewrite (Ref) override
 
undo_t analyze (const Proxy *) override
 
undo_t analyze (Ref) override
 
SSA construction helpers - see paper

Additional Inherited Members

- Protected Member Functions inherited from mim::FPPass< SSAConstr, 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

SSA construction algorithm that promotes slots, loads, and stores to SSA values.

This is loosely based upon: "Simple and Efficient Construction of Static Single Assignment Form" by Braun, Buchwald, Hack, Leißa, Mallon, Zwinkau.

Definition at line 15 of file ssa_constr.h.


Class Documentation

◆ mim::plug::mem::SSAConstr::Info

struct mim::plug::mem::SSAConstr::Info

Definition at line 23 of file ssa_constr.h.

Class Members
Lam * pred = nullptr
GIDSet< const Proxy * > writable

Member Typedef Documentation

◆ Data

Definition at line 28 of file ssa_constr.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : u32
Enumerator
Phixy 
Sloxy 
Traxy 

Definition at line 21 of file ssa_constr.h.

Constructor & Destructor Documentation

◆ SSAConstr()

mim::plug::mem::SSAConstr::SSAConstr ( PassMan & man,
EtaExp * eta_exp )
inline

Definition at line 17 of file ssa_constr.h.

Member Function Documentation

◆ analyze() [1/2]

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

◆ analyze() [2/2]

◆ enter()

void mim::plug::mem::SSAConstr::enter ( )
overrideprivatevirtual

Invoked just before Pass::rewriteing PassMan::curr_mut's body.

Note
This is invoked when seeing the inside of a mutable the first time. This is often too late, as you usually want to do something when you see a mutable the first time from the outside. This means that this PassMan::curr_mut has already been encountered elsewhere. Otherwise, we wouldn't have seen PassMan::curr_mut to begin with (unless it is Def::is_external).

Reimplemented from mim::Pass.

Definition at line 17 of file ssa_constr.cpp.

References mim::RWPass< SSAConstr, Lam >::curr_mut().

◆ rewrite() [1/2]

Ref mim::plug::mem::SSAConstr::rewrite ( const Proxy * proxy)
overrideprivatevirtual

◆ rewrite() [2/2]


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