Mjolnir.jl icon indicating copy to clipboard operation
Mjolnir.jl copied to clipboard

Coverage of intrinsics and builtins

Open shashi opened this issue 5 years ago • 2 comments

Currently the Defaults (both Basic and Numeric put together) don't cover all the built-ins. We should try and support all of these, so other rules can build on top of a solid default tracer (basically the whole language).

It seems like the @abstract definitions are currently provided at a higher level than builtins and intrinsics, so we can check off those that the higher level defs cover in a reasonable way.

Builtins

  • [ ] Core.IntrinsicFunction
  • [ ] Core.var"##invoke" #unsure what this is
  • [ ] <:
  • [ ] ===
  • [ ] Core._apply
  • [ ] Core._apply_iterate
  • [ ] Core._apply_latest
  • [ ] Core._apply_pure
  • [ ] Core._expr
  • [ ] Core._typevar
  • [ ] Core.apply_type
  • [ ] Core.arrayref
  • [ ] Core.arrayset
  • [ ] Core.arraysize
  • [ ] Core.const_arrayref
  • [ ] Core.sizeof
  • [ ] Core.svec
  • [ ] applicable
  • [ ] fieldtype
  • [x] getfield
  • [x] ifelse
  • [ ] invoke
  • [x] isa
  • [x] isdefined
  • [ ] nfields
  • [ ] setfield!
  • [ ] throw
  • [ ] tuple
  • [x] typeassert
  • [ ] typeof

Intrinsics

  • [ ] abs_float
  • [ ] add_float
  • [ ] add_float_fast
  • [ ] add_int
  • [ ] add_ptr
  • [ ] and_int
  • [ ] arraylen
  • [ ] ashr_int
  • [ ] bitcast
  • [ ] bswap_int
  • [ ] ceil_llvm
  • [ ] cglobal
  • [ ] checked_sadd_int
  • [ ] checked_sdiv_int
  • [ ] checked_smul_int
  • [ ] checked_srem_int
  • [ ] checked_ssub_int
  • [ ] checked_uadd_int
  • [ ] checked_udiv_int
  • [ ] checked_umul_int
  • [ ] checked_urem_int
  • [ ] checked_usub_int
  • [ ] copysign_float
  • [ ] ctlz_int
  • [ ] ctpop_int
  • [ ] cttz_int
  • [ ] div_float
  • [ ] div_float_fast
  • [ ] eq_float
  • [ ] eq_float_fast
  • [ ] eq_int
  • [ ] flipsign_int
  • [ ] floor_llvm
  • [ ] fma_float
  • [ ] fpext
  • [ ] fpiseq
  • [ ] fpislt
  • [ ] fptosi
  • [ ] fptoui
  • [ ] fptrunc
  • [ ] le_float
  • [ ] le_float_fast
  • [ ] llvmcall
  • [ ] lshr_int
  • [ ] lt_float
  • [ ] lt_float_fast
  • [ ] mul_float
  • [ ] mul_float_fast
  • [ ] mul_int
  • [ ] muladd_float
  • [ ] ne_float
  • [ ] ne_float_fast
  • [ ] ne_int
  • [ ] neg_float
  • [ ] neg_float_fast
  • [ ] neg_int
  • [ ] not_int
  • [ ] or_int
  • [ ] pointerref
  • [ ] pointerset
  • [ ] rem_float
  • [ ] rem_float_fast
  • [ ] rint_llvm
  • [ ] sdiv_int
  • [ ] sext_int
  • [ ] shl_int
  • [ ] sitofp
  • [ ] sle_int
  • [ ] slt_int
  • [ ] sqrt_llvm
  • [ ] sqrt_llvm_fast
  • [ ] srem_int
  • [ ] sub_float
  • [ ] sub_float_fast
  • [ ] sub_int
  • [ ] sub_ptr
  • [ ] trunc_int
  • [ ] trunc_llvm
  • [ ] udiv_int
  • [ ] uitofp
  • [ ] ule_int
  • [ ] ult_int
  • [ ] urem_int
  • [ ] xor_int
  • [ ] zext_int

Misc

  • [x] print
  • [x] println

shashi avatar May 08 '20 01:05 shashi

As far as simple contributions go, would you be open to have exterior users implement some of these in lib?

femtomc avatar May 20 '20 23:05 femtomc

Yes, adding coverage would be great. I think it would be good to continue the pattern we've followed so far of making the higher-level signatures (e.g. Number * Number) primitives rather than the intrinsics directly.

MikeInnes avatar Jun 01 '20 14:06 MikeInnes