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, const Def*>
 Give Mode as mim::plug::math::Mode, mim::nat_t or const Def*.
 
const Defmode (World &w, VMode m)
 mim::plug::math::VMode -> const Def*.
 

%math.F

enum class  F : flags_t
 
const Deftype_f (const Def *pe)
 
const Deftype_f (World &w, nat_t p, nat_t e)
 
template<nat_t P, nat_t E>
auto match_f (const Def *def)
 
auto match_f16 (const Def *def)
 
auto match_f32 (const Def *def)
 
auto match_f64 (const Def *def)
 
std::optional< nat_tisa_f (const Def *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
}
 
const Defop_rminus (VMode m, const Def *a)
 
template<arith id>
const Defnormalize_arith (const Def *type, const Def *c, const Def *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>
const Defnormalize_extrema (const Def *type, const Def *c, const Def *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>
const Defnormalize_tri (const Def *type, const Def *, const Def *arg)
 

%math.pow

enum class  pow : flags_t
 
const Defnormalize_pow (const Def *type, const Def *, const Def *arg)
 

%math.rt

enum class  rt : flags_t {
  sq = 0x3825490000001400 ,
  cb = 0x3825490000001401
}
 
template<rt id>
const Defnormalize_rt (const Def *type, const Def *, const Def *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>
const Defnormalize_exp (const Def *type, const Def *, const Def *arg)
 

%math.er

enum class  er : flags_t {
  f = 0x3825490000001600 ,
  fc = 0x3825490000001601
}
 
template<er id>
const Defnormalize_er (const Def *type, const Def *, const Def *arg)
 

%math.gamma

enum class  gamma : flags_t {
  t = 0x3825490000001700 ,
  l = 0x3825490000001701
}
 
template<gamma id>
const Defnormalize_gamma (const Def *type, const Def *, const Def *arg)
 

%math.abs

enum class  abs : flags_t
 
const Defnormalize_abs (const Def *type, const Def *, const Def *arg)
 

%math.round

enum class  round : flags_t {
  f = 0x3825490000001900 ,
  c = 0x3825490000001901 ,
  r = 0x3825490000001902 ,
  t = 0x3825490000001903
}
 
template<round id>
const Defnormalize_round (const Def *type, const Def *, const Def *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>
const Defnormalize_cmp (const Def *type, const Def *c, const Def *arg)
 

%math.conv

enum class  conv : flags_t {
  s2f = 0x3825490000001b00 ,
  u2f = 0x3825490000001b01 ,
  f2s = 0x3825490000001b02 ,
  f2u = 0x3825490000001b03 ,
  f2f = 0x3825490000001b04
}
 
template<conv id>
const Defnormalize_conv (const Def *dst_t, const Def *, const Def *x)
 

Detailed Description

Typedef Documentation

◆ VMode

using mim::plug::math::VMode = std::variant<Mode, nat_t, const Def*>

Give Mode as mim::plug::math::Mode, mim::nat_t or const Def*.

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 ( const Def * def)
inline

Definition at line 76 of file math.h.

References e, and mim::match().

Referenced by normalize_arith(), normalize_conv(), mim::plug::core::normalize_trait(), and op_rminus().

◆ 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 ( const Def * 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 ( const Def * def)
inline

Definition at line 72 of file math.h.

References match_f().

◆ match_f32()

auto mim::plug::math::match_f32 ( const Def * def)
inline

Definition at line 73 of file math.h.

References match_f().

◆ match_f64()

auto mim::plug::math::match_f64 ( const Def * def)
inline

Definition at line 74 of file math.h.

References match_f().

◆ mode()

const Def * mim::plug::math::mode ( World & w,
VMode m )
inline

mim::plug::math::VMode -> const Def*.

Definition at line 46 of file math.h.

Referenced by normalize_arith(), and op_rminus().

◆ normalize_abs()

const Def * mim::plug::math::normalize_abs ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 416 of file normalizers.cpp.

References mim::Def::world().

◆ normalize_arith()

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

Definition at line 236 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>
const Def * mim::plug::math::normalize_cmp ( const Def * type,
const Def * c,
const Def * arg )

Definition at line 358 of file normalizers.cpp.

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

◆ normalize_conv()

template<conv id>
const Def * mim::plug::math::normalize_conv ( const Def * dst_t,
const Def * ,
const Def * x )

◆ normalize_er()

template<er id>
const Def * mim::plug::math::normalize_er ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 346 of file normalizers.cpp.

References mim::Def::world().

◆ normalize_exp()

template<exp id>
const Def * mim::plug::math::normalize_exp ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 340 of file normalizers.cpp.

References mim::Def::world().

◆ normalize_extrema()

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

◆ normalize_gamma()

template<gamma id>
const Def * mim::plug::math::normalize_gamma ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 352 of file normalizers.cpp.

References mim::Def::world().

◆ normalize_pow()

const Def * mim::plug::math::normalize_pow ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 327 of file normalizers.cpp.

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

◆ normalize_round()

template<round id>
const Def * mim::plug::math::normalize_round ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 422 of file normalizers.cpp.

References mim::Def::world().

◆ normalize_rt()

template<rt id>
const Def * mim::plug::math::normalize_rt ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 334 of file normalizers.cpp.

References mim::Def::world().

◆ normalize_tri()

template<tri id>
const Def * mim::plug::math::normalize_tri ( const Def * type,
const Def * ,
const Def * arg )

Definition at line 321 of file normalizers.cpp.

References mim::Def::world().

◆ op_rminus()

const Def * mim::plug::math::op_rminus ( VMode m,
const Def * 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]

const Def * mim::plug::math::type_f ( const Def * pe)
inline

Definition at line 55 of file math.h.

Referenced by type_f().

◆ type_f() [2/2]

const Def * 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.