MimIR 0.1
MimIR is my Intermediate Representation
|
The general idea of this pass/phase 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 (PassMan &man, Mode mode) | |
void | enter () override |
Fall-through to rewrite_def which falls through to rewrite_lam . | |
Public Member Functions inherited from mim::RWPass< Reshape, Lam > | |
RWPass (PassMan &man, std::string_view name) | |
bool | inspect () const override |
Should the PassMan even consider this pass? | |
Lam * | curr_mut () const |
Public Member Functions inherited from mim::Pass | |
Pass (PassMan &, std::string_view name) | |
virtual | ~Pass ()=default |
World & | world () |
PassMan & | man () |
const PassMan & | man () const |
std::string_view | name () const |
size_t | index () const |
virtual Ref | rewrite (Ref def) |
virtual Ref | rewrite (const Var *var) |
virtual Ref | rewrite (const Proxy *proxy) |
virtual undo_t | analyze (Ref) |
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 (Ref type, Defs ops, u32 tag=0) |
const Proxy * | isa_proxy (Ref def, u32 tag=0) |
Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index . | |
const Proxy * | as_proxy (Ref def, u32 tag=0) |
The general idea of this pass/phase 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.
|
overridevirtual |
Fall-through to rewrite_def
which falls through to rewrite_lam
.
Reimplemented from mim::Pass.
Definition at line 69 of file reshape.cpp.
References mim::RWPass< Reshape, Lam >::curr_mut().