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

The general idea of this Pass is to change the shape of signatures of functions. More...

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

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

Public Types

enum  Mode {
  Flat ,
  Arg
}
 

Public Member Functions

 Reshape (World &world, flags_t annex)
 
void apply (Mode)
 
void apply (const App *app) final
 Invoked if your Stage has additional args.
 
void apply (Stage &s) final
 Dito, but invoked by Stage::recreate.
 
Mode mode () const
 
void enter () override
 Fall-through to rewrite_def which falls through to rewrite_lam.
 
- Public Member Functions inherited from mim::RWPass< Reshape, 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)
 
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 bool fixed_point () const
 
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.
 

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

The general idea of this Pass is to change the shape of signatures of functions.

  • Example: Cn[ [mem, A, B], C , ret]
  • Arg : Cn[ [mem, [A, B , C]], ret] (general Cn[ [mem, args], ret])
  • Flat : Cn[ mem, A, B , C , ret] (general Cn[mem, ...args, ret]) For convenience, we want Arg-style for optimizations. The invariant is that every closed function has at most one "real" argument and a return-continuation. If memory is present, the argument is a pair of memory and the remaining arguments. However, flat style is required for code generation. Especially in the closure conversion.

The concept is to rewrite all signatures of functions with consistent reassociation of arguments. This change is propagated to (nested) applications.

Definition at line 19 of file reshape.h.

Member Enumeration Documentation

◆ Mode

Enumerator
Flat 
Arg 

Definition at line 21 of file reshape.h.

Constructor & Destructor Documentation

◆ Reshape()

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

Definition at line 23 of file reshape.h.

References mim::Stage::annex(), mim::RWPass< Reshape, Lam >::RWPass(), and mim::Stage::world().

Referenced by apply().

Member Function Documentation

◆ apply() [1/3]

void mim::plug::mem::pass::Reshape::apply ( const App * )
finalvirtual

Invoked if your Stage has additional args.

Reimplemented from mim::Stage.

Definition at line 70 of file reshape.cpp.

References apply(), Arg, mim::App::arg(), mim::Annex::base(), and Flat.

◆ apply() [2/3]

void mim::plug::mem::pass::Reshape::apply ( Mode mode)

Definition at line 65 of file reshape.cpp.

References Flat, mode(), and mim::Stage::name_.

Referenced by apply().

◆ apply() [3/3]

void mim::plug::mem::pass::Reshape::apply ( Stage & )
inlinefinalvirtual

Dito, but invoked by Stage::recreate.

Reimplemented from mim::Stage.

Definition at line 28 of file reshape.h.

References apply(), mode(), Reshape(), and mim::Stage::Stage().

Referenced by apply().

◆ enter()

void mim::plug::mem::pass::Reshape::enter ( )
overridevirtual

Fall-through to rewrite_def which falls through to rewrite_lam.

Reimplemented from mim::Pass.

Definition at line 75 of file reshape.cpp.

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

◆ mode()

Mode mim::plug::mem::pass::Reshape::mode ( ) const
inline

Definition at line 30 of file reshape.h.

Referenced by apply(), and apply().


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