MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::plug::ll::Emitter Class Reference

#include </home/runner/work/mimir/mimir/src/mim/plug/ll/include/mim/plug/ll/ll.h>

Inheritance diagram for mim::plug::ll::Emitter:
[legend]

Public Types

using Super = mim::Emitter<std::string, std::string, BB, Emitter>

Public Member Functions

 Emitter (World &world, std::ostream &ostream)
bool is_valid (std::string_view s)
void start () override
 Actual entry.
void emit_imported (Lam *)
virtual void emit_epilogue (Lam *)
std::string emit_bb (BB &, const Def *)
virtual std::string prepare ()
void finalize ()
virtual std::optional< std::string > isa_targetspecific_intrinsic (BB &, const Def *)
std::string as_targetspecific_intrinsic (BB &bb, const Def *def)
template<class... Args>
void declare (std::format_string< Args... > s, Args &&... args)
Public Member Functions inherited from mim::NestPhase< Lam >
 NestPhase (World &world, std::string name, bool elide_empty, bool schedule=false)
const Nestnest () const
Public Member Functions inherited from mim::ClosedMutPhase< Lam >
 ClosedMutPhase (World &world, std::string name, bool elide_empty, bool schedule=false)
bool elide_empty () const
bool schedule () const
Public Member Functions inherited from mim::Phase
 Phase (World &world, std::string name)
 Phase (World &world, flags_t annex)
bool todo () const
void invalidate (bool todo=true)
 Signals that another round of fixed-point iteration is required, either as part of.
virtual void run ()
 Entry point and generates some debug output; invokes Phase::start.
Public Member Functions inherited from mim::Stage
 Stage (World &world, std::string name)
 Stage (World &world, flags_t annex)
virtual ~Stage ()=default
virtual std::unique_ptr< Stagerecreate ()
 Creates a new instance; needed by a fixed-point PhaseMan.
virtual void apply (const App *)
 Invoked if your Stage has additional args.
virtual void apply (Stage &)
 Dito, but invoked by Stage::recreate.
virtual bool redirects () const
 If true, Stage::create uses take_resolved().
virtual std::unique_ptr< Stagetake_resolved ()
 The Stage to use instead; nullptr means elide.
Worldworld ()
Driverdriver ()
Loglog () const
std::string_view name () const
flags_t annex () const

Additional Inherited Members

template<class P, class... Args>
static void run (Args &&... args)
 Runs a single Phase.
Static Public Member Functions inherited from mim::Stage
static std::unique_ptr< Stagecreate (const Flags2Stages &stages, const Def *def)
template<class A, class P>
static void hook (Flags2Stages &stages)
Public Attributes inherited from mim::Emitter< std::string, std::string, BB, Emitter >
fe::Tab tab
Protected Member Functions inherited from mim::Emitter< std::string, std::string, BB, Emitter >
 Emitter (World &world, std::string name, std::ostream &ostream, bool schedule=false)
virtual bool direct_style ()
std::ostream & ostream () const
std::string emit (const Def *def)
 Recursively emits code.
std::string emit_unsafe (const Def *def)
 As above but returning !child().is_valid(value) is permitted.
void visit (const Nest &nest) override
Protected Member Functions inherited from mim::ClosedMutPhase< Lam >
virtual void visit (Lam *)=0
Lamroot () const
Protected Attributes inherited from mim::Emitter< std::string, std::string, BB, Emitter >
Lamcurr_lam_
std::ostream & ostream_
Scheduler scheduler_
DefMap< std::string > locals_
DefMap< std::string > globals_
DefMap< std::string > types_
LamMap< BB > lam2bb_
Protected Attributes inherited from mim::Stage
std::string name_

Detailed Description

Definition at line 110 of file ll.h.

Member Typedef Documentation

◆ Super

using mim::plug::ll::Emitter::Super = mim::Emitter<std::string, std::string, BB, Emitter>

Definition at line 112 of file ll.h.

Constructor & Destructor Documentation

◆ Emitter()

mim::plug::ll::Emitter::Emitter ( World & world,
std::ostream & ostream )
inline

Member Function Documentation

◆ as_targetspecific_intrinsic()

std::string mim::plug::ll::Emitter::as_targetspecific_intrinsic ( BB & bb,
const Def * def )
inline

Definition at line 126 of file ll.h.

References mim::error(), isa_targetspecific_intrinsic(), and mim::Def::type().

◆ declare()

template<class... Args>
void mim::plug::ll::Emitter::declare ( std::format_string< Args... > s,
Args &&... args )
inline

Definition at line 132 of file ll.h.

Referenced by emit_bb(), and emit_epilogue().

◆ emit_bb()

std::string mim::plug::ll::Emitter::emit_bb ( BB & bb,
const Def * def )
inline

Definition at line 543 of file ll.h.

References mim::plug::core::a, mim::plug::math::a, mim::plug::core::add, mim::plug::math::add, mim::plug::math::afn, mim::plug::math::ahFF, mim::plug::core::and_, mim::plug::math::arcp, mim::App::arg(), mim::Axm::as(), mim::Lit::as(), mim::plug::ll::BB::assign(), mim::Annex::base(), mim::plug::math::bin, mim::plug::ll::BB::body(), mim::plug::math::c, mim::plug::math::contract, mim::plug::math::cos, mim::plug::math::dec, declare(), mim::plug::math::div, mim::plug::core::e, mim::plug::math::e, mim::Emitter< std::string, std::string, BB, Emitter >::emit_unsafe(), mim::error(), mim::plug::math::f, mim::plug::math::f2f, mim::plug::math::f2s, mim::plug::math::f2u, mim::plug::math::fast, mim::plug::math::fmax, mim::plug::math::fmin, mim::plug::core::g, mim::plug::math::g, mim::plug::core::ge, mim::plug::math::ge, mim::Emitter< std::string, std::string, BB, Emitter >::globals_, mim::plug::math::h, mim::plug::math::ieee754max, mim::plug::math::ieee754min, mim::plug::core::iff, mim::plug::ll::is_simd(), mim::Axm::isa(), mim::Idx::isa(), mim::Lit::isa(), mim::plug::math::isa_f(), isa_targetspecific_intrinsic(), mim::plug::core::l, mim::plug::math::l, mim::Emitter< std::string, std::string, BB, Emitter >::lam2bb_, mim::plug::core::le, mim::plug::math::le, mim::plug::math::log, mim::plug::core::mul, mim::plug::math::mul, mim::Stage::name(), mim::plug::core::nand, mim::plug::core::ne, mim::plug::math::ne, mim::plug::core::neg, mim::plug::core::niff, mim::plug::math::ninf, mim::plug::math::nnan, mim::plug::core::nor, mim::plug::core::nsw, mim::plug::math::nsz, mim::plug::core::nuw, mim::plug::core::nxor, mim::plug::math::o, mim::plug::core::or_, mim::Def::proj(), mim::Def::projs(), mim::plug::math::r, mim::plug::math::reassoc, mim::plug::math::rem, mim::ClosedMutPhase< Lam >::root(), mim::plug::core::s, mim::plug::math::s2f, mim::plug::core::sdiv, mim::plug::core::sg, mim::plug::core::sge, mim::plug::core::shl, mim::plug::math::sin, mim::Idx::size2bitwidth(), mim::plug::core::sl, mim::plug::core::sle, mim::plug::core::SM, mim::plug::core::Sm, mim::plug::core::sM, mim::plug::core::sm, mim::plug::math::sq, mim::plug::core::srem, mim::plug::core::sub, mim::plug::math::sub, mim::plug::math::t, mim::plug::ll::BB::tail(), mim::plug::math::tan, mim::Def::type(), mim::plug::core::u, mim::plug::math::u, mim::plug::math::u2f, mim::plug::core::udiv, mim::plug::math::ue, mim::plug::core::ug, mim::plug::math::ug, mim::plug::core::uge, mim::plug::math::uge, mim::plug::core::ul, mim::plug::math::ul, mim::plug::core::ule, mim::plug::math::ule, mim::plug::math::une, mim::plug::core::urem, and mim::plug::core::xor_.

◆ emit_epilogue()

◆ emit_imported()

void mim::plug::ll::Emitter::emit_imported ( Lam * lam)
inline

Definition at line 297 of file ll.h.

References mim::Axm::isa(), mim::Pi::ret_pi(), and mim::Lam::type().

◆ finalize()

◆ is_valid()

bool mim::plug::ll::Emitter::is_valid ( std::string_view s)
inline

Definition at line 117 of file ll.h.

◆ isa_targetspecific_intrinsic()

virtual std::optional< std::string > mim::plug::ll::Emitter::isa_targetspecific_intrinsic ( BB & ,
const Def *  )
inlinevirtual

Definition at line 125 of file ll.h.

Referenced by as_targetspecific_intrinsic(), and emit_bb().

◆ prepare()

◆ start()

void mim::plug::ll::Emitter::start ( )
inlineoverridevirtual

Actual entry.

Reimplemented from mim::ClosedMutPhase< Lam >.

Definition at line 286 of file ll.h.

References mim::Emitter< std::string, std::string, BB, Emitter >::ostream(), and mim::Phase::start().


The documentation for this class was generated from the following file:
  • src/mim/plug/ll/include/mim/plug/ll/ll.h