MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::FPPass< P, M > Class Template Reference

Inherit from this class using CRTP, if you do need a Pass with a state and a fixed-point. More...

#include <mim/pass.h>

Inheritance diagram for mim::FPPass< P, M >:
[legend]

Public Types

using Super = RWPass<P, M>
 
using Data = std::tuple<>
 Default.
 

Public Member Functions

 FPPass (World &world, std::string name)
 
 FPPass (World &world, flags_t annex)
 
bool fixed_point () const override
 
- Public Member Functions inherited from mim::RWPass< P, Def >
 RWPass (World &world, std::string name)
 
 RWPass (World &world, flags_t annex)
 
bool inspect () const override
 Should the PassMan even consider this pass?
 
Defcurr_mut () const
 
- Public Member Functions inherited from mim::Pass
 Pass (World &world, std::string name)
 
 Pass (World &world, flags_t annex)
 
virtual void init (PassMan *)
 
PassManman ()
 
const PassManman () const
 
size_t index () const
 
virtual const Defrewrite (const Def *def)
 
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 undo_t analyze (const Proxy *)
 
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.
 
virtual void apply (const App *)
 Invoked if your Stage has additional args.
 
virtual void apply (Stage &)
 Dito, but invoked by Stage::recreate.
 

Protected Member Functions

State-related Getters
const auto & states () const
 
auto & states ()
 
auto & data ()
 
template<size_t I>
auto & data ()
 
template<class K>
auto & data (const K &key)
 Use this for your convenience if P::Data is a map.
 
template<size_t I, class K>
auto & data (const K &key)
 Use this for your convenience if P::Data<I> is a map.
 
undo
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.
 

Private Member Functions

Memory Management for State
void * alloc () override
 Default constructor.
 
void * copy (const void *p) override
 Copy constructor.
 
void dealloc (void *state) override
 Destructor.
 

Additional Inherited Members

static auto create (const Flags2Stages &stages, const Def *def)
 
template<class A, class P>
static void hook (Flags2Stages &stages)
 
- Protected Attributes inherited from mim::Stage
std::string name_
 

Detailed Description

template<class P, class M = Def>
class mim::FPPass< P, M >

Inherit from this class using CRTP, if you do need a Pass with a state and a fixed-point.

Definition at line 318 of file pass.h.

Member Typedef Documentation

◆ Data

template<class P, class M = Def>
using mim::FPPass< P, M >::Data = std::tuple<>

Default.

Definition at line 321 of file pass.h.

◆ Super

template<class P, class M = Def>
using mim::FPPass< P, M >::Super = RWPass<P, M>

Definition at line 320 of file pass.h.

Constructor & Destructor Documentation

◆ FPPass() [1/2]

template<class P, class M = Def>
mim::FPPass< P, M >::FPPass ( World & world,
std::string name )
inline

Definition at line 323 of file pass.h.

References mim::Stage::name(), and mim::Stage::world().

◆ FPPass() [2/2]

template<class P, class M = Def>
mim::FPPass< P, M >::FPPass ( World & world,
flags_t annex )
inline

Definition at line 325 of file pass.h.

References mim::Stage::annex(), and mim::Stage::world().

Member Function Documentation

◆ alloc()

template<class P, class M = Def>
void * mim::FPPass< P, M >::alloc ( )
inlineoverrideprivatevirtual

Default constructor.

Reimplemented from mim::Pass.

Definition at line 377 of file pass.h.

◆ copy()

template<class P, class M = Def>
void * mim::FPPass< P, M >::copy ( const void * )
inlineoverrideprivatevirtual

Copy constructor.

Reimplemented from mim::Pass.

Definition at line 378 of file pass.h.

◆ curr_undo()

template<class P, class M = Def>
undo_t mim::FPPass< P, M >::curr_undo ( ) const
inlineprotected

Current undo point.

Definition at line 357 of file pass.h.

References mim::Pass::man().

◆ data() [1/4]

template<class P, class M = Def>
auto & mim::FPPass< P, M >::data ( )
inlineprotected

Definition at line 335 of file pass.h.

References mim::Pass::index(), and states().

Referenced by data(), and data().

◆ data() [2/4]

template<class P, class M = Def>
template<size_t I>
auto & mim::FPPass< P, M >::data ( )
inlineprotected

Definition at line 340 of file pass.h.

References data().

◆ data() [3/4]

template<class P, class M = Def>
template<class K>
auto & mim::FPPass< P, M >::data ( const K & key)
inlineprotected

Use this for your convenience if P::Data is a map.

Definition at line 345 of file pass.h.

References data().

◆ data() [4/4]

template<class P, class M = Def>
template<size_t I, class K>
auto & mim::FPPass< P, M >::data ( const K & key)
inlineprotected

Use this for your convenience if P::Data<I> is a map.

Definition at line 350 of file pass.h.

References data().

◆ dealloc()

template<class P, class M = Def>
void mim::FPPass< P, M >::dealloc ( void * )
inlineoverrideprivatevirtual

Destructor.

Reimplemented from mim::Pass.

Definition at line 379 of file pass.h.

◆ fixed_point()

template<class P, class M = Def>
bool mim::FPPass< P, M >::fixed_point ( ) const
inlineoverridevirtual

Reimplemented from mim::Pass.

Definition at line 328 of file pass.h.

◆ states() [1/2]

template<class P, class M = Def>
auto & mim::FPPass< P, M >::states ( )
inlineprotected

Definition at line 334 of file pass.h.

References mim::Pass::man().

◆ states() [2/2]

template<class P, class M = Def>
const auto & mim::FPPass< P, M >::states ( ) const
inlineprotected

Definition at line 333 of file pass.h.

References mim::Pass::man().

Referenced by data(), and undo_enter().

◆ undo_enter()

template<class P, class M = Def>
undo_t mim::FPPass< P, M >::undo_enter ( Def * mut) const
inlineprotected

Retrieves the point to backtrack to just before rewriting mut's body.

Definition at line 367 of file pass.h.

References mim::RWPass< P, Def >::curr_mut(), mim::No_Undo, and states().

◆ undo_visit()

template<class P, class M = Def>
undo_t mim::FPPass< P, M >::undo_visit ( Def * mut) const
inlineprotected

Retrieves the point to backtrack to just before mut was seen the very first time.

Definition at line 360 of file pass.h.

References mim::Pass::man(), and mim::No_Undo.


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