MimIR
0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
beta_red.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
mim/pass/pass.h
"
4
5
namespace
mim
{
6
7
/// Optimistically performs β-reduction (aka inlining).
8
/// β-reduction of `f e` happens if `f` only occurs exactly once in the program in callee position.
9
class
BetaRed
:
public
FPPass
<BetaRed, Def> {
10
public
:
11
BetaRed
(
PassMan
&
man
)
12
:
FPPass
(
man
,
"beta_red"
) {}
13
14
using
Data
=
LamSet
;
15
16
void
keep
(
Lam
* lam) { keep_.emplace(lam); }
17
18
private
:
19
const
Def
*
rewrite
(
const
Def
*)
override
;
20
undo_t
analyze
(
const
Proxy
*)
override
;
21
undo_t
analyze
(
const
Def
*)
override
;
22
23
LamSet
keep_;
24
};
25
26
}
// namespace mim
mim::BetaRed::rewrite
const Def * rewrite(const Def *) override
Definition
beta_red.cpp:7
mim::BetaRed::keep
void keep(Lam *lam)
Definition
beta_red.h:16
mim::BetaRed::Data
LamSet Data
Definition
beta_red.h:14
mim::BetaRed::BetaRed
BetaRed(PassMan &man)
Definition
beta_red.h:11
mim::BetaRed::analyze
undo_t analyze(const Proxy *) override
Definition
beta_red.cpp:20
mim::Def
Base class for all Defs.
Definition
def.h:198
mim::FPPass< BetaRed, Def >::FPPass
FPPass(PassMan &man, std::string_view name)
Definition
pass.h:247
mim::Lam
A function.
Definition
lam.h:105
mim::PassMan
An optimizer that combines several optimizations in an optimal way.
Definition
pass.h:107
mim::Pass::man
PassMan & man()
Definition
pass.h:30
mim::Proxy
Definition
def.h:805
mim
Definition
ast.h:14
mim::LamSet
GIDSet< Lam * > LamSet
Definition
lam.h:198
mim::undo_t
size_t undo_t
Definition
pass.h:14
pass.h
include
mim
pass
beta_red.h
Generated by
1.13.2