Thorin 1.9.0
The Higher ORder INtermediate representation
Loading...
Searching...
No Matches
thorin::plug::mem::Reshape Class Reference

The general idea of this pass/phase is to change the shape of signatures of functions. More...

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

Inheritance diagram for thorin::plug::mem::Reshape:
[legend]

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 thorin::RWPass< Reshape, Lam >
 RWPass (PassMan &man, std::string_view name)
 
bool inspect () const override
 Should the PassMan even consider this pass?
 
Lamcurr_mut () const
 
- Public Member Functions inherited from thorin::Pass
 Pass (PassMan &, std::string_view name)
 
virtual ~Pass ()=default
 
Worldworld ()
 
PassManman ()
 
const PassManman () 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 Proxyproxy (Ref type, Defs ops, u32 tag=0)
 
const Proxyisa_proxy (Ref def, u32 tag=0)
 Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index.
 
const Proxyas_proxy (Ref def, u32 tag=0)
 

Detailed Description

The general idea of this pass/phase 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 23 of file reshape.h.

Member Enumeration Documentation

◆ Mode

Enumerator
Flat 
Arg 

Definition at line 25 of file reshape.h.

Constructor & Destructor Documentation

◆ Reshape()

thorin::plug::mem::Reshape::Reshape ( PassMan man,
Mode  mode 
)
inline

Definition at line 27 of file reshape.h.

Member Function Documentation

◆ enter()

void thorin::plug::mem::Reshape::enter ( )
overridevirtual

Fall-through to rewrite_def which falls through to rewrite_lam.

Reimplemented from thorin::Pass.

Definition at line 69 of file reshape.cpp.

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


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