MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches

Performs η-reduction. More...

#include <mim/pass/eta_red.h>

Inheritance diagram for mim::EtaRed:
[legend]

Public Types

enum  Lattice {
  Bot ,
  Reduce ,
  Irreducible
}
using Data = LamMap<Lattice>
Public Types inherited from mim::FPPass< EtaRed, Def >
using Super
using Data
 Default.

Public Member Functions

 EtaRed (World &world, flags_t annex)
void apply (bool callee_only)
void apply (const App *app) final
 Invoked if your Stage has additional args.
void apply (Stage &s) final
 Dito, but invoked by Stage::recreate.
bool callee_only () const
void mark_irreducible (Lam *lam)
Public Member Functions inherited from mim::FPPass< EtaRed, Def >
 FPPass (World &world, std::string name)
bool fixed_point () const override
Public Member Functions inherited from mim::RWPass< EtaRed, Def >
 RWPass (World &world, std::string name)
bool inspect () const override
 Should the PassMan even consider this pass?
Defcurr_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 Var *var)
virtual const Defrewrite (const Proxy *proxy)
virtual undo_t analyze (const Def *)
virtual undo_t analyze (const Proxy *)
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.

Private Member Functions

const Defrewrite (const Def *) override
undo_t analyze (const Var *) override

Additional Inherited Members

static auto create (const Flags2Stages &stages, const Def *def)
template<class A, class P>
static void hook (Flags2Stages &stages)
Protected Member Functions inherited from mim::FPPass< EtaRed, Def >
const auto & states () const
auto & data ()
undo_t curr_undo () const
 Current undo point.
undo_t undo_visit (Def *mut) const
 Retrieves the point to backtrack to just before mut was seen the very first time.
undo_t undo_enter (Def *mut) const
 Retrieves the point to backtrack to just before rewriting mut's body.
Protected Attributes inherited from mim::Stage
std::string name_

Detailed Description

Performs η-reduction.

Rewrites λx.e x to e, whenever x does (optimistically) not appear free in e.

Definition at line 9 of file eta_red.h.

Member Typedef Documentation

◆ Data

Definition at line 26 of file eta_red.h.

Member Enumeration Documentation

◆ Lattice

Enumerator
Bot 

Never seen.

Reduce 

η-reduction performed.

Irreducible 

η-reduction not possible as we stumbled upon a Var.

Definition at line 20 of file eta_red.h.

Constructor & Destructor Documentation

◆ EtaRed()

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

Definition at line 11 of file eta_red.h.

References mim::Stage::annex(), mim::FPPass< EtaRed, Def >::FPPass(), and mim::Stage::world().

Referenced by apply().

Member Function Documentation

◆ analyze()

undo_t mim::EtaRed::analyze ( const Var * var)
overrideprivatevirtual

◆ apply() [1/3]

void mim::EtaRed::apply ( bool callee_only)

Definition at line 12 of file eta_red.cpp.

References callee_only(), and mim::Stage::name_.

◆ apply() [2/3]

void mim::EtaRed::apply ( const App * )
inlinefinalvirtual

Invoked if your Stage has additional args.

Reimplemented from mim::Stage.

Definition at line 15 of file eta_red.h.

References apply(), and mim::Lit::as().

Referenced by apply().

◆ apply() [3/3]

void mim::EtaRed::apply ( Stage & )
inlinefinalvirtual

Dito, but invoked by Stage::recreate.

Reimplemented from mim::Stage.

Definition at line 16 of file eta_red.h.

References apply(), callee_only(), and EtaRed().

Referenced by apply().

◆ callee_only()

bool mim::EtaRed::callee_only ( ) const
inline

Definition at line 18 of file eta_red.h.

Referenced by apply(), and apply().

◆ mark_irreducible()

void mim::EtaRed::mark_irreducible ( Lam * lam)
inline

Definition at line 27 of file eta_red.h.

◆ rewrite()

const Def * mim::EtaRed::rewrite ( const Def * def)
overrideprivatevirtual

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