MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::plug::math Namespace Reference

The math Plugin More...

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_tisa_f (Ref def)
 
template<class R >
const Litlit_f (World &w, R val)
 
const Litlit_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)
 

Detailed Description

Typedef Documentation

◆ VMode

using mim::plug::math::VMode = std::variant<Mode, nat_t, Ref>

Give Mode as mim::plug::math::Mode, mim::nat_t or Ref.

Definition at line 43 of file math.h.

Enumeration Type Documentation

◆ abs

enum class mim::plug::math::abs : flags_t
strong

Definition at line 269 of file autogen.h.

◆ AMDFP24

enum class mim::plug::math::AMDFP24 : flags_t
strong

Definition at line 105 of file autogen.h.

◆ amdfp24

enum class mim::plug::math::amdfp24 : flags_t
strong

Definition at line 56 of file autogen.h.

◆ arith

enum class mim::plug::math::arith : flags_t
strong
Enumerator
add 
sub 
mul 
div 
rem 

Definition at line 119 of file autogen.h.

◆ BF16

enum class mim::plug::math::BF16 : flags_t
strong

Definition at line 91 of file autogen.h.

◆ bf16

enum class mim::plug::math::bf16 : flags_t
strong

Definition at line 42 of file autogen.h.

◆ cmp

enum class mim::plug::math::cmp : flags_t
strong
Enumerator
ugle 
uglE 
ugLe 
ugLE 
le 
uGle 
uGlE 
ge 
uGLe 
ne 
uGLE 
Ugle 
UglE 
ue 
UgLe 
ul 
UgLE 
ule 
UGle 
ug 
UGlE 
uge 
UGLe 
une 
UGLE 

Definition at line 291 of file autogen.h.

◆ conv

enum class mim::plug::math::conv : flags_t
strong
Enumerator
s2f 
u2f 
f2s 
f2u 
f2f 

Definition at line 333 of file autogen.h.

◆ er

enum class mim::plug::math::er : flags_t
strong
Enumerator
fc 

Definition at line 245 of file autogen.h.

◆ exp

enum class mim::plug::math::exp : flags_t
strong
Enumerator
lbb 
exp 
lbB 
exp2 
bin 
lBb 
exp10 
dec 
lBB 
Lbb 
log 
LbB 
log2 
LBb 
log10 
LBB 

Definition at line 219 of file autogen.h.

◆ extrema

enum class mim::plug::math::extrema : flags_t
strong
Enumerator
im 
fmin 
iM 
fmax 
Im 
ieee754min 
IM 
ieee754max 

Definition at line 141 of file autogen.h.

◆ F

enum class mim::plug::math::F : flags_t
strong

Definition at line 14 of file autogen.h.

◆ F16

enum class mim::plug::math::F16 : flags_t
strong

Definition at line 70 of file autogen.h.

◆ f16

enum class mim::plug::math::f16 : flags_t
strong

Definition at line 21 of file autogen.h.

◆ F32

enum class mim::plug::math::F32 : flags_t
strong

Definition at line 77 of file autogen.h.

◆ f32

enum class mim::plug::math::f32 : flags_t
strong

Definition at line 28 of file autogen.h.

◆ F64

enum class mim::plug::math::F64 : flags_t
strong

Definition at line 84 of file autogen.h.

◆ f64

enum class mim::plug::math::f64 : flags_t
strong

Definition at line 35 of file autogen.h.

◆ gamma

enum class mim::plug::math::gamma : flags_t
strong
Enumerator

Definition at line 257 of file autogen.h.

◆ minus

enum class mim::plug::math::minus : flags_t
strong

Definition at line 134 of file autogen.h.

◆ Mode

enum class mim::plug::math::Mode : nat_t
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 

Mode::nnan | Mode::ninf.

unsafe 

Mode::nsz | Mode::arcp | Mode::reassoc.

fast 

All flags.

bot 

Alias for Mode::fast.

Definition at line 14 of file math.h.

◆ NVTF32

enum class mim::plug::math::NVTF32 : flags_t
strong

Definition at line 98 of file autogen.h.

◆ nvtf32

enum class mim::plug::math::nvtf32 : flags_t
strong

Definition at line 49 of file autogen.h.

◆ pow

enum class mim::plug::math::pow : flags_t
strong

Definition at line 199 of file autogen.h.

◆ PXR24

enum class mim::plug::math::PXR24 : flags_t
strong

Definition at line 112 of file autogen.h.

◆ pxr24

enum class mim::plug::math::pxr24 : flags_t
strong

Definition at line 63 of file autogen.h.

◆ round

enum class mim::plug::math::round : flags_t
strong
Enumerator

Definition at line 277 of file autogen.h.

◆ rrt

enum class mim::plug::math::rrt : flags_t
strong

Definition at line 362 of file autogen.h.

◆ rt

enum class mim::plug::math::rt : flags_t
strong
Enumerator
sq 
cb 

Definition at line 207 of file autogen.h.

◆ sgn

enum class mim::plug::math::sgn : flags_t
strong

Definition at line 355 of file autogen.h.

◆ slf

enum class mim::plug::math::slf : flags_t
strong

Definition at line 348 of file autogen.h.

◆ tri

enum class mim::plug::math::tri : flags_t
strong
Enumerator
ahff 
sin 
ahfF 
cos 
ahFf 
tan 
ahFF 
aHff 
sinh 
aHfF 
cosh 
aHFf 
tanh 
aHFF 
Ahff 
asin 
AhfF 
acos 
AhFf 
atan 
AhFF 
AHff 
asinh 
AHfF 
acosh 
AHFf 
atanh 
AHFF 

Definition at line 159 of file autogen.h.

Function Documentation

◆ isa_f()

std::optional< nat_t > mim::plug::math::isa_f ( Ref def)
inline

◆ lit_f() [1/2]

const Lit * mim::plug::math::lit_f ( World & w,
nat_t width,
mim::f64 val )
inline

Definition at line 98 of file math.h.

References lit_f().

◆ lit_f() [2/2]

template<class R >
const Lit * mim::plug::math::lit_f ( World & w,
R val )

Definition at line 89 of file math.h.

References mim::bitcast().

Referenced by lit_f(), normalize_arith(), and op_rminus().

◆ match_f()

template<nat_t P, nat_t E>
auto mim::plug::math::match_f ( Ref def)
inline

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().

◆ match_f16()

auto mim::plug::math::match_f16 ( Ref def)
inline

Definition at line 72 of file math.h.

References match_f().

◆ match_f32()

auto mim::plug::math::match_f32 ( Ref def)
inline

Definition at line 73 of file math.h.

References match_f().

◆ match_f64()

auto mim::plug::math::match_f64 ( Ref def)
inline

Definition at line 74 of file math.h.

References match_f().

◆ mode()

Ref mim::plug::math::mode ( World & w,
VMode m )
inline

mim::plug::math::VMode -> Ref.

Definition at line 46 of file math.h.

References std::get().

Referenced by normalize_arith(), and op_rminus().

◆ normalize_abs()

Ref mim::plug::math::normalize_abs ( Ref type,
Ref c,
Ref arg )

Definition at line 415 of file normalizers.cpp.

References c, and mim::Def::world().

◆ normalize_arith()

template<arith id>
Ref mim::plug::math::normalize_arith ( Ref type,
Ref c,
Ref arg )

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().

◆ normalize_cmp()

template<cmp id>
Ref mim::plug::math::normalize_cmp ( Ref type,
Ref c,
Ref arg )

Definition at line 356 of file normalizers.cpp.

References a, c, f, mim::Def::projs(), t, and mim::Def::world().

◆ normalize_conv()

template<conv id>
Ref mim::plug::math::normalize_conv ( Ref dst_t,
Ref c,
Ref x )

◆ normalize_er()

template<er id>
Ref mim::plug::math::normalize_er ( Ref type,
Ref c,
Ref arg )

Definition at line 344 of file normalizers.cpp.

References c, and mim::Def::world().

◆ normalize_exp()

template<exp id>
Ref mim::plug::math::normalize_exp ( Ref type,
Ref c,
Ref arg )

Definition at line 338 of file normalizers.cpp.

References c, and mim::Def::world().

◆ normalize_extrema()

template<extrema id>
Ref mim::plug::math::normalize_extrema ( Ref type,
Ref c,
Ref arg )

◆ normalize_gamma()

template<gamma id>
Ref mim::plug::math::normalize_gamma ( Ref type,
Ref c,
Ref arg )

Definition at line 350 of file normalizers.cpp.

References c, and mim::Def::world().

◆ normalize_pow()

Ref mim::plug::math::normalize_pow ( Ref type,
Ref c,
Ref arg )

Definition at line 325 of file normalizers.cpp.

References a, c, mim::Def::projs(), and mim::Def::world().

◆ normalize_round()

template<round id>
Ref mim::plug::math::normalize_round ( Ref type,
Ref c,
Ref arg )

Definition at line 421 of file normalizers.cpp.

References c, and mim::Def::world().

◆ normalize_rt()

template<rt id>
Ref mim::plug::math::normalize_rt ( Ref type,
Ref c,
Ref arg )

Definition at line 332 of file normalizers.cpp.

References c, and mim::Def::world().

◆ normalize_tri()

template<tri id>
Ref mim::plug::math::normalize_tri ( Ref type,
Ref c,
Ref arg )

Definition at line 319 of file normalizers.cpp.

References c, and mim::Def::world().

◆ op_rminus()

Ref mim::plug::math::op_rminus ( VMode m,
Ref a )
inline

Definition at line 111 of file math.h.

References a, isa_f(), lit_f(), mode(), and sub.

◆ register_normalizers()

void mim::plug::math::register_normalizers ( Normalizers & normalizers)

Referenced by mim_get_plugin().

◆ type_f() [1/2]

Ref mim::plug::math::type_f ( Ref pe)
inline

Definition at line 55 of file math.h.

Referenced by type_f().

◆ type_f() [2/2]

Ref mim::plug::math::type_f ( World & w,
nat_t p,
nat_t e )
inline

Definition at line 59 of file math.h.

References e, le, and type_f().

Variable Documentation

◆ Plugin_Id

plugin_t mim::plug::math::Plugin_Id = 0x3825490000000000
staticconstexpr

Definition at line 10 of file autogen.h.