6#ifndef JLM_LLVM_IR_OPERATORS_BITMANIPULATIONINTRINSICOPERATIONS_HPP
7#define JLM_LLVM_IR_OPERATORS_BITMANIPULATIONINTRINSICOPERATIONS_HPP
35 operator==(
const Operation & other)
const noexcept override;
40 [[nodiscard]] std::unique_ptr<Operation>
41 copy()
const override;
43 [[nodiscard]] std::shared_ptr<const rvsdg::Type>
49 static std::unique_ptr<ThreeAddressCode>
52 auto operation = std::make_unique<FShlOperation>(operand1.
Type());
64 checkType(
const std::shared_ptr<const rvsdg::Type> & type);
85 operator==(
const Operation & other)
const noexcept override;
90 [[nodiscard]] std::unique_ptr<Operation>
91 copy()
const override;
93 [[nodiscard]] std::shared_ptr<const rvsdg::Type>
99 static std::unique_ptr<ThreeAddressCode>
102 auto operation = std::make_unique<BSwapOperation>(operand.
Type());
114 checkType(
const std::shared_ptr<const rvsdg::Type> & type);
135 operator==(
const Operation & other)
const noexcept override;
140 [[nodiscard]] std::unique_ptr<Operation>
141 copy()
const override;
143 [[nodiscard]] std::shared_ptr<const rvsdg::Type>
149 static std::unique_ptr<ThreeAddressCode>
152 auto operation = std::make_unique<CtlzOperation>(operand.
Type());
164 checkType(
const std::shared_ptr<const rvsdg::Type> & type);
185 operator==(
const Operation & other)
const noexcept override;
190 [[nodiscard]] std::unique_ptr<Operation>
191 copy()
const override;
193 [[nodiscard]] std::shared_ptr<const rvsdg::Type>
199 static std::unique_ptr<ThreeAddressCode>
202 auto operation = std::make_unique<CttzOperation>(operand.
Type());
214 checkType(
const std::shared_ptr<const rvsdg::Type> & type);
235 operator==(
const Operation & other)
const noexcept override;
240 [[nodiscard]] std::unique_ptr<Operation>
241 copy()
const override;
243 [[nodiscard]] std::shared_ptr<const rvsdg::Type>
249 static std::unique_ptr<ThreeAddressCode>
252 auto operation = std::make_unique<CtpopOperation>(operand.
Type());
264 checkType(
const std::shared_ptr<const rvsdg::Type> & type);
bool operator==(const Operation &other) const noexcept override
std::unique_ptr< Operation > copy() const override
~BSwapOperation() noexcept override
std::string debug_string() const override
static rvsdg::SimpleNode & createNode(rvsdg::Output &operand)
static std::unique_ptr< ThreeAddressCode > createTac(const Variable &operand)
static void checkType(const std::shared_ptr< const rvsdg::Type > &type)
std::shared_ptr< const rvsdg::Type > getType() const noexcept
std::unique_ptr< Operation > copy() const override
static rvsdg::SimpleNode & createNode(rvsdg::Output &operand, rvsdg::Output &isZeroPoison)
static std::unique_ptr< ThreeAddressCode > createTac(const Variable &operand, const Variable &isZeroPoison)
bool operator==(const Operation &other) const noexcept override
std::string debug_string() const override
static void checkType(const std::shared_ptr< const rvsdg::Type > &type)
~CtlzOperation() noexcept override
std::shared_ptr< const rvsdg::Type > getType() const noexcept
std::shared_ptr< const rvsdg::Type > getType() const noexcept
std::string debug_string() const override
std::unique_ptr< Operation > copy() const override
~CtpopOperation() noexcept override
static rvsdg::SimpleNode & createNode(rvsdg::Output &operand)
static void checkType(const std::shared_ptr< const rvsdg::Type > &type)
bool operator==(const Operation &other) const noexcept override
static std::unique_ptr< ThreeAddressCode > createTac(const Variable &operand)
std::unique_ptr< Operation > copy() const override
static std::unique_ptr< ThreeAddressCode > createTac(const Variable &operand, const Variable &isZeroPoison)
static rvsdg::SimpleNode & createNode(rvsdg::Output &operand, rvsdg::Output &isZeroPoison)
std::shared_ptr< const rvsdg::Type > getType() const noexcept
static void checkType(const std::shared_ptr< const rvsdg::Type > &type)
bool operator==(const Operation &other) const noexcept override
std::string debug_string() const override
~CttzOperation() noexcept override
~FShlOperation() noexcept override
bool operator==(const Operation &other) const noexcept override
std::unique_ptr< Operation > copy() const override
static void checkType(const std::shared_ptr< const rvsdg::Type > &type)
static std::unique_ptr< ThreeAddressCode > createTac(const Variable &operand1, const Variable &operand2, const Variable &operand3)
static rvsdg::SimpleNode & createNode(rvsdg::Output &operand1, rvsdg::Output &operand2, rvsdg::Output &operand3)
std::string debug_string() const override
std::shared_ptr< const rvsdg::Type > getType() const noexcept
static std::unique_ptr< llvm::ThreeAddressCode > create(std::unique_ptr< rvsdg::SimpleOperation > operation, const std::vector< const Variable * > &operands)
const std::shared_ptr< const jlm::rvsdg::Type > Type() const noexcept
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
const std::shared_ptr< const rvsdg::Type > & result(size_t index) const noexcept
SimpleOperation(std::vector< std::shared_ptr< const jlm::rvsdg::Type > > operands, std::vector< std::shared_ptr< const jlm::rvsdg::Type > > results)
UnaryOperation(std::shared_ptr< const Type > operand, std::shared_ptr< const Type > result)
Global memory state passed between functions.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.