MimIR 0.1
MimIR is my Intermediate Representation
|
Enumerations | |
%math.f16 | |
enum class | f16 : flags_t |
enum class | F16 : flags_t |
%math.f32 | |
enum class | f32 : flags_t |
enum class | F32 : flags_t |
%math.f64 | |
enum class | f64 : flags_t |
enum class | F64 : flags_t |
%math.bf16 | |
enum class | bf16 : flags_t |
enum class | BF16 : flags_t |
%math.nvtf32 | |
enum class | nvtf32 : flags_t |
enum class | NVTF32 : flags_t |
%math.amdfp24 | |
enum class | amdfp24 : flags_t |
enum class | AMDFP24 : flags_t |
%math.pxr24 | |
enum class | pxr24 : flags_t |
enum class | PXR24 : flags_t |
%math.minus | |
enum class | minus : flags_t |
%math.slf | |
enum class | slf : flags_t |
%math.sgn | |
enum class | sgn : flags_t |
%math.rrt | |
enum class | rrt : flags_t |
Functions | |
void | register_normalizers (Normalizers &normalizers) |
Variables | |
static constexpr plugin_t | Plugin_Id = 0x3825490000000000 |
Mode | |
enum class | Mode : nat_t { top = 0 , none = top , nnan = 1 << 0 , ninf = 1 << 1 , nsz = 1 << 2 , arcp = 1 << 3 , contract = 1 << 4 , afn = 1 << 5 , reassoc = 1 << 6 , finite = nnan | ninf , unsafe = nsz | arcp | reassoc , fast , bot = fast } |
Allowed optimizations for a specific operation. More... | |
using | VMode = std::variant<Mode, nat_t, Ref> |
Give Mode as mim::plug::math::Mode, mim::nat_t or Ref. | |
Ref | mode (World &w, VMode m) |
mim::plug::math::VMode -> Ref. | |
%math.F | |
enum class | F : flags_t |
Ref | type_f (Ref pe) |
Ref | type_f (World &w, nat_t p, nat_t e) |
template<nat_t P, nat_t E> | |
auto | match_f (Ref def) |
auto | match_f16 (Ref def) |
auto | match_f32 (Ref def) |
auto | match_f64 (Ref def) |
std::optional< nat_t > | isa_f (Ref def) |
template<class R > | |
const Lit * | lit_f (World &w, R val) |
const Lit * | lit_f (World &w, nat_t width, mim::f64 val) |
%math.arith | |
enum class | arith : flags_t { add = 0x3825490000000f00 , sub = 0x3825490000000f01 , mul = 0x3825490000000f02 , div = 0x3825490000000f03 , rem = 0x3825490000000f04 } |
Ref | op_rminus (VMode m, Ref a) |
template<arith id> | |
Ref | normalize_arith (Ref type, Ref c, Ref arg) |
%math.extrema | |
enum class | extrema : flags_t { im = 0x3825490000001100 , fmin = im , iM = 0x3825490000001101 , fmax = iM , Im = 0x3825490000001102 , ieee754min = Im , IM = 0x3825490000001103 , ieee754max = IM } |
template<extrema id> | |
Ref | normalize_extrema (Ref type, Ref c, Ref arg) |
%math.tri | |
enum class | tri : flags_t { ahff = 0x3825490000001200 , sin = ahff , ahfF = 0x3825490000001201 , cos = ahfF , ahFf = 0x3825490000001202 , tan = ahFf , ahFF = 0x3825490000001203 , aHff = 0x3825490000001204 , sinh = aHff , h = aHff , aHfF = 0x3825490000001205 , cosh = aHfF , aHFf = 0x3825490000001206 , tanh = aHFf , aHFF = 0x3825490000001207 , Ahff = 0x3825490000001208 , asin = Ahff , a = Ahff , AhfF = 0x3825490000001209 , acos = AhfF , AhFf = 0x382549000000120a , atan = AhFf , AhFF = 0x382549000000120b , AHff = 0x382549000000120c , asinh = AHff , AHfF = 0x382549000000120d , acosh = AHfF , AHFf = 0x382549000000120e , atanh = AHFf , AHFF = 0x382549000000120f } |
template<tri id> | |
Ref | normalize_tri (Ref type, Ref c, Ref arg) |
%math.pow | |
enum class | pow : flags_t |
Ref | normalize_pow (Ref type, Ref c, Ref arg) |
%math.rt | |
enum class | rt : flags_t { sq = 0x3825490000001400 , cb = 0x3825490000001401 } |
template<rt id> | |
Ref | normalize_rt (Ref type, Ref c, Ref arg) |
%math.exp | |
enum class | exp : flags_t { lbb = 0x3825490000001500 , exp = lbb , lbB = 0x3825490000001501 , exp2 = lbB , bin = lbB , lBb = 0x3825490000001502 , exp10 = lBb , dec = lBb , lBB = 0x3825490000001503 , Lbb = 0x3825490000001504 , log = Lbb , LbB = 0x3825490000001505 , log2 = LbB , LBb = 0x3825490000001506 , log10 = LBb , LBB = 0x3825490000001507 } |
template<exp id> | |
Ref | normalize_exp (Ref type, Ref c, Ref arg) |
%math.er | |
enum class | er : flags_t { f = 0x3825490000001600 , fc = 0x3825490000001601 } |
template<er id> | |
Ref | normalize_er (Ref type, Ref c, Ref arg) |
%math.gamma | |
enum class | gamma : flags_t { t = 0x3825490000001700 , l = 0x3825490000001701 } |
template<gamma id> | |
Ref | normalize_gamma (Ref type, Ref c, Ref arg) |
%math.abs | |
enum class | abs : flags_t |
Ref | normalize_abs (Ref type, Ref c, Ref arg) |
%math.round | |
enum class | round : flags_t { f = 0x3825490000001900 , c = 0x3825490000001901 , r = 0x3825490000001902 , t = 0x3825490000001903 } |
template<round id> | |
Ref | normalize_round (Ref type, Ref c, Ref arg) |
%math.cmp | |
enum class | cmp : flags_t { ugle = 0x3825490000001a00 , f = ugle , uglE = 0x3825490000001a01 , e = uglE , ugLe = 0x3825490000001a02 , l = ugLe , ugLE = 0x3825490000001a03 , le = ugLE , uGle = 0x3825490000001a04 , g = uGle , uGlE = 0x3825490000001a05 , ge = uGlE , uGLe = 0x3825490000001a06 , ne = uGLe , uGLE = 0x3825490000001a07 , o = uGLE , Ugle = 0x3825490000001a08 , u = Ugle , UglE = 0x3825490000001a09 , ue = UglE , UgLe = 0x3825490000001a0a , ul = UgLe , UgLE = 0x3825490000001a0b , ule = UgLE , UGle = 0x3825490000001a0c , ug = UGle , UGlE = 0x3825490000001a0d , uge = UGlE , UGLe = 0x3825490000001a0e , une = UGLe , UGLE = 0x3825490000001a0f , t = UGLE } |
template<cmp id> | |
Ref | normalize_cmp (Ref type, Ref c, Ref arg) |
%math.conv | |
enum class | conv : flags_t { s2f = 0x3825490000001b00 , u2f = 0x3825490000001b01 , f2s = 0x3825490000001b02 , f2u = 0x3825490000001b03 , f2f = 0x3825490000001b04 } |
template<conv id> | |
Ref | normalize_conv (Ref dst_t, Ref c, Ref x) |
using mim::plug::math::VMode = std::variant<Mode, nat_t, Ref> |
Give Mode as mim::plug::math::Mode, mim::nat_t or Ref.
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
Allowed optimizations for a specific operation.
Enumerator | |
---|---|
top | |
none | Alias for Mode::none. |
nnan | No NaNs. Allow optimizations to assume the arguments and result are not NaN. Such optimizations are required to retain defined behavior over NaNs, but the value of the result is undefined. |
ninf | No Infs. Allow optimizations to assume the arguments and result are not +/-Inf. Such optimizations are required to retain defined behavior over +/-Inf, but the value of the result is undefined. |
nsz | No Signed Zeros. Allow optimizations to treat the sign of a zero argument or result as insignificant. |
arcp | Allow Reciprocal. Allow optimizations to use the reciprocal of an argument rather than perform division. |
contract | Allow floating-point contraction (e.g. fusing a multiply followed by an addition into a fused multiply-and-add). |
afn | Approximate functions. Allow substitution of approximate calculations for functions (sin, log, sqrt, etc). |
reassoc | Allow reassociation transformations for floating-point operations. This may dramatically change results in floating point. |
finite | |
unsafe | |
fast | All flags. |
bot | Alias for Mode::fast. |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
|
strong |
Definition at line 76 of file math.h.
References e, and mim::match().
Referenced by mim::ll::Emitter::emit_bb(), normalize_arith(), normalize_conv(), mim::plug::core::normalize_trait(), and op_rminus().
Definition at line 89 of file math.h.
References mim::bitcast().
Referenced by lit_f(), normalize_arith(), and op_rminus().
Definition at line 64 of file math.h.
References e, mim::Lit::isa(), and mim::match().
Referenced by match_f16(), match_f32(), and match_f64().
|
inline |
|
inline |
|
inline |
mim::plug::math::VMode -> Ref.
Definition at line 46 of file math.h.
References std::get().
Referenced by normalize_arith(), and op_rminus().
Definition at line 415 of file normalizers.cpp.
References c, and mim::Def::world().
Definition at line 235 of file normalizers.cpp.
References a, add, c, div, fast, mim::Lit::isa(), isa_f(), lit_f(), mode(), mul, mim::Def::projs(), rem, sub, and mim::Def::world().
Definition at line 356 of file normalizers.cpp.
References a, c, f, mim::Def::projs(), t, and mim::Def::world().
Definition at line 368 of file normalizers.cpp.
References mim::App::arg(), c, f2f, f2s, f2u, mim::Lit::isa(), isa_f(), l, M, s2f, mim::Idx::size2bitwidth(), mim::Def::type(), u2f, and mim::Def::world().
Definition at line 344 of file normalizers.cpp.
References c, and mim::Def::world().
Definition at line 338 of file normalizers.cpp.
References c, and mim::Def::world().
Definition at line 299 of file normalizers.cpp.
References a, c, fmax, fmin, ieee754max, ieee754min, mim::Lit::isa(), nnan, nsz, mim::Def::projs(), and mim::Def::world().
Definition at line 350 of file normalizers.cpp.
References c, and mim::Def::world().
Definition at line 325 of file normalizers.cpp.
References a, c, mim::Def::projs(), and mim::Def::world().
Definition at line 421 of file normalizers.cpp.
References c, and mim::Def::world().
Definition at line 332 of file normalizers.cpp.
References c, and mim::Def::world().
Definition at line 319 of file normalizers.cpp.
References c, and mim::Def::world().
void mim::plug::math::register_normalizers | ( | Normalizers & | normalizers | ) |
Referenced by mim_get_plugin().