MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
autogen.h
Go to the documentation of this file.
1#pragma once
2
3#include <mim/axm.h>
4#include <mim/plugin.h>
5
6/// @namespace mim::plug::core @ref core
7namespace mim {
8namespace plug::core {
9
10static constexpr plugin_t Plugin_Id = 0x1104c60000000000;
11
12/// @name `core.M`
13///@{
14enum class M : flags_t {
15};
16
17///@}
18
19/// @name `core.Ptr`
20///@{
21enum class Ptr : flags_t {
22};
23
24///@}
25
26/// @name `core.nat`
27///@{
28enum class nat : flags_t {
29 add = 0x1104c60000000200,
30 sub = 0x1104c60000000201,
31 mul = 0x1104c60000000202,
32 div = 0x1104c60000000203,
33 rem = 0x1104c60000000204,
34};
35
36template<nat>
37const Def* normalize_nat(const Def*, const Def*, const Def*);
38
39///@}
40
41/// @name `core.ncmp`
42///@{
43enum class ncmp : flags_t {
44 gle = 0x1104c60000000300,
45 f = 0x1104c60000000300,
46 glE = 0x1104c60000000301,
47 e = 0x1104c60000000301,
48 gLe = 0x1104c60000000302,
49 l = 0x1104c60000000302,
50 gLE = 0x1104c60000000303,
51 le = 0x1104c60000000303,
52 Gle = 0x1104c60000000304,
53 g = 0x1104c60000000304,
54 GlE = 0x1104c60000000305,
55 ge = 0x1104c60000000305,
56 GLe = 0x1104c60000000306,
57 ne = 0x1104c60000000306,
58 GLE = 0x1104c60000000307,
59 t = 0x1104c60000000307,
60};
61
62template<ncmp>
63const Def* normalize_ncmp(const Def*, const Def*, const Def*);
64
65///@}
66
67/// @name `core.mode`
68///@{
69enum class mode : flags_t {
70 us = 0x1104c60000000400,
71 uS = 0x1104c60000000401,
72 nsw = 0x1104c60000000401,
73 Us = 0x1104c60000000402,
74 nuw = 0x1104c60000000402,
75 US = 0x1104c60000000403,
76 nsuw = 0x1104c60000000403,
77};
78
79///@}
80
81/// @name `core.idx`
82///@{
83enum class idx : flags_t {
84};
85
86const Def* normalize_idx(const Def*, const Def*, const Def*);
87///@}
88
89/// @name `core.bit1`
90///@{
91enum class bit1 : flags_t {
92 f = 0x1104c60000000600,
93 neg = 0x1104c60000000601,
94 id = 0x1104c60000000602,
95 t = 0x1104c60000000603,
96};
97
98template<bit1>
99const Def* normalize_bit1(const Def*, const Def*, const Def*);
100
101///@}
102
103/// @name `core.bit2`
104///@{
105enum class bit2 : flags_t {
106 f = 0x1104c60000000700,
107 nor = 0x1104c60000000701,
108 nciff = 0x1104c60000000702,
109 nfst = 0x1104c60000000703,
110 niff = 0x1104c60000000704,
111 nsnd = 0x1104c60000000705,
112 xor_ = 0x1104c60000000706,
113 nand = 0x1104c60000000707,
114 and_ = 0x1104c60000000708,
115 nxor = 0x1104c60000000709,
116 snd = 0x1104c6000000070a,
117 iff = 0x1104c6000000070b,
118 fst = 0x1104c6000000070c,
119 ciff = 0x1104c6000000070d,
120 or_ = 0x1104c6000000070e,
121 t = 0x1104c6000000070f,
122};
123
124template<bit2>
125const Def* normalize_bit2(const Def*, const Def*, const Def*);
126
127///@}
128
129/// @name `core.shr`
130///@{
131enum class shr : flags_t {
132 a = 0x1104c60000000800,
133 l = 0x1104c60000000801,
134};
135
136template<shr>
137const Def* normalize_shr(const Def*, const Def*, const Def*);
138
139///@}
140
141/// @name `core.wrap`
142///@{
143enum class wrap : flags_t {
144 add = 0x1104c60000000900,
145 sub = 0x1104c60000000901,
146 mul = 0x1104c60000000902,
147 shl = 0x1104c60000000903,
148};
149
150template<wrap>
151const Def* normalize_wrap(const Def*, const Def*, const Def*);
152
153///@}
154
155/// @name `core.minus`
156///@{
157enum class minus : flags_t {
158};
159
160///@}
161
162/// @name `core.div`
163///@{
164enum class div : flags_t {
165 sdiv = 0x1104c60000000b00,
166 udiv = 0x1104c60000000b01,
167 srem = 0x1104c60000000b02,
168 urem = 0x1104c60000000b03,
169};
170
171template<div>
172const Def* normalize_div(const Def*, const Def*, const Def*);
173
174///@}
175
176/// @name `core.icmp`
177///@{
178enum class icmp : flags_t {
179 xygle = 0x1104c60000000c00,
180 f = 0x1104c60000000c00,
181 xyglE = 0x1104c60000000c01,
182 e = 0x1104c60000000c01,
183 xygLe = 0x1104c60000000c02,
184 xygLE = 0x1104c60000000c03,
185 xyGle = 0x1104c60000000c04,
186 xyGlE = 0x1104c60000000c05,
187 xyGLe = 0x1104c60000000c06,
188 xyGLE = 0x1104c60000000c07,
189 xYgle = 0x1104c60000000c08,
190 xYglE = 0x1104c60000000c09,
191 xYgLe = 0x1104c60000000c0a,
192 sl = 0x1104c60000000c0a,
193 xYgLE = 0x1104c60000000c0b,
194 sle = 0x1104c60000000c0b,
195 xYGle = 0x1104c60000000c0c,
196 ug = 0x1104c60000000c0c,
197 xYGlE = 0x1104c60000000c0d,
198 uge = 0x1104c60000000c0d,
199 xYGLe = 0x1104c60000000c0e,
200 xYGLE = 0x1104c60000000c0f,
201 Xygle = 0x1104c60000000c10,
202 XyglE = 0x1104c60000000c11,
203 XygLe = 0x1104c60000000c12,
204 ul = 0x1104c60000000c12,
205 XygLE = 0x1104c60000000c13,
206 ule = 0x1104c60000000c13,
207 XyGle = 0x1104c60000000c14,
208 sg = 0x1104c60000000c14,
209 XyGlE = 0x1104c60000000c15,
210 sge = 0x1104c60000000c15,
211 XyGLe = 0x1104c60000000c16,
212 XyGLE = 0x1104c60000000c17,
213 XYgle = 0x1104c60000000c18,
214 XYglE = 0x1104c60000000c19,
215 XYgLe = 0x1104c60000000c1a,
216 XYgLE = 0x1104c60000000c1b,
217 XYGle = 0x1104c60000000c1c,
218 XYGlE = 0x1104c60000000c1d,
219 XYGLe = 0x1104c60000000c1e,
220 ne = 0x1104c60000000c1e,
221 XYGLE = 0x1104c60000000c1f,
222 t = 0x1104c60000000c1f,
223};
224
225template<icmp>
226const Def* normalize_icmp(const Def*, const Def*, const Def*);
227
228///@}
229
230/// @name `core.extrema`
231///@{
232enum class extrema : flags_t {
233 sm = 0x1104c60000000d00,
234 umin = 0x1104c60000000d00,
235 sM = 0x1104c60000000d01,
236 umax = 0x1104c60000000d01,
237 Sm = 0x1104c60000000d02,
238 smin = 0x1104c60000000d02,
239 SM = 0x1104c60000000d03,
240 smax = 0x1104c60000000d03,
241};
242
243template<extrema>
244const Def* normalize_extrema(const Def*, const Def*, const Def*);
245
246///@}
247
248/// @name `core.abs`
249///@{
250enum class abs : flags_t {
251};
252
253const Def* normalize_abs(const Def*, const Def*, const Def*);
254///@}
255
256/// @name `core.conv`
257///@{
258enum class conv : flags_t {
259 s = 0x1104c60000000f00,
260 u = 0x1104c60000000f01,
261};
262
263template<conv>
264const Def* normalize_conv(const Def*, const Def*, const Def*);
265
266///@}
267
268/// @name `core.idx2nat`
269///@{
270enum class idx2nat : flags_t {
271};
272
273const Def* normalize_idx2nat(const Def*, const Def*, const Def*);
274///@}
275
276/// @name `core.bitcast`
277///@{
278enum class bitcast : flags_t {
279};
280
281const Def* normalize_bitcast(const Def*, const Def*, const Def*);
282///@}
283
284/// @name `core.trait`
285///@{
286enum class trait : flags_t {
287 size = 0x1104c60000001200,
288 align = 0x1104c60000001201,
289};
290
291template<trait>
292const Def* normalize_trait(const Def*, const Def*, const Def*);
293
294///@}
295
296/// @name `core.pe`
297///@{
298enum class pe : flags_t {
299 hlt = 0x1104c60000001300,
300 run = 0x1104c60000001301,
301 is_closed = 0x1104c60000001302,
302};
303
304template<pe>
305const Def* normalize_pe(const Def*, const Def*, const Def*);
306
307///@}
308
309/// @name `core.select`
310///@{
311enum class select : flags_t {
312};
313
314///@}
315
316/// @name `core.Select`
317///@{
318enum class Select : flags_t {
319};
320
321///@}
322
324
325#define MIM_core_NORMALIZER_IMPL \
326 void register_normalizers(Normalizers& normalizers) {\
327 normalizers[flags_t(nat::add)] = &normalize_nat<nat::add>; \
328 normalizers[flags_t(nat::sub)] = &normalize_nat<nat::sub>; \
329 normalizers[flags_t(nat::mul)] = &normalize_nat<nat::mul>; \
330 normalizers[flags_t(nat::div)] = &normalize_nat<nat::div>; \
331 normalizers[flags_t(nat::rem)] = &normalize_nat<nat::rem>; \
332 normalizers[flags_t(ncmp::gle)] = &normalize_ncmp<ncmp::gle>; \
333 normalizers[flags_t(ncmp::glE)] = &normalize_ncmp<ncmp::glE>; \
334 normalizers[flags_t(ncmp::gLe)] = &normalize_ncmp<ncmp::gLe>; \
335 normalizers[flags_t(ncmp::gLE)] = &normalize_ncmp<ncmp::gLE>; \
336 normalizers[flags_t(ncmp::Gle)] = &normalize_ncmp<ncmp::Gle>; \
337 normalizers[flags_t(ncmp::GlE)] = &normalize_ncmp<ncmp::GlE>; \
338 normalizers[flags_t(ncmp::GLe)] = &normalize_ncmp<ncmp::GLe>; \
339 normalizers[flags_t(ncmp::GLE)] = &normalize_ncmp<ncmp::GLE>; \
340 normalizers[flags_t(Annex::Base<idx>)] = &normalize_idx; \
341 normalizers[flags_t(bit1::f)] = &normalize_bit1<bit1::f>; \
342 normalizers[flags_t(bit1::neg)] = &normalize_bit1<bit1::neg>; \
343 normalizers[flags_t(bit1::id)] = &normalize_bit1<bit1::id>; \
344 normalizers[flags_t(bit1::t)] = &normalize_bit1<bit1::t>; \
345 normalizers[flags_t(bit2::f)] = &normalize_bit2<bit2::f>; \
346 normalizers[flags_t(bit2::nor)] = &normalize_bit2<bit2::nor>; \
347 normalizers[flags_t(bit2::nciff)] = &normalize_bit2<bit2::nciff>; \
348 normalizers[flags_t(bit2::nfst)] = &normalize_bit2<bit2::nfst>; \
349 normalizers[flags_t(bit2::niff)] = &normalize_bit2<bit2::niff>; \
350 normalizers[flags_t(bit2::nsnd)] = &normalize_bit2<bit2::nsnd>; \
351 normalizers[flags_t(bit2::xor_)] = &normalize_bit2<bit2::xor_>; \
352 normalizers[flags_t(bit2::nand)] = &normalize_bit2<bit2::nand>; \
353 normalizers[flags_t(bit2::and_)] = &normalize_bit2<bit2::and_>; \
354 normalizers[flags_t(bit2::nxor)] = &normalize_bit2<bit2::nxor>; \
355 normalizers[flags_t(bit2::snd)] = &normalize_bit2<bit2::snd>; \
356 normalizers[flags_t(bit2::iff)] = &normalize_bit2<bit2::iff>; \
357 normalizers[flags_t(bit2::fst)] = &normalize_bit2<bit2::fst>; \
358 normalizers[flags_t(bit2::ciff)] = &normalize_bit2<bit2::ciff>; \
359 normalizers[flags_t(bit2::or_)] = &normalize_bit2<bit2::or_>; \
360 normalizers[flags_t(bit2::t)] = &normalize_bit2<bit2::t>; \
361 normalizers[flags_t(shr::a)] = &normalize_shr<shr::a>; \
362 normalizers[flags_t(shr::l)] = &normalize_shr<shr::l>; \
363 normalizers[flags_t(wrap::add)] = &normalize_wrap<wrap::add>; \
364 normalizers[flags_t(wrap::sub)] = &normalize_wrap<wrap::sub>; \
365 normalizers[flags_t(wrap::mul)] = &normalize_wrap<wrap::mul>; \
366 normalizers[flags_t(wrap::shl)] = &normalize_wrap<wrap::shl>; \
367 normalizers[flags_t(div::sdiv)] = &normalize_div<div::sdiv>; \
368 normalizers[flags_t(div::udiv)] = &normalize_div<div::udiv>; \
369 normalizers[flags_t(div::srem)] = &normalize_div<div::srem>; \
370 normalizers[flags_t(div::urem)] = &normalize_div<div::urem>; \
371 normalizers[flags_t(icmp::xygle)] = &normalize_icmp<icmp::xygle>; \
372 normalizers[flags_t(icmp::xyglE)] = &normalize_icmp<icmp::xyglE>; \
373 normalizers[flags_t(icmp::xygLe)] = &normalize_icmp<icmp::xygLe>; \
374 normalizers[flags_t(icmp::xygLE)] = &normalize_icmp<icmp::xygLE>; \
375 normalizers[flags_t(icmp::xyGle)] = &normalize_icmp<icmp::xyGle>; \
376 normalizers[flags_t(icmp::xyGlE)] = &normalize_icmp<icmp::xyGlE>; \
377 normalizers[flags_t(icmp::xyGLe)] = &normalize_icmp<icmp::xyGLe>; \
378 normalizers[flags_t(icmp::xyGLE)] = &normalize_icmp<icmp::xyGLE>; \
379 normalizers[flags_t(icmp::xYgle)] = &normalize_icmp<icmp::xYgle>; \
380 normalizers[flags_t(icmp::xYglE)] = &normalize_icmp<icmp::xYglE>; \
381 normalizers[flags_t(icmp::xYgLe)] = &normalize_icmp<icmp::xYgLe>; \
382 normalizers[flags_t(icmp::xYgLE)] = &normalize_icmp<icmp::xYgLE>; \
383 normalizers[flags_t(icmp::xYGle)] = &normalize_icmp<icmp::xYGle>; \
384 normalizers[flags_t(icmp::xYGlE)] = &normalize_icmp<icmp::xYGlE>; \
385 normalizers[flags_t(icmp::xYGLe)] = &normalize_icmp<icmp::xYGLe>; \
386 normalizers[flags_t(icmp::xYGLE)] = &normalize_icmp<icmp::xYGLE>; \
387 normalizers[flags_t(icmp::Xygle)] = &normalize_icmp<icmp::Xygle>; \
388 normalizers[flags_t(icmp::XyglE)] = &normalize_icmp<icmp::XyglE>; \
389 normalizers[flags_t(icmp::XygLe)] = &normalize_icmp<icmp::XygLe>; \
390 normalizers[flags_t(icmp::XygLE)] = &normalize_icmp<icmp::XygLE>; \
391 normalizers[flags_t(icmp::XyGle)] = &normalize_icmp<icmp::XyGle>; \
392 normalizers[flags_t(icmp::XyGlE)] = &normalize_icmp<icmp::XyGlE>; \
393 normalizers[flags_t(icmp::XyGLe)] = &normalize_icmp<icmp::XyGLe>; \
394 normalizers[flags_t(icmp::XyGLE)] = &normalize_icmp<icmp::XyGLE>; \
395 normalizers[flags_t(icmp::XYgle)] = &normalize_icmp<icmp::XYgle>; \
396 normalizers[flags_t(icmp::XYglE)] = &normalize_icmp<icmp::XYglE>; \
397 normalizers[flags_t(icmp::XYgLe)] = &normalize_icmp<icmp::XYgLe>; \
398 normalizers[flags_t(icmp::XYgLE)] = &normalize_icmp<icmp::XYgLE>; \
399 normalizers[flags_t(icmp::XYGle)] = &normalize_icmp<icmp::XYGle>; \
400 normalizers[flags_t(icmp::XYGlE)] = &normalize_icmp<icmp::XYGlE>; \
401 normalizers[flags_t(icmp::XYGLe)] = &normalize_icmp<icmp::XYGLe>; \
402 normalizers[flags_t(icmp::XYGLE)] = &normalize_icmp<icmp::XYGLE>; \
403 normalizers[flags_t(extrema::sm)] = &normalize_extrema<extrema::sm>; \
404 normalizers[flags_t(extrema::sM)] = &normalize_extrema<extrema::sM>; \
405 normalizers[flags_t(extrema::Sm)] = &normalize_extrema<extrema::Sm>; \
406 normalizers[flags_t(extrema::SM)] = &normalize_extrema<extrema::SM>; \
407 normalizers[flags_t(Annex::Base<abs>)] = &normalize_abs; \
408 normalizers[flags_t(conv::s)] = &normalize_conv<conv::s>; \
409 normalizers[flags_t(conv::u)] = &normalize_conv<conv::u>; \
410 normalizers[flags_t(Annex::Base<idx2nat>)] = &normalize_idx2nat; \
411 normalizers[flags_t(Annex::Base<bitcast>)] = &normalize_bitcast; \
412 normalizers[flags_t(trait::size)] = &normalize_trait<trait::size>; \
413 normalizers[flags_t(trait::align)] = &normalize_trait<trait::align>; \
414 normalizers[flags_t(pe::hlt)] = &normalize_pe<pe::hlt>; \
415 normalizers[flags_t(pe::run)] = &normalize_pe<pe::run>; \
416 normalizers[flags_t(pe::is_closed)] = &normalize_pe<pe::is_closed>; \
417 }
418} // namespace plug::core
419
420#ifndef DOXYGEN // don't include in Doxygen documentation
421
422template<> constexpr flags_t Annex::Base<plug::core::M> = 0x1104c60000000000;
423template<> constexpr size_t Annex::Num<plug::core::M> = 0;
424template<> constexpr flags_t Annex::Base<plug::core::Ptr> = 0x1104c60000000100;
425template<> constexpr size_t Annex::Num<plug::core::Ptr> = 0;
426template<> constexpr flags_t Annex::Base<plug::core::nat> = 0x1104c60000000200;
427template<> constexpr size_t Annex::Num<plug::core::nat> = 5;
428template<> constexpr flags_t Annex::Base<plug::core::ncmp> = 0x1104c60000000300;
429template<> constexpr size_t Annex::Num<plug::core::ncmp> = 8;
430template<> constexpr flags_t Annex::Base<plug::core::mode> = 0x1104c60000000400;
431template<> constexpr size_t Annex::Num<plug::core::mode> = 4;
432template<> constexpr flags_t Annex::Base<plug::core::idx> = 0x1104c60000000500;
433template<> constexpr size_t Annex::Num<plug::core::idx> = 0;
434template<> constexpr flags_t Annex::Base<plug::core::bit1> = 0x1104c60000000600;
435template<> constexpr size_t Annex::Num<plug::core::bit1> = 4;
436template<> constexpr flags_t Annex::Base<plug::core::bit2> = 0x1104c60000000700;
437template<> constexpr size_t Annex::Num<plug::core::bit2> = 16;
438template<> constexpr flags_t Annex::Base<plug::core::shr> = 0x1104c60000000800;
439template<> constexpr size_t Annex::Num<plug::core::shr> = 2;
440template<> constexpr flags_t Annex::Base<plug::core::wrap> = 0x1104c60000000900;
441template<> constexpr size_t Annex::Num<plug::core::wrap> = 4;
442template<> constexpr flags_t Annex::Base<plug::core::minus> = 0x1104c60000000a00;
443template<> constexpr size_t Annex::Num<plug::core::minus> = 0;
444template<> constexpr flags_t Annex::Base<plug::core::div> = 0x1104c60000000b00;
445template<> constexpr size_t Annex::Num<plug::core::div> = 4;
446template<> constexpr flags_t Annex::Base<plug::core::icmp> = 0x1104c60000000c00;
447template<> constexpr size_t Annex::Num<plug::core::icmp> = 32;
448template<> constexpr flags_t Annex::Base<plug::core::extrema> = 0x1104c60000000d00;
449template<> constexpr size_t Annex::Num<plug::core::extrema> = 4;
450template<> constexpr flags_t Annex::Base<plug::core::abs> = 0x1104c60000000e00;
451template<> constexpr size_t Annex::Num<plug::core::abs> = 0;
452template<> constexpr flags_t Annex::Base<plug::core::conv> = 0x1104c60000000f00;
453template<> constexpr size_t Annex::Num<plug::core::conv> = 2;
454template<> constexpr flags_t Annex::Base<plug::core::idx2nat> = 0x1104c60000001000;
455template<> constexpr size_t Annex::Num<plug::core::idx2nat> = 0;
456template<> constexpr flags_t Annex::Base<plug::core::bitcast> = 0x1104c60000001100;
457template<> constexpr size_t Annex::Num<plug::core::bitcast> = 0;
458template<> constexpr flags_t Annex::Base<plug::core::trait> = 0x1104c60000001200;
459template<> constexpr size_t Annex::Num<plug::core::trait> = 2;
460template<> constexpr flags_t Annex::Base<plug::core::pe> = 0x1104c60000001300;
461template<> constexpr size_t Annex::Num<plug::core::pe> = 3;
462template<> constexpr flags_t Annex::Base<plug::core::select> = 0x1104c60000001400;
463template<> constexpr size_t Annex::Num<plug::core::select> = 0;
464template<> constexpr flags_t Annex::Base<plug::core::Select> = 0x1104c60000001500;
465template<> constexpr size_t Annex::Num<plug::core::Select> = 0;
466
467template<> struct Axm::IsANode<plug::core::mode> { using type = Axm; };
468template<> struct Axm::IsANode<plug::core::minus> { using type = Axm; };
469template<> struct Axm::IsANode<plug::core::select> { using type = Axm; };
470template<> struct Axm::IsANode<plug::core::Select> { using type = Axm; };
471
472#endif
473} // namespace mim
474
475#ifndef DOXYGEN // don't include in Doxygen documentation
476
477template<> struct fe::is_bit_enum<mim::plug::core::nat> : std::true_type {};
478template<> struct fe::is_bit_enum<mim::plug::core::ncmp> : std::true_type {};
479template<> struct fe::is_bit_enum<mim::plug::core::mode> : std::true_type {};
480template<> struct fe::is_bit_enum<mim::plug::core::bit1> : std::true_type {};
481template<> struct fe::is_bit_enum<mim::plug::core::bit2> : std::true_type {};
482template<> struct fe::is_bit_enum<mim::plug::core::shr> : std::true_type {};
483template<> struct fe::is_bit_enum<mim::plug::core::wrap> : std::true_type {};
484template<> struct fe::is_bit_enum<mim::plug::core::div> : std::true_type {};
485template<> struct fe::is_bit_enum<mim::plug::core::icmp> : std::true_type {};
486template<> struct fe::is_bit_enum<mim::plug::core::extrema> : std::true_type {};
487template<> struct fe::is_bit_enum<mim::plug::core::conv> : std::true_type {};
488template<> struct fe::is_bit_enum<mim::plug::core::trait> : std::true_type {};
489template<> struct fe::is_bit_enum<mim::plug::core::pe> : std::true_type {};
490
491#endif
Base class for all Defs.
Definition def.h:289
The core Plugin
Definition core.h:8
const Def * normalize_nat(const Def *type, const Def *callee, const Def *arg)
const Def * normalize_div(const Def *full_type, const Def *, const Def *arg)
const Def * normalize_pe(const Def *type, const Def *, const Def *arg)
const Def * normalize_idx2nat(const Def *type, const Def *, const Def *x)
static constexpr plugin_t Plugin_Id
Definition autogen.h:10
const Def * normalize_extrema(const Def *type, const Def *c, const Def *arg)
const Def * normalize_icmp(const Def *type, const Def *c, const Def *arg)
const Def * normalize_bit1(const Def *type, const Def *c, const Def *a)
const Def * normalize_conv(const Def *dst_t, const Def *, const Def *x)
const Def * normalize_bit2(const Def *type, const Def *c, const Def *arg)
const Def * normalize_wrap(const Def *type, const Def *c, const Def *arg)
const Def * normalize_trait(const Def *, const Def *, const Def *type)
const Def * normalize_abs(const Def *type, const Def *, const Def *arg)
void register_normalizers(Normalizers &normalizers)
const Def * normalize_idx(const Def *type, const Def *c, const Def *arg)
const Def * normalize_bitcast(const Def *dst_t, const Def *, const Def *src)
const Def * normalize_ncmp(const Def *type, const Def *callee, const Def *arg)
@ nuw
No Unsigned Wrap around.
Definition core.h:18
@ nsw
No Signed Wrap around.
Definition core.h:17
const Def * normalize_shr(const Def *type, const Def *c, const Def *arg)
Definition ast.h:16
u64 flags_t
Definition types.h:39
ankerl::unordered_dense::map< flags_t, NormalizeFn > Normalizers
Definition plugin.h:27
float rem(float a, float b)
Definition types.h:87
u64 plugin_t
Definition types.h:40
@ Axm
Definition def.h:125
static constexpr size_t Num
Number of Axm::subtags.
Definition plugin.h:273
static constexpr flags_t Base
Definition plugin.h:274