19 return rvsdg::is<rvsdg::BitUnaryOperation>(rvsdg::TryGetOwnerNode<rvsdg::SimpleNode>(*operand));
25 return rvsdg::is<rvsdg::BitBinaryOperation>(rvsdg::TryGetOwnerNode<rvsdg::SimpleNode>(*operand));
31 const auto node = rvsdg::TryGetOwnerNode<rvsdg::SimpleNode>(*operand);
35 const auto top =
dynamic_cast<const TruncOperation *
>(&node->GetOperation());
43 const auto unaryNode = rvsdg::TryGetOwnerNode<rvsdg::SimpleNode>(*operand);
44 auto region = operand->
region();
48 std::unique_ptr<rvsdg::SimpleOperation> simpleOperation(
49 util::assertedCast<rvsdg::SimpleOperation>(uop->create(op.
ndstbits()).release()));
57 const auto binaryNode = rvsdg::TryGetOwnerNode<rvsdg::SimpleNode>(*operand);
58 auto region = operand->
region();
65 std::unique_ptr<rvsdg::SimpleOperation> simpleOperation(
66 util::assertedCast<rvsdg::SimpleOperation>(bop->create(op.
ndstbits()).release()));
74 return rvsdg::TryGetOwnerNode<rvsdg::SimpleNode>(*operand)->input(0)->origin();
83 return op && op->
argument(0) == argument(0) && op->result(0) == result(0);
92 std::unique_ptr<rvsdg::Operation>
95 return std::make_unique<SExtOperation>(*
this);
102 if (rvsdg::IsOwnerNodeOperation<rvsdg::BitConstantOperation>(tracedOutput))
123 auto [constantNode, constantOperation] =
124 rvsdg::TryGetSimpleNodeAndOptionalOp<rvsdg::BitConstantOperation>(tracedOutput);
125 JLM_ASSERT(constantNode && constantOperation);
static std::unique_ptr< llvm::ThreeAddressCode > create(const Variable *operand, const std::shared_ptr< const rvsdg::Type > &type)
~SExtOperation() noexcept override
std::string debug_string() const override
rvsdg::unop_reduction_path_t can_reduce_operand(const rvsdg::Output *operand) const noexcept override
std::unique_ptr< Operation > copy() const override
size_t nsrcbits() const noexcept
rvsdg::Output * reduce_operand(rvsdg::unop_reduction_path_t path, rvsdg::Output *operand) const override
size_t ndstbits() const noexcept
size_t nsrcbits() const noexcept
static Output & create(Region ®ion, BitValueRepresentation value)
rvsdg::Region * region() const noexcept
static SimpleNode & Create(Region ®ion, std::unique_ptr< Operation > operation, const std::vector< rvsdg::Output * > &operands)
const std::shared_ptr< const rvsdg::Type > & argument(size_t index) const noexcept
Global memory state passed between functions.
static rvsdg::Output * perform_inverse_reduction(const SExtOperation &op, rvsdg::Output *operand)
static bool is_bitbinary_reducible(const rvsdg::Output *operand)
rvsdg::Output & traceOutput(rvsdg::Output &output)
static bool is_bitunary_reducible(const rvsdg::Output *operand)
static bool is_inverse_reducible(const SExtOperation &op, const rvsdg::Output *operand)
static const rvsdg::unop_reduction_path_t sext_reduction_bitbinary
static rvsdg::Output * perform_bitunary_reduction(const SExtOperation &op, rvsdg::Output *operand)
static rvsdg::Output * perform_bitbinary_reduction(const SExtOperation &op, rvsdg::Output *operand)
static const rvsdg::unop_reduction_path_t sext_reduction_bitunary
size_t unop_reduction_path_t
static const unop_reduction_path_t unop_reduction_inverse
static const unop_reduction_path_t unop_reduction_constant
static const unop_reduction_path_t unop_reduction_none
static std::string strfmt(Args... args)