MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
core.cpp
Go to the documentation of this file.
2
3#include <mim/config.h>
4#include <mim/pass.h>
5
8
9using namespace mim;
10using namespace mim::plug;
11
13 return {"core", core::register_normalizers, nullptr, [](Backends& backends) {
14 backends["ll"] = &ll::emit;
15 backends["sexpr"] = &sexpr::emit;
16 backends["sexpr-slotted"] = &sexpr::emit_slotted;
17 }};
18}
19
20namespace mim::plug::core {
21
22template<bool up>
23const Sigma* convert(const TBound<up>* b) {
24 auto& w = b->world();
25
26 if constexpr (up) {
27 nat_t align = 0;
28 nat_t size = 0;
29
30 for (auto op : b->ops()) {
31 auto a = Lit::isa(w.call(trait::align, op));
32 auto s = Lit::isa(w.call(trait::size, op));
33 if (!a || !s) return nullptr;
34
35 align = std::max(align, *a);
36 size = std::max(size, *s);
37 }
38
39 assert(size % align == 0);
40 auto arr = w.arr(size / align, w.type_int(align * 8_u64));
41
42 return w.sigma({w.type_idx(b->num_ops()), arr})->template as<Sigma>();
43 } else {
44 return w.sigma(b->ops())->template as<Sigma>();
45 }
46}
47
48#ifndef DOXYGEN
49template const Sigma* convert(const TBound<false>*);
50template const Sigma* convert(const TBound<true>*);
51#endif
52
53} // namespace mim::plug::core
World & world() const noexcept
Definition def.cpp:439
constexpr auto ops() const noexcept
Definition def.h:305
constexpr size_t num_ops() const noexcept
Definition def.h:309
static std::optional< T > isa(const Def *def)
Definition def.h:826
A dependent tuple type.
Definition tuple.h:20
Specific Bound depending on Up.
Definition lattice.h:34
#define MIM_EXPORT
Definition config.h:17
void emit(World &, std::ostream &)
Definition ll.cpp:13
The core Plugin
Definition core.h:8
const Sigma * convert(const TBound< up > *b)
Definition core.cpp:23
const Def * op(trait o, const Def *type)
Definition core.h:33
void register_normalizers(Normalizers &normalizers)
void emit_slotted(World &, std::ostream &)
Definition sexpr.cpp:666
void emit(World &, std::ostream &)
Definition sexpr.cpp:661
Definition ast.h:14
u64 nat_t
Definition types.h:44
absl::btree_map< std::string, void(*)(World &, std::ostream &)> Backends
Definition plugin.h:24
mim::Plugin mim_get_plugin()
Basic info and registration function pointer to be returned from a specific plugin.
Definition plugin.h:30