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
7
8using namespace mim;
9using namespace mim::plug;
10
12 return {"core", core::register_normalizers, nullptr, [](Backends& backends) { backends["ll"] = &ll::emit; }};
13}
14
15namespace mim::plug::core {
16
17template<bool up>
18const Sigma* convert(const TBound<up>* b) {
19 auto& w = b->world();
20
21 if constexpr (up) {
22 nat_t align = 0;
23 nat_t size = 0;
24
25 for (auto op : b->ops()) {
26 auto a = Lit::isa(w.call(trait::align, op));
27 auto s = Lit::isa(w.call(trait::size, op));
28 if (!a || !s) return nullptr;
29
30 align = std::max(align, *a);
31 size = std::max(size, *s);
32 }
33
34 assert(size % align == 0);
35 auto arr = w.arr(size / align, w.type_int(align * 8_u64));
36
37 return w.sigma({w.type_idx(b->num_ops()), arr})->template as<Sigma>();
38 } else {
39 return w.sigma(b->ops())->template as<Sigma>();
40 }
41}
42
43#ifndef DOXYGEN
44template const Sigma* convert(const TBound<false>*);
45template const Sigma* convert(const TBound<true>*);
46#endif
47
48} // 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:824
A dependent tuple type.
Definition tuple.h:20
Specific Bound depending on Up.
Definition lattice.h:34
#define MIM_EXPORT
Definition config.h:16
void emit(World &, std::ostream &)
Definition ll.cpp:1058
The core Plugin
Definition core.h:8
const Sigma * convert(const TBound< up > *b)
Definition core.cpp:18
const Def * op(trait o, const Def *type)
Definition core.h:33
void register_normalizers(Normalizers &normalizers)
Definition ast.h:14
u64 nat_t
Definition types.h:43
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