MimIR 0.1
MimIR is my Intermediate Representation
|
The general idea of this Pass is to change the shape of signatures of functions. More...
#include <mim/plug/mem/pass/reshape.h>
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 . | |
![]() | |
RWPass (World &world, std::string name) | |
RWPass (World &world, flags_t annex) | |
bool | inspect () const override |
Should the PassMan even consider this pass? | |
Lam * | curr_mut () const |
![]() | |
Pass (World &world, std::string name) | |
Pass (World &world, flags_t annex) | |
virtual void | init (PassMan *) |
PassMan & | man () |
const PassMan & | man () const |
size_t | index () const |
virtual const Def * | rewrite (const Def *def) |
virtual const Def * | rewrite (const Var *var) |
virtual const Def * | rewrite (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 Proxy * | proxy (const Def *type, Defs ops, u32 tag=0) |
const Proxy * | isa_proxy (const Def *def, u32 tag=0) |
Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index . | |
const Proxy * | as_proxy (const Def *def, u32 tag=0) |
![]() | |
World & | world () |
Driver & | driver () |
Log & | log () 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< Stage > | recreate () |
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) |
![]() | |
std::string | name_ |
The general idea of this Pass is to change the shape of signatures of functions.
Cn[ [mem, A, B], C , ret]
Cn[ [mem, [A, B , C]], ret]
(general Cn[ [mem, args], ret]
)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 23 of file reshape.h.
References mim::Stage::annex(), mim::RWPass< Reshape, Lam >::RWPass(), and mim::Stage::world().
Referenced by apply().
|
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.
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().
|
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().
|
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().
|
inline |