MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::Scalarize Class Reference

Perform Scalarization (= Argument simplification). More...

#include <mim/pass/scalarize.h>

Inheritance diagram for mim::Scalarize:
[legend]

Public Member Functions

 Scalarize (World &world, flags_t annex)
void init (PassMan *) final
const Defrewrite (const Def *) override
Public Member Functions inherited from mim::RWPass< Scalarize, Lam >
 RWPass (World &world, std::string name)
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)
PassManman ()
const PassManman () const
size_t index () const
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 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.

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

Perform Scalarization (= Argument simplification).

This means that, e.g.,

f := λ (x_1:[T_1, T_2], .., x_n:T_n).E

will be transformed to

f' := λ (y_1:T_1, y_2:T_2, .. y_n:T_n).E[x_1 \ (y_1, y_2); ..; x_n \ y_n]

if f appears in callee position only (see EtaExp). It will not flatten mutable Sigmas or Arrays.

Definition at line 20 of file scalarize.h.

Constructor & Destructor Documentation

◆ Scalarize()

mim::Scalarize::Scalarize ( World & world,
flags_t annex )
inline

Member Function Documentation

◆ init()

void mim::Scalarize::init ( PassMan * man)
finalvirtual

Reimplemented from mim::Pass.

Definition at line 9 of file scalarize.cpp.

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

◆ rewrite()

const Def * mim::Scalarize::rewrite ( const Def * def)
overridevirtual

Reimplemented from mim::Pass.

Definition at line 60 of file scalarize.cpp.

References DLOG, mim::flatten(), mim::Def::isa_mut(), rewrite(), and mim::Stage::world().

Referenced by rewrite().


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