Thorin 1.9.0
The Higher ORder INtermediate representation
Loading...
Searching...
No Matches
autogen.h
Go to the documentation of this file.
1#pragma once
2
3#include <thorin/axiom.h>
4#include <thorin/plugin.h>
5
6/// @namespace thorin::plug::math @ref math
7namespace thorin {
8namespace plug::math {
9
10static constexpr plugin_t Plugin_Id = 0x3825490000000000;
11
12/// @name %%math.F
13///@{
14#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
15enum F : flags_t {
16#else
17enum class F : flags_t {
18#endif
19};
20
21///@}
22
23/// @name %%math.f16
24///@{
25#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
26enum f16 : flags_t {
27#else
28enum class f16 : flags_t {
29#endif
30};
31
32///@}
33
34/// @name %%math.f32
35///@{
36#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
37enum f32 : flags_t {
38#else
39enum class f32 : flags_t {
40#endif
41};
42
43///@}
44
45/// @name %%math.f64
46///@{
47#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
48enum f64 : flags_t {
49#else
50enum class f64 : flags_t {
51#endif
52};
53
54///@}
55
56/// @name %%math.bf16
57///@{
58#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
59enum bf16 : flags_t {
60#else
61enum class bf16 : flags_t {
62#endif
63};
64
65///@}
66
67/// @name %%math.nvtf32
68///@{
69#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
71#else
72enum class nvtf32 : flags_t {
73#endif
74};
75
76///@}
77
78/// @name %%math.amdfp24
79///@{
80#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
82#else
83enum class amdfp24 : flags_t {
84#endif
85};
86
87///@}
88
89/// @name %%math.pxr24
90///@{
91#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
92enum pxr24 : flags_t {
93#else
94enum class pxr24 : flags_t {
95#endif
96};
97
98///@}
99
100/// @name %%math.F16
101///@{
102#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
103enum F16 : flags_t {
104#else
105enum class F16 : flags_t {
106#endif
107};
108
109///@}
110
111/// @name %%math.F32
112///@{
113#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
114enum F32 : flags_t {
115#else
116enum class F32 : flags_t {
117#endif
118};
119
120///@}
121
122/// @name %%math.F64
123///@{
124#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
125enum F64 : flags_t {
126#else
127enum class F64 : flags_t {
128#endif
129};
130
131///@}
132
133/// @name %%math.BF16
134///@{
135#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
136enum BF16 : flags_t {
137#else
138enum class BF16 : flags_t {
139#endif
140};
141
142///@}
143
144/// @name %%math.NVTF32
145///@{
146#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
148#else
149enum class NVTF32 : flags_t {
150#endif
151};
152
153///@}
154
155/// @name %%math.AMDFP24
156///@{
157#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
159#else
160enum class AMDFP24 : flags_t {
161#endif
162};
163
164///@}
165
166/// @name %%math.PXR24
167///@{
168#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
170#else
171enum class PXR24 : flags_t {
172#endif
173};
174
175///@}
176
177/// @name %%math.arith
178///@{
179#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
181#else
182enum class arith : flags_t {
183#endif
184 add = 0x3825490000000f00,
185 sub = 0x3825490000000f01,
186 mul = 0x3825490000000f02,
187 div = 0x3825490000000f03,
188 rem = 0x3825490000000f04,
189};
190
192template<arith>
194
195///@}
196
197/// @name %%math.minus
198///@{
199#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
201#else
202enum class minus : flags_t {
203#endif
204};
205
206///@}
207
208/// @name %%math.extrema
209///@{
210#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
212#else
213enum class extrema : flags_t {
214#endif
215 im = 0x3825490000001100,
217 iM = 0x3825490000001101,
219 Im = 0x3825490000001102,
221 IM = 0x3825490000001103,
223};
224
226template<extrema>
228
229///@}
230
231/// @name %%math.tri
232///@{
233#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
234enum tri : flags_t {
235#else
236enum class tri : flags_t {
237#endif
238 ahff = 0x3825490000001200,
240 ahfF = 0x3825490000001201,
242 ahFf = 0x3825490000001202,
244 ahFF = 0x3825490000001203,
245 aHff = 0x3825490000001204,
248 aHfF = 0x3825490000001205,
250 aHFf = 0x3825490000001206,
252 aHFF = 0x3825490000001207,
253 Ahff = 0x3825490000001208,
256 AhfF = 0x3825490000001209,
258 AhFf = 0x382549000000120a,
260 AhFF = 0x382549000000120b,
261 AHff = 0x382549000000120c,
263 AHfF = 0x382549000000120d,
265 AHFf = 0x382549000000120e,
267 AHFF = 0x382549000000120f,
268};
269
271template<tri>
273
274///@}
275
276/// @name %%math.pow
277///@{
278#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
279enum pow : flags_t {
280#else
281enum class pow : flags_t {
282#endif
283};
284
286///@}
287
288/// @name %%math.rt
289///@{
290#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
291enum rt : flags_t {
292#else
293enum class rt : flags_t {
294#endif
295 sq = 0x3825490000001400,
296 cb = 0x3825490000001401,
297};
298
300template<rt>
302
303///@}
304
305/// @name %%math.exp
306///@{
307#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
308enum exp : flags_t {
309#else
310enum class exp : flags_t {
311#endif
312 lbb = 0x3825490000001500,
314 lbB = 0x3825490000001501,
317 lBb = 0x3825490000001502,
320 lBB = 0x3825490000001503,
321 Lbb = 0x3825490000001504,
323 LbB = 0x3825490000001505,
325 LBb = 0x3825490000001506,
327 LBB = 0x3825490000001507,
328};
329
331template<exp>
333
334///@}
335
336/// @name %%math.er
337///@{
338#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
339enum er : flags_t {
340#else
341enum class er : flags_t {
342#endif
343 f = 0x3825490000001600,
344 fc = 0x3825490000001601,
345};
346
348template<er>
350
351///@}
352
353/// @name %%math.gamma
354///@{
355#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
357#else
358enum class gamma : flags_t {
359#endif
360 t = 0x3825490000001700,
361 l = 0x3825490000001701,
362};
363
365template<gamma>
367
368///@}
369
370/// @name %%math.abs
371///@{
372#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
373enum abs : flags_t {
374#else
375enum class abs : flags_t {
376#endif
377};
378
380///@}
381
382/// @name %%math.round
383///@{
384#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
386#else
387enum class round : flags_t {
388#endif
389 f = 0x3825490000001900,
390 c = 0x3825490000001901,
391 r = 0x3825490000001902,
392 t = 0x3825490000001903,
393};
394
396template<round>
398
399///@}
400
401/// @name %%math.cmp
402///@{
403#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
404enum cmp : flags_t {
405#else
406enum class cmp : flags_t {
407#endif
408 ugle = 0x3825490000001a00,
409 f = ugle,
410 uglE = 0x3825490000001a01,
412 ugLe = 0x3825490000001a02,
413 l = ugLe,
414 ugLE = 0x3825490000001a03,
416 uGle = 0x3825490000001a04,
418 uGlE = 0x3825490000001a05,
420 uGLe = 0x3825490000001a06,
422 uGLE = 0x3825490000001a07,
424 Ugle = 0x3825490000001a08,
426 UglE = 0x3825490000001a09,
428 UgLe = 0x3825490000001a0a,
430 UgLE = 0x3825490000001a0b,
432 UGle = 0x3825490000001a0c,
434 UGlE = 0x3825490000001a0d,
436 UGLe = 0x3825490000001a0e,
438 UGLE = 0x3825490000001a0f,
439 t = UGLE,
440};
441
443template<cmp>
445
446///@}
447
448/// @name %%math.conv
449///@{
450#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
451enum conv : flags_t {
452#else
453enum class conv : flags_t {
454#endif
455 s2f = 0x3825490000001b00,
456 u2f = 0x3825490000001b01,
457 f2s = 0x3825490000001b02,
458 f2u = 0x3825490000001b03,
459 f2f = 0x3825490000001b04,
460};
461
463template<conv>
465
466///@}
467
468/// @name %%math.slf
469///@{
470#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
471enum slf : flags_t {
472#else
473enum class slf : flags_t {
474#endif
475};
476
477///@}
478
479/// @name %%math.sgn
480///@{
481#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
482enum sgn : flags_t {
483#else
484enum class sgn : flags_t {
485#endif
486};
487
488///@}
489
490/// @name %%math.rrt
491///@{
492#ifdef DOXYGEN // see https://github.com/doxygen/doxygen/issues/9668
493enum rrt : flags_t {
494#else
495enum class rrt : flags_t {
496#endif
497};
498
499///@}
500
502
503#define THORIN_math_NORMALIZER_IMPL \
504 void register_normalizers(Normalizers& normalizers) {\
505 normalizers[flags_t(arith::add)] = &normalize_arith<arith::add>; \
506 normalizers[flags_t(arith::sub)] = &normalize_arith<arith::sub>; \
507 normalizers[flags_t(arith::mul)] = &normalize_arith<arith::mul>; \
508 normalizers[flags_t(arith::div)] = &normalize_arith<arith::div>; \
509 normalizers[flags_t(arith::rem)] = &normalize_arith<arith::rem>; \
510 normalizers[flags_t(extrema::im)] = &normalize_extrema<extrema::im>; \
511 normalizers[flags_t(extrema::iM)] = &normalize_extrema<extrema::iM>; \
512 normalizers[flags_t(extrema::Im)] = &normalize_extrema<extrema::Im>; \
513 normalizers[flags_t(extrema::IM)] = &normalize_extrema<extrema::IM>; \
514 normalizers[flags_t(tri::ahff)] = &normalize_tri<tri::ahff>; \
515 normalizers[flags_t(tri::ahfF)] = &normalize_tri<tri::ahfF>; \
516 normalizers[flags_t(tri::ahFf)] = &normalize_tri<tri::ahFf>; \
517 normalizers[flags_t(tri::ahFF)] = &normalize_tri<tri::ahFF>; \
518 normalizers[flags_t(tri::aHff)] = &normalize_tri<tri::aHff>; \
519 normalizers[flags_t(tri::aHfF)] = &normalize_tri<tri::aHfF>; \
520 normalizers[flags_t(tri::aHFf)] = &normalize_tri<tri::aHFf>; \
521 normalizers[flags_t(tri::aHFF)] = &normalize_tri<tri::aHFF>; \
522 normalizers[flags_t(tri::Ahff)] = &normalize_tri<tri::Ahff>; \
523 normalizers[flags_t(tri::AhfF)] = &normalize_tri<tri::AhfF>; \
524 normalizers[flags_t(tri::AhFf)] = &normalize_tri<tri::AhFf>; \
525 normalizers[flags_t(tri::AhFF)] = &normalize_tri<tri::AhFF>; \
526 normalizers[flags_t(tri::AHff)] = &normalize_tri<tri::AHff>; \
527 normalizers[flags_t(tri::AHfF)] = &normalize_tri<tri::AHfF>; \
528 normalizers[flags_t(tri::AHFf)] = &normalize_tri<tri::AHFf>; \
529 normalizers[flags_t(tri::AHFF)] = &normalize_tri<tri::AHFF>; \
530 normalizers[flags_t(Annex::Base<pow>)] = &normalize_pow; \
531 normalizers[flags_t(rt::sq)] = &normalize_rt<rt::sq>; \
532 normalizers[flags_t(rt::cb)] = &normalize_rt<rt::cb>; \
533 normalizers[flags_t(exp::lbb)] = &normalize_exp<exp::lbb>; \
534 normalizers[flags_t(exp::lbB)] = &normalize_exp<exp::lbB>; \
535 normalizers[flags_t(exp::lBb)] = &normalize_exp<exp::lBb>; \
536 normalizers[flags_t(exp::lBB)] = &normalize_exp<exp::lBB>; \
537 normalizers[flags_t(exp::Lbb)] = &normalize_exp<exp::Lbb>; \
538 normalizers[flags_t(exp::LbB)] = &normalize_exp<exp::LbB>; \
539 normalizers[flags_t(exp::LBb)] = &normalize_exp<exp::LBb>; \
540 normalizers[flags_t(exp::LBB)] = &normalize_exp<exp::LBB>; \
541 normalizers[flags_t(er::f)] = &normalize_er<er::f>; \
542 normalizers[flags_t(er::fc)] = &normalize_er<er::fc>; \
543 normalizers[flags_t(gamma::t)] = &normalize_gamma<gamma::t>; \
544 normalizers[flags_t(gamma::l)] = &normalize_gamma<gamma::l>; \
545 normalizers[flags_t(Annex::Base<abs>)] = &normalize_abs; \
546 normalizers[flags_t(round::f)] = &normalize_round<round::f>; \
547 normalizers[flags_t(round::c)] = &normalize_round<round::c>; \
548 normalizers[flags_t(round::r)] = &normalize_round<round::r>; \
549 normalizers[flags_t(round::t)] = &normalize_round<round::t>; \
550 normalizers[flags_t(cmp::ugle)] = &normalize_cmp<cmp::ugle>; \
551 normalizers[flags_t(cmp::uglE)] = &normalize_cmp<cmp::uglE>; \
552 normalizers[flags_t(cmp::ugLe)] = &normalize_cmp<cmp::ugLe>; \
553 normalizers[flags_t(cmp::ugLE)] = &normalize_cmp<cmp::ugLE>; \
554 normalizers[flags_t(cmp::uGle)] = &normalize_cmp<cmp::uGle>; \
555 normalizers[flags_t(cmp::uGlE)] = &normalize_cmp<cmp::uGlE>; \
556 normalizers[flags_t(cmp::uGLe)] = &normalize_cmp<cmp::uGLe>; \
557 normalizers[flags_t(cmp::uGLE)] = &normalize_cmp<cmp::uGLE>; \
558 normalizers[flags_t(cmp::Ugle)] = &normalize_cmp<cmp::Ugle>; \
559 normalizers[flags_t(cmp::UglE)] = &normalize_cmp<cmp::UglE>; \
560 normalizers[flags_t(cmp::UgLe)] = &normalize_cmp<cmp::UgLe>; \
561 normalizers[flags_t(cmp::UgLE)] = &normalize_cmp<cmp::UgLE>; \
562 normalizers[flags_t(cmp::UGle)] = &normalize_cmp<cmp::UGle>; \
563 normalizers[flags_t(cmp::UGlE)] = &normalize_cmp<cmp::UGlE>; \
564 normalizers[flags_t(cmp::UGLe)] = &normalize_cmp<cmp::UGLe>; \
565 normalizers[flags_t(cmp::UGLE)] = &normalize_cmp<cmp::UGLE>; \
566 normalizers[flags_t(conv::s2f)] = &normalize_conv<conv::s2f>; \
567 normalizers[flags_t(conv::u2f)] = &normalize_conv<conv::u2f>; \
568 normalizers[flags_t(conv::f2s)] = &normalize_conv<conv::f2s>; \
569 normalizers[flags_t(conv::f2u)] = &normalize_conv<conv::f2u>; \
570 normalizers[flags_t(conv::f2f)] = &normalize_conv<conv::f2f>; \
571 }
572} // namespace plug::math
573
574#ifndef DOXYGEN // don't include in Doxygen documentation
575template<> constexpr flags_t Annex::Base<plug::math::F> = 0x3825490000000000;
576template<> constexpr size_t Annex::Num<plug::math::F> = 0;
577template<> constexpr flags_t Annex::Base<plug::math::f16> = 0x3825490000000100;
578template<> constexpr size_t Annex::Num<plug::math::f16> = 0;
579template<> constexpr flags_t Annex::Base<plug::math::f32> = 0x3825490000000200;
580template<> constexpr size_t Annex::Num<plug::math::f32> = 0;
581template<> constexpr flags_t Annex::Base<plug::math::f64> = 0x3825490000000300;
582template<> constexpr size_t Annex::Num<plug::math::f64> = 0;
583template<> constexpr flags_t Annex::Base<plug::math::bf16> = 0x3825490000000400;
584template<> constexpr size_t Annex::Num<plug::math::bf16> = 0;
585template<> constexpr flags_t Annex::Base<plug::math::nvtf32> = 0x3825490000000500;
586template<> constexpr size_t Annex::Num<plug::math::nvtf32> = 0;
587template<> constexpr flags_t Annex::Base<plug::math::amdfp24> = 0x3825490000000600;
588template<> constexpr size_t Annex::Num<plug::math::amdfp24> = 0;
589template<> constexpr flags_t Annex::Base<plug::math::pxr24> = 0x3825490000000700;
590template<> constexpr size_t Annex::Num<plug::math::pxr24> = 0;
591template<> constexpr flags_t Annex::Base<plug::math::F16> = 0x3825490000000800;
592template<> constexpr size_t Annex::Num<plug::math::F16> = 0;
593template<> constexpr flags_t Annex::Base<plug::math::F32> = 0x3825490000000900;
594template<> constexpr size_t Annex::Num<plug::math::F32> = 0;
595template<> constexpr flags_t Annex::Base<plug::math::F64> = 0x3825490000000a00;
596template<> constexpr size_t Annex::Num<plug::math::F64> = 0;
597template<> constexpr flags_t Annex::Base<plug::math::BF16> = 0x3825490000000b00;
598template<> constexpr size_t Annex::Num<plug::math::BF16> = 0;
599template<> constexpr flags_t Annex::Base<plug::math::NVTF32> = 0x3825490000000c00;
600template<> constexpr size_t Annex::Num<plug::math::NVTF32> = 0;
601template<> constexpr flags_t Annex::Base<plug::math::AMDFP24> = 0x3825490000000d00;
602template<> constexpr size_t Annex::Num<plug::math::AMDFP24> = 0;
603template<> constexpr flags_t Annex::Base<plug::math::PXR24> = 0x3825490000000e00;
604template<> constexpr size_t Annex::Num<plug::math::PXR24> = 0;
605template<> constexpr flags_t Annex::Base<plug::math::arith> = 0x3825490000000f00;
606template<> constexpr size_t Annex::Num<plug::math::arith> = 5;
607template<> constexpr flags_t Annex::Base<plug::math::minus> = 0x3825490000001000;
608template<> constexpr size_t Annex::Num<plug::math::minus> = 0;
609template<> constexpr flags_t Annex::Base<plug::math::extrema> = 0x3825490000001100;
610template<> constexpr size_t Annex::Num<plug::math::extrema> = 4;
611template<> constexpr flags_t Annex::Base<plug::math::tri> = 0x3825490000001200;
612template<> constexpr size_t Annex::Num<plug::math::tri> = 16;
613template<> constexpr flags_t Annex::Base<plug::math::pow> = 0x3825490000001300;
614template<> constexpr size_t Annex::Num<plug::math::pow> = 0;
615template<> constexpr flags_t Annex::Base<plug::math::rt> = 0x3825490000001400;
616template<> constexpr size_t Annex::Num<plug::math::rt> = 2;
617template<> constexpr flags_t Annex::Base<plug::math::exp> = 0x3825490000001500;
618template<> constexpr size_t Annex::Num<plug::math::exp> = 8;
619template<> constexpr flags_t Annex::Base<plug::math::er> = 0x3825490000001600;
620template<> constexpr size_t Annex::Num<plug::math::er> = 2;
621template<> constexpr flags_t Annex::Base<plug::math::gamma> = 0x3825490000001700;
622template<> constexpr size_t Annex::Num<plug::math::gamma> = 2;
623template<> constexpr flags_t Annex::Base<plug::math::abs> = 0x3825490000001800;
624template<> constexpr size_t Annex::Num<plug::math::abs> = 0;
625template<> constexpr flags_t Annex::Base<plug::math::round> = 0x3825490000001900;
626template<> constexpr size_t Annex::Num<plug::math::round> = 4;
627template<> constexpr flags_t Annex::Base<plug::math::cmp> = 0x3825490000001a00;
628template<> constexpr size_t Annex::Num<plug::math::cmp> = 16;
629template<> constexpr flags_t Annex::Base<plug::math::conv> = 0x3825490000001b00;
630template<> constexpr size_t Annex::Num<plug::math::conv> = 5;
631template<> constexpr flags_t Annex::Base<plug::math::slf> = 0x3825490000001c00;
632template<> constexpr size_t Annex::Num<plug::math::slf> = 0;
633template<> constexpr flags_t Annex::Base<plug::math::sgn> = 0x3825490000001d00;
634template<> constexpr size_t Annex::Num<plug::math::sgn> = 0;
635template<> constexpr flags_t Annex::Base<plug::math::rrt> = 0x3825490000001e00;
636template<> constexpr size_t Annex::Num<plug::math::rrt> = 0;
637
638template<> struct Axiom::Match<plug::math::f16> { using type = Axiom; };
639template<> struct Axiom::Match<plug::math::f32> { using type = Axiom; };
640template<> struct Axiom::Match<plug::math::f64> { using type = Axiom; };
641template<> struct Axiom::Match<plug::math::bf16> { using type = Axiom; };
642template<> struct Axiom::Match<plug::math::nvtf32> { using type = Axiom; };
643template<> struct Axiom::Match<plug::math::amdfp24> { using type = Axiom; };
644template<> struct Axiom::Match<plug::math::pxr24> { using type = Axiom; };
645template<> struct Axiom::Match<plug::math::F16> { using type = Axiom; };
646template<> struct Axiom::Match<plug::math::F32> { using type = Axiom; };
647template<> struct Axiom::Match<plug::math::F64> { using type = Axiom; };
648template<> struct Axiom::Match<plug::math::BF16> { using type = Axiom; };
649template<> struct Axiom::Match<plug::math::NVTF32> { using type = Axiom; };
650template<> struct Axiom::Match<plug::math::AMDFP24> { using type = Axiom; };
651template<> struct Axiom::Match<plug::math::PXR24> { using type = Axiom; };
652template<> struct Axiom::Match<plug::math::minus> { using type = Axiom; };
653template<> struct Axiom::Match<plug::math::slf> { using type = Axiom; };
654template<> struct Axiom::Match<plug::math::sgn> { using type = Axiom; };
655template<> struct Axiom::Match<plug::math::rrt> { using type = Axiom; };
656#endif
657} // namespace thorin
Helper class to retrieve Infer::arg if present.
Definition def.h:87
@ Axiom
Definition def.h:41
Ref normalize_round(Ref type, Ref c, Ref arg)
Ref normalize_er(Ref type, Ref c, Ref arg)
Ref normalize_conv(Ref dst_t, Ref c, Ref x)
Ref normalize_exp(Ref type, Ref c, Ref arg)
Ref normalize_abs(Ref type, Ref c, Ref arg)
Ref normalize_rt(Ref type, Ref c, Ref arg)
Ref normalize_pow(Ref type, Ref c, Ref arg)
Ref normalize_arith(Ref type, Ref c, Ref arg)
Ref normalize_gamma(Ref type, Ref c, Ref arg)
Ref normalize_extrema(Ref type, Ref c, Ref arg)
static constexpr plugin_t Plugin_Id
Definition autogen.h:10
void register_normalizers(Normalizers &normalizers)
Ref normalize_cmp(Ref type, Ref c, Ref arg)
Ref normalize_tri(Ref type, Ref c, Ref arg)
Definition cfg.h:11
absl::flat_hash_map< flags_t, NormalizeFn > Normalizers
Definition plugin.h:19
u64 plugin_t
Definition types.h:47
u64 flags_t
Definition types.h:46
static constexpr flags_t Base
Definition plugin.h:131
#define THORIN_ENUM_OPERATORS(E)
Use this to declare all kind of bit and comparison operators for an enum E.
Definition util.h:189