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

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

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

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

Classes

struct  Info
 

Public Types

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

Public Member Functions

 SSA (World &world, flags_t annex)
 
void init (PassMan *) final
 
- Public Member Functions inherited from mim::FPPass< SSA, 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< SSA, 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 undo_t analyze (const Var *)
 
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.
 
virtual void apply (const App *)
 Invoked if your Stage has additional args.
 
virtual void apply (Stage &)
 Dito, but invoked by Stage::recreate.
 

Private Member Functions

PassMan hooks
void enter () override
 Invoked just before Pass::rewriteing PassMan::curr_mut's body.
 
const Defrewrite (const Proxy *) override
 
const Defrewrite (const Def *) override
 
undo_t analyze (const Proxy *) override
 
undo_t analyze (const Def *) override
 
SSA construction helpers - see paper

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< SSA, 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

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


Class Documentation

◆ mim::plug::mem::pass::SSA::Info

struct mim::plug::mem::pass::SSA::Info

Definition at line 24 of file ssa.h.

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

Member Typedef Documentation

◆ Data

Definition at line 29 of file ssa.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : u32
Enumerator
Phixy 
Sloxy 
Traxy 

Definition at line 22 of file ssa.h.

Constructor & Destructor Documentation

◆ SSA()

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

Definition at line 17 of file ssa.h.

References mim::Stage::annex(), mim::FPPass< SSA, Lam >::FPPass(), and mim::Stage::world().

Member Function Documentation

◆ analyze() [1/2]

undo_t mim::plug::mem::pass::SSA::analyze ( const Def * def)
overrideprivatevirtual

◆ analyze() [2/2]

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

◆ enter()

void mim::plug::mem::pass::SSA::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 22 of file ssa.cpp.

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

◆ init()

void mim::plug::mem::pass::SSA::init ( PassMan * man)
finalvirtual

Reimplemented from mim::Pass.

Definition at line 17 of file ssa.cpp.

References mim::Pass::init(), mim::Pass::man(), and mim::Pass::PassMan.

◆ rewrite() [1/2]

◆ rewrite() [2/2]

const Def * mim::plug::mem::pass::SSA::rewrite ( const Proxy * proxy)
overrideprivatevirtual

Reimplemented from mim::Pass.

Definition at line 24 of file ssa.cpp.

References mim::Pass::as_proxy(), mim::RWPass< SSA, Lam >::curr_mut(), DLOG, mim::Pass::proxy(), Sloxy, and Traxy.


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