Thorin 1.9.0
The Higher ORder INtermediate representation
Loading...
Searching...
No Matches
thorin::plug::mem::SSAConstr Class Reference

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

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

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

Classes

struct  Info
 

Public Types

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

Public Member Functions

 SSAConstr (PassMan &man, EtaExp *eta_exp)
 
- Public Member Functions inherited from thorin::FPPass< SSAConstr, Lam >
 FPPass (PassMan &man, std::string_view name)
 
bool fixed_point () const override
 
- Public Member Functions inherited from thorin::RWPass< P, M >
 RWPass (PassMan &man, std::string_view name)
 
bool inspect () const override
 Should the PassMan even consider this pass?
 
Mcurr_mut () const
 
- Public Member Functions inherited from thorin::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 thorin::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

◆ thorin::plug::mem::SSAConstr::Info

struct thorin::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()

thorin::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]

◆ analyze() [2/2]

◆ enter()

void thorin::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 thorin::Pass.

Definition at line 17 of file ssa_constr.cpp.

References thorin::RWPass< P, M >::curr_mut().

◆ rewrite() [1/2]

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

◆ rewrite() [2/2]


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