MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
tail_rec_elim.h
Go to the documentation of this file.
1#pragma once
2
3#include "mim/pass/pass.h"
4
5namespace mim {
6
7class EtaRed;
8
9class TailRecElim : public FPPass<TailRecElim, Lam> {
10public:
11 TailRecElim(PassMan& man, EtaRed* eta_red = nullptr)
12 : FPPass(man, "tail_rec_elim")
13 , eta_red_(eta_red) {}
14
15private:
16 /// @name PassMan hooks
17 ///@{
18 const Def* rewrite(const Def*) override;
19 undo_t analyze(const Def*) override;
20 ///@}
21
22 EtaRed* eta_red_;
23 LamMap<std::pair<Lam*, Lam*>> old2rec_loop_;
24 Lam2Lam rec2loop_;
25};
26
27} // namespace mim
Base class for all Defs.
Definition def.h:198
Performs η-reduction.
Definition eta_red.h:9
FPPass(PassMan &man, std::string_view name)
Definition pass.h:247
An optimizer that combines several optimizations in an optimal way.
Definition pass.h:107
PassMan & man()
Definition pass.h:30
undo_t analyze(const Def *) override
const Def * rewrite(const Def *) override
TailRecElim(PassMan &man, EtaRed *eta_red=nullptr)
Definition ast.h:14
LamMap< Lam * > Lam2Lam
Definition lam.h:199
GIDMap< Lam *, To > LamMap
Definition lam.h:197
size_t undo_t
Definition pass.h:14