19 add = 0x1104c60000000000,
20 sub = 0x1104c60000000001,
21 mul = 0x1104c60000000002,
37 gle = 0x1104c60000000100,
39 glE = 0x1104c60000000101,
41 gLe = 0x1104c60000000102,
43 gLE = 0x1104c60000000103,
45 Gle = 0x1104c60000000104,
47 GlE = 0x1104c60000000105,
49 GLe = 0x1104c60000000106,
51 GLE = 0x1104c60000000107,
68 us = 0x1104c60000000200,
69 uS = 0x1104c60000000201,
70 Us = 0x1104c60000000202,
71 US = 0x1104c60000000203,
72 nuw = 0x1104c60000000204,
73 nsw = 0x1104c60000000205,
99 f = 0x1104c60000000400,
101 id = 0x1104c60000000402,
102 t = 0x1104c60000000403,
118 f = 0x1104c60000000500,
133 t = 0x1104c6000000050f,
149 a = 0x1104c60000000600,
150 l = 0x1104c60000000601,
166 add = 0x1104c60000000700,
167 sub = 0x1104c60000000701,
168 mul = 0x1104c60000000702,
274 sm = 0x1104c60000000b00,
276 sM = 0x1104c60000000b01,
278 Sm = 0x1104c60000000b02,
280 SM = 0x1104c60000000b03,
309 s = 0x1104c60000000d00,
310 u = 0x1104c60000000d01,
380#define THORIN_core_NORMALIZER_IMPL \
381 void register_normalizers(Normalizers& normalizers) {\
382 normalizers[flags_t(nat::add)] = &normalize_nat<nat::add>; \
383 normalizers[flags_t(nat::sub)] = &normalize_nat<nat::sub>; \
384 normalizers[flags_t(nat::mul)] = &normalize_nat<nat::mul>; \
385 normalizers[flags_t(ncmp::gle)] = &normalize_ncmp<ncmp::gle>; \
386 normalizers[flags_t(ncmp::glE)] = &normalize_ncmp<ncmp::glE>; \
387 normalizers[flags_t(ncmp::gLe)] = &normalize_ncmp<ncmp::gLe>; \
388 normalizers[flags_t(ncmp::gLE)] = &normalize_ncmp<ncmp::gLE>; \
389 normalizers[flags_t(ncmp::Gle)] = &normalize_ncmp<ncmp::Gle>; \
390 normalizers[flags_t(ncmp::GlE)] = &normalize_ncmp<ncmp::GlE>; \
391 normalizers[flags_t(ncmp::GLe)] = &normalize_ncmp<ncmp::GLe>; \
392 normalizers[flags_t(ncmp::GLE)] = &normalize_ncmp<ncmp::GLE>; \
393 normalizers[flags_t(Annex::Base<idx>)] = &normalize_idx; \
394 normalizers[flags_t(bit1::f)] = &normalize_bit1<bit1::f>; \
395 normalizers[flags_t(bit1::neg)] = &normalize_bit1<bit1::neg>; \
396 normalizers[flags_t(bit1::id)] = &normalize_bit1<bit1::id>; \
397 normalizers[flags_t(bit1::t)] = &normalize_bit1<bit1::t>; \
398 normalizers[flags_t(bit2::f)] = &normalize_bit2<bit2::f>; \
399 normalizers[flags_t(bit2::nor)] = &normalize_bit2<bit2::nor>; \
400 normalizers[flags_t(bit2::nciff)] = &normalize_bit2<bit2::nciff>; \
401 normalizers[flags_t(bit2::nfst)] = &normalize_bit2<bit2::nfst>; \
402 normalizers[flags_t(bit2::niff)] = &normalize_bit2<bit2::niff>; \
403 normalizers[flags_t(bit2::nsnd)] = &normalize_bit2<bit2::nsnd>; \
404 normalizers[flags_t(bit2::xor_)] = &normalize_bit2<bit2::xor_>; \
405 normalizers[flags_t(bit2::nand)] = &normalize_bit2<bit2::nand>; \
406 normalizers[flags_t(bit2::and_)] = &normalize_bit2<bit2::and_>; \
407 normalizers[flags_t(bit2::nxor)] = &normalize_bit2<bit2::nxor>; \
408 normalizers[flags_t(bit2::snd)] = &normalize_bit2<bit2::snd>; \
409 normalizers[flags_t(bit2::iff)] = &normalize_bit2<bit2::iff>; \
410 normalizers[flags_t(bit2::fst)] = &normalize_bit2<bit2::fst>; \
411 normalizers[flags_t(bit2::ciff)] = &normalize_bit2<bit2::ciff>; \
412 normalizers[flags_t(bit2::or_)] = &normalize_bit2<bit2::or_>; \
413 normalizers[flags_t(bit2::t)] = &normalize_bit2<bit2::t>; \
414 normalizers[flags_t(shr::a)] = &normalize_shr<shr::a>; \
415 normalizers[flags_t(shr::l)] = &normalize_shr<shr::l>; \
416 normalizers[flags_t(wrap::add)] = &normalize_wrap<wrap::add>; \
417 normalizers[flags_t(wrap::sub)] = &normalize_wrap<wrap::sub>; \
418 normalizers[flags_t(wrap::mul)] = &normalize_wrap<wrap::mul>; \
419 normalizers[flags_t(wrap::shl)] = &normalize_wrap<wrap::shl>; \
420 normalizers[flags_t(div::sdiv)] = &normalize_div<div::sdiv>; \
421 normalizers[flags_t(div::udiv)] = &normalize_div<div::udiv>; \
422 normalizers[flags_t(div::srem)] = &normalize_div<div::srem>; \
423 normalizers[flags_t(div::urem)] = &normalize_div<div::urem>; \
424 normalizers[flags_t(icmp::xygle)] = &normalize_icmp<icmp::xygle>; \
425 normalizers[flags_t(icmp::xyglE)] = &normalize_icmp<icmp::xyglE>; \
426 normalizers[flags_t(icmp::xygLe)] = &normalize_icmp<icmp::xygLe>; \
427 normalizers[flags_t(icmp::xygLE)] = &normalize_icmp<icmp::xygLE>; \
428 normalizers[flags_t(icmp::xyGle)] = &normalize_icmp<icmp::xyGle>; \
429 normalizers[flags_t(icmp::xyGlE)] = &normalize_icmp<icmp::xyGlE>; \
430 normalizers[flags_t(icmp::xyGLe)] = &normalize_icmp<icmp::xyGLe>; \
431 normalizers[flags_t(icmp::xyGLE)] = &normalize_icmp<icmp::xyGLE>; \
432 normalizers[flags_t(icmp::xYgle)] = &normalize_icmp<icmp::xYgle>; \
433 normalizers[flags_t(icmp::xYglE)] = &normalize_icmp<icmp::xYglE>; \
434 normalizers[flags_t(icmp::xYgLe)] = &normalize_icmp<icmp::xYgLe>; \
435 normalizers[flags_t(icmp::xYgLE)] = &normalize_icmp<icmp::xYgLE>; \
436 normalizers[flags_t(icmp::xYGle)] = &normalize_icmp<icmp::xYGle>; \
437 normalizers[flags_t(icmp::xYGlE)] = &normalize_icmp<icmp::xYGlE>; \
438 normalizers[flags_t(icmp::xYGLe)] = &normalize_icmp<icmp::xYGLe>; \
439 normalizers[flags_t(icmp::xYGLE)] = &normalize_icmp<icmp::xYGLE>; \
440 normalizers[flags_t(icmp::Xygle)] = &normalize_icmp<icmp::Xygle>; \
441 normalizers[flags_t(icmp::XyglE)] = &normalize_icmp<icmp::XyglE>; \
442 normalizers[flags_t(icmp::XygLe)] = &normalize_icmp<icmp::XygLe>; \
443 normalizers[flags_t(icmp::XygLE)] = &normalize_icmp<icmp::XygLE>; \
444 normalizers[flags_t(icmp::XyGle)] = &normalize_icmp<icmp::XyGle>; \
445 normalizers[flags_t(icmp::XyGlE)] = &normalize_icmp<icmp::XyGlE>; \
446 normalizers[flags_t(icmp::XyGLe)] = &normalize_icmp<icmp::XyGLe>; \
447 normalizers[flags_t(icmp::XyGLE)] = &normalize_icmp<icmp::XyGLE>; \
448 normalizers[flags_t(icmp::XYgle)] = &normalize_icmp<icmp::XYgle>; \
449 normalizers[flags_t(icmp::XYglE)] = &normalize_icmp<icmp::XYglE>; \
450 normalizers[flags_t(icmp::XYgLe)] = &normalize_icmp<icmp::XYgLe>; \
451 normalizers[flags_t(icmp::XYgLE)] = &normalize_icmp<icmp::XYgLE>; \
452 normalizers[flags_t(icmp::XYGle)] = &normalize_icmp<icmp::XYGle>; \
453 normalizers[flags_t(icmp::XYGlE)] = &normalize_icmp<icmp::XYGlE>; \
454 normalizers[flags_t(icmp::XYGLe)] = &normalize_icmp<icmp::XYGLe>; \
455 normalizers[flags_t(icmp::XYGLE)] = &normalize_icmp<icmp::XYGLE>; \
456 normalizers[flags_t(extrema::sm)] = &normalize_extrema<extrema::sm>; \
457 normalizers[flags_t(extrema::sM)] = &normalize_extrema<extrema::sM>; \
458 normalizers[flags_t(extrema::Sm)] = &normalize_extrema<extrema::Sm>; \
459 normalizers[flags_t(extrema::SM)] = &normalize_extrema<extrema::SM>; \
460 normalizers[flags_t(Annex::Base<abs>)] = &normalize_abs; \
461 normalizers[flags_t(conv::s)] = &normalize_conv<conv::s>; \
462 normalizers[flags_t(conv::u)] = &normalize_conv<conv::u>; \
463 normalizers[flags_t(Annex::Base<bitcast>)] = &normalize_bitcast; \
464 normalizers[flags_t(trait::size)] = &normalize_trait<trait::size>; \
465 normalizers[flags_t(trait::align)] = &normalize_trait<trait::align>; \
466 normalizers[flags_t(pe::hlt)] = &normalize_pe<pe::hlt>; \
467 normalizers[flags_t(pe::run)] = &normalize_pe<pe::run>; \
468 normalizers[flags_t(pe::known)] = &normalize_pe<pe::known>; \
469 normalizers[flags_t(Annex::Base<zip>)] = &normalize_zip; \
511template<>
struct Axiom::Match<plug::
core::mode> {
using type =
Axiom; };
Helper class to retrieve Infer::arg if present.
Ref normalize_ncmp(Ref type, Ref callee, Ref arg)
Ref normalize_icmp(Ref type, Ref c, Ref arg)
Ref normalize_bit1(Ref type, Ref c, Ref a)
Ref normalize_extrema(Ref type, Ref c, Ref arg)
void register_normalizers(Normalizers &normalizers)
static constexpr plugin_t Plugin_Id
Ref normalize_bit2(Ref type, Ref c, Ref arg)
Ref normalize_zip(Ref type, Ref c, Ref arg)
Ref normalize_nat(Ref type, Ref callee, Ref arg)
Ref normalize_div(Ref full_type, Ref c, Ref arg)
Ref normalize_idx(Ref type, Ref c, Ref arg)
Ref normalize_trait(Ref nat, Ref callee, Ref type)
Ref normalize_conv(Ref dst_t, Ref c, Ref x)
Ref normalize_abs(Ref type, Ref c, Ref arg)
Ref normalize_wrap(Ref type, Ref c, Ref arg)
Ref normalize_shr(Ref type, Ref c, Ref arg)
Ref normalize_pe(Ref type, Ref callee, Ref arg)
Ref normalize_bitcast(Ref dst_t, Ref callee, Ref src)
absl::flat_hash_map< flags_t, NormalizeFn > Normalizers
static constexpr flags_t Base
#define THORIN_ENUM_OPERATORS(E)
Use this to declare all kind of bit and comparison operators for an enum E.