47 void process(
const std::vector<IR::Block>& pages,
const std::vector<std::string>& symbols,
const std::vector<ValTableElem>& values);
54 [[nodiscard]]
const std::vector<IR::Block>& intermediateRepresentation()
const noexcept;
67 constexpr static auto default_cond = [](
const Entities,
const std::size_t) {
72 expected(
std::move(input)), condition(
std::move(cond))
74 createReplacement = [replacement](
const Entities e) {
75 return IR::Entity(replacement, e[0].primaryArg(), e[1].primaryArg());
80 expected(
std::move(input)), condition(
std::move(cond)), createReplacement(
std::move(repl))
84 expected(
std::move(input)), condition(default_cond), createReplacement(
std::move(repl))
91 std::vector<IR::Block>
m_ir;
95 [[nodiscard]]
bool match(
const std::vector<Instruction>& expected_insts, std::span<const IR::Entity> entities)
const;
96 [[nodiscard]]
bool canBeOptimizedSafely(std::span<const IR::Entity> entities, std::size_t window_size)
const;
97 std::optional<EntityWithOffset> replaceWithRules(std::span<const IR::Entity> entities,
const std::size_t position_in_block);
99 [[nodiscard]]
bool isPositiveNumberInlinable(uint16_t
id)
const;
100 [[nodiscard]]
bool isSmallerNumberInlinable(uint16_t
id)
const;
101 [[nodiscard]]
bool isNumberEqualTo(uint16_t
id,
int number)
const;
102 [[nodiscard]] uint16_t numberAsArg(uint16_t
id)
const;
103 [[nodiscard]] uint16_t smallerNumberAsArg(uint16_t
id)
const;