7#ifndef JLM_RVSDG_BITSTRING_BITOPERATION_CLASSES_HPP
8#define JLM_RVSDG_BITSTRING_BITOPERATION_CLASSES_HPP
32 return *std::static_pointer_cast<const BitType>(
argument(0));
38 virtual std::unique_ptr<BitUnaryOperation>
51 static std::optional<std::vector<Output *>>
70 const noexcept override;
78 virtual BitValueRepresentation
82 virtual std::unique_ptr<BitBinaryOperation>
88 return *std::static_pointer_cast<const BitType>(
result(0));
101 static std::optional<std::vector<Output *>>
123 const noexcept override;
135 virtual std::unique_ptr<BitCompareOperation>
141 return *std::static_pointer_cast<const BitType>(
argument(0));
154 static std::optional<std::vector<Output *>>
virtual std::unique_ptr< BitBinaryOperation > create(size_t nbits) const =0
~BitBinaryOperation() noexcept override
binop_reduction_path_t can_reduce_operand_pair(const jlm::rvsdg::Output *arg1, const jlm::rvsdg::Output *arg2) const noexcept override
static std::optional< std::vector< Output * > > foldConstants(const BitBinaryOperation &operation, const std::vector< Output * > &operands)
const BitType & type() const noexcept
virtual BitValueRepresentation reduce_constants(const BitValueRepresentation &arg1, const BitValueRepresentation &arg2) const =0
jlm::rvsdg::Output * reduce_operand_pair(binop_reduction_path_t path, jlm::rvsdg::Output *arg1, jlm::rvsdg::Output *arg2) const override
static std::optional< std::vector< Output * > > foldConstants(const BitCompareOperation &operation, const std::vector< Output * > &operands)
jlm::rvsdg::Output * reduce_operand_pair(binop_reduction_path_t path, jlm::rvsdg::Output *arg1, jlm::rvsdg::Output *arg2) const override
const BitType & type() const noexcept
virtual std::unique_ptr< BitCompareOperation > create(size_t nbits) const =0
binop_reduction_path_t can_reduce_operand_pair(const jlm::rvsdg::Output *arg1, const jlm::rvsdg::Output *arg2) const noexcept override
virtual compare_result reduce_constants(const BitValueRepresentation &arg1, const BitValueRepresentation &arg2) const =0
~BitCompareOperation() noexcept override
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
~BitUnaryOperation() noexcept override
const BitType & type() const noexcept
static std::optional< std::vector< Output * > > foldConstant(const BitUnaryOperation &operation, const std::vector< Output * > &operands)
virtual std::unique_ptr< BitUnaryOperation > create(size_t nbits) const =0
virtual BitValueRepresentation reduce_constant(const BitValueRepresentation &arg) const =0
const std::shared_ptr< const rvsdg::Type > & argument(size_t index) const noexcept
const std::shared_ptr< const rvsdg::Type > & result(size_t index) const noexcept
static std::vector< jlm::rvsdg::Output * > operands(const Node *node)
size_t binop_reduction_path_t
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.