MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mem.cpp
Go to the documentation of this file.
1#include "mim/plug/mem/mem.h"
2
3#include <mim/config.h>
4#include <mim/phase.h>
5
6#include "mim/plug/mem/mem.h"
9
10using namespace mim;
11using namespace mim::plug;
12
13void reg_phases(Flags2Phases& phases) {
14 MIM_REPL(phases, mem::remem_repl, {
15 if (auto remem = Axm::isa<mem::remem>(def)) return remem->arg();
16 return {};
17 });
18
20 if (auto alloc = Axm::isa<mem::alloc>(def)) {
21 auto [pointee, addr_space] = alloc->decurry()->args<2>();
22 return mem::op_malloc(pointee, addr_space, alloc->arg());
23 } else if (auto slot = Axm::isa<mem::slot>(def)) {
24 auto [Ta, mr] = slot->uncurry_args<2>();
25 auto [pointee, addr_space] = Ta->projs<2>();
26 auto [mem, ret] = mr->projs<2>();
27 return mem::op_mslot(pointee, addr_space, mem, ret);
28 }
29 if (auto remem = Axm::isa<mem::remem>(def)) return remem->arg();
30 return {};
31 });
32
33 // clang-format off
36 // clang-format on
37}
38
void reg_phases(Flags2Phases &phases)
Definition affine.cpp:12
static auto isa(const Def *def)
Definition axm.h:107
static void hook(Flags2Phases &phases)
Definition phase.h:70
#define MIM_EXPORT
Definition config.h:19
void reg_phases(Flags2Phases &phases)
Definition mem.cpp:13
The mem Plugin
Definition mem.h:11
void register_normalizers(Normalizers &normalizers)
const Def * op_mslot(const Def *type, const Def *as, const Def *mem, const Def *ret)
Definition mem.h:172
const Def * op_malloc(const Def *type, const Def *as, const Def *mem)
Definition mem.h:160
Definition ast.h:14
absl::flat_hash_map< flags_t, std::function< std::unique_ptr< Phase >(World &)> > Flags2Phases
Maps an axiom of a Phase to a function that creates one.
Definition plugin.h:25
mim::Plugin mim_get_plugin()
#define MIM_REPL(__phases, __annex,...)
Definition phase.h:406
#define MIM_VERSION
Definition plugin.h:54
Basic info and registration function pointer to be returned from a specific plugin.
Definition plugin.h:59