ArkScript
A small, lisp-inspired, functional scripting language
Ark::internal::IROptimizer Class Referencefinal

#include <IROptimizer.hpp>

Collaboration diagram for Ark::internal::IROptimizer:
[legend]

Classes

struct  Rule
 

Public Member Functions

 IROptimizer (unsigned debug)
 Create a new IROptimizer.
 
void process (const std::vector< IR::Block > &pages, const std::vector< std::string > &symbols, const std::vector< ValTableElem > &values)
 Turn a given IR into bytecode.
 
const std::vector< IR::Block > & intermediateRepresentation () const noexcept
 Return the IR blocks (one per scope)
 

Private Types

using Entities = std::span<const IR::Entity>
 
using Condition_t = std::function<bool(const Entities)>
 
using Replacement_t = std::function<IR::Entity(const Entities)>
 

Private Member Functions

bool match (const std::vector< Instruction > &expected_insts, std::span< const IR::Entity > entities) const
 
bool canBeOptimizedSafely (std::span< const IR::Entity > entities, std::size_t window_size) const
 
std::optional< EntityWithOffsetreplaceWithRules (const std::vector< Rule > &rules, std::span< const IR::Entity > entities)
 
bool isPositiveNumberInlinable (uint16_t id) const
 
uint16_t numberAsArg (uint16_t id) const
 

Private Attributes

std::vector< Rulem_ruleset
 
Logger m_logger
 
std::vector< IR::Blockm_ir
 
std::vector< std::string > m_symbols
 
std::vector< ValTableElemm_values
 

Detailed Description

Definition at line 30 of file IROptimizer.hpp.

Member Typedef Documentation

◆ Condition_t

using Ark::internal::IROptimizer::Condition_t = std::function<bool(const Entities)>
private

Definition at line 58 of file IROptimizer.hpp.

◆ Entities

using Ark::internal::IROptimizer::Entities = std::span<const IR::Entity>
private

Definition at line 57 of file IROptimizer.hpp.

◆ Replacement_t

using Ark::internal::IROptimizer::Replacement_t = std::function<IR::Entity(const Entities)>
private

Definition at line 59 of file IROptimizer.hpp.

Constructor & Destructor Documentation

◆ IROptimizer()

Ark::internal::IROptimizer::IROptimizer ( unsigned debug)
explicit

Create a new IROptimizer.

Parameters
debugdebug level

Definition at line 12 of file IROptimizer.cpp.

References Ark::internal::ADD, Ark::internal::APPEND_IN_PLACE, Ark::internal::APPEND_IN_PLACE_SYM, Ark::internal::APPEND_IN_PLACE_SYM_INDEX, Ark::internal::AT, Ark::internal::AT_SYM_INDEX_SYM_INDEX, Ark::internal::AT_SYM_SYM, Ark::internal::BUILTIN, Ark::internal::Builtins::builtins, Ark::internal::CALL, Ark::internal::CALL_BUILTIN, Ark::internal::CALL_BUILTIN_WITHOUT_RETURN_ADDRESS, Ark::internal::CALL_CURRENT_PAGE, Ark::internal::CALL_SYMBOL, Ark::internal::CHECK_TYPE_OF, Ark::internal::CHECK_TYPE_OF_BY_INDEX, Ark::internal::DECREMENT, Ark::internal::DECREMENT_BY_INDEX, Ark::internal::DECREMENT_STORE, Ark::internal::EQ, Ark::internal::EQ_CONST_JUMP_IF_TRUE, Ark::internal::EQ_SYM_INDEX_JUMP_IF_TRUE, Ark::internal::GET_CURRENT_PAGE_ADDR, Ark::internal::GET_FIELD, Ark::internal::GET_FIELD_FROM_SYMBOL, Ark::internal::GET_FIELD_FROM_SYMBOL_INDEX, Ark::internal::IR::Entity::GotoWithArg(), Ark::internal::GT, Ark::internal::GT_CONST_JUMP_IF_FALSE, Ark::internal::GT_CONST_JUMP_IF_TRUE, Ark::internal::GT_SYM_JUMP_IF_FALSE, Ark::internal::HEAD, Ark::internal::INCREMENT, Ark::internal::INCREMENT_BY_INDEX, Ark::internal::INCREMENT_STORE, isPositiveNumberInlinable(), Ark::internal::LIST, Ark::internal::LOAD_CONST, Ark::internal::LOAD_CONST_LOAD_CONST, Ark::internal::LOAD_CONST_SET_VAL, Ark::internal::LOAD_CONST_STORE, Ark::internal::LOAD_SYMBOL, Ark::internal::LOAD_SYMBOL_BY_INDEX, Ark::internal::LT, Ark::internal::LT_CONST_JUMP_IF_FALSE, Ark::internal::LT_CONST_JUMP_IF_TRUE, Ark::internal::LT_SYM_JUMP_IF_FALSE, m_ruleset, Ark::internal::NEQ, Ark::internal::NEQ_CONST_JUMP_IF_TRUE, Ark::internal::NEQ_SYM_JUMP_IF_FALSE, numberAsArg(), Ark::internal::POP_JUMP_IF_FALSE, Ark::internal::POP_JUMP_IF_TRUE, Ark::internal::PUSH_RETURN_ADDRESS, Ark::internal::SET_VAL, Ark::internal::SET_VAL_FROM, Ark::internal::SET_VAL_FROM_INDEX, Ark::internal::SET_VAL_HEAD, Ark::internal::SET_VAL_HEAD_BY_INDEX, Ark::internal::SET_VAL_TAIL, Ark::internal::SET_VAL_TAIL_BY_INDEX, Ark::internal::STORE, Ark::internal::STORE_FROM, Ark::internal::STORE_FROM_INDEX, Ark::internal::STORE_HEAD, Ark::internal::STORE_HEAD_BY_INDEX, Ark::internal::STORE_LIST, Ark::internal::STORE_TAIL, Ark::internal::STORE_TAIL_BY_INDEX, Ark::internal::SUB, Ark::internal::TAIL, and Ark::internal::TYPE.

Member Function Documentation

◆ canBeOptimizedSafely()

bool Ark::internal::IROptimizer::canBeOptimizedSafely ( std::span< const IR::Entity > entities,
std::size_t window_size ) const
nodiscardprivate

◆ intermediateRepresentation()

const std::vector< IR::Block > & Ark::internal::IROptimizer::intermediateRepresentation ( ) const
nodiscardnoexcept

Return the IR blocks (one per scope)

Returns
const std::vector<Block>&

Definition at line 239 of file IROptimizer.cpp.

References m_ir.

Referenced by Ark::Welder::generateBytecode().

◆ isPositiveNumberInlinable()

bool Ark::internal::IROptimizer::isPositiveNumberInlinable ( uint16_t id) const
nodiscardprivate

Definition at line 293 of file IROptimizer.cpp.

References m_values, Ark::internal::IR::MaxValueForDualArg, and Ark::internal::Number.

Referenced by IROptimizer().

◆ match()

bool Ark::internal::IROptimizer::match ( const std::vector< Instruction > & expected_insts,
std::span< const IR::Entity > entities ) const
nodiscardprivate

Definition at line 244 of file IROptimizer.cpp.

Referenced by replaceWithRules().

◆ numberAsArg()

uint16_t Ark::internal::IROptimizer::numberAsArg ( uint16_t id) const
nodiscardprivate

Definition at line 305 of file IROptimizer.cpp.

References m_values.

Referenced by IROptimizer().

◆ process()

void Ark::internal::IROptimizer::process ( const std::vector< IR::Block > & pages,
const std::vector< std::string > & symbols,
const std::vector< ValTableElem > & values )

Turn a given IR into bytecode.

Parameters
pageslist of lists of IR entities generated by the compiler
symbolssymbol table generated by the compiler
valuesvalue table generated by the compiler

Definition at line 200 of file IROptimizer.cpp.

References m_ir, m_logger, m_ruleset, m_symbols, m_values, replaceWithRules(), Ark::internal::Logger::traceEnd(), and Ark::internal::Logger::traceStart().

Referenced by Ark::Welder::generateBytecode().

◆ replaceWithRules()

std::optional< EntityWithOffset > Ark::internal::IROptimizer::replaceWithRules ( const std::vector< Rule > & rules,
std::span< const IR::Entity > entities )
private

Definition at line 268 of file IROptimizer.cpp.

References canBeOptimizedSafely(), and match().

Referenced by process().

Member Data Documentation

◆ m_ir

std::vector<IR::Block> Ark::internal::IROptimizer::m_ir
private

Definition at line 91 of file IROptimizer.hpp.

Referenced by intermediateRepresentation(), and process().

◆ m_logger

Logger Ark::internal::IROptimizer::m_logger
private

Definition at line 90 of file IROptimizer.hpp.

Referenced by process().

◆ m_ruleset

std::vector<Rule> Ark::internal::IROptimizer::m_ruleset
private

Definition at line 88 of file IROptimizer.hpp.

Referenced by IROptimizer(), and process().

◆ m_symbols

std::vector<std::string> Ark::internal::IROptimizer::m_symbols
private

Definition at line 92 of file IROptimizer.hpp.

Referenced by process().

◆ m_values

std::vector<ValTableElem> Ark::internal::IROptimizer::m_values
private

Definition at line 93 of file IROptimizer.hpp.

Referenced by isPositiveNumberInlinable(), numberAsArg(), and process().


The documentation for this class was generated from the following files: