6#ifndef JLM_LLVM_IR_OPERATORS_INTEGEROPERATIONS_HPP
7#define JLM_LLVM_IR_OPERATORS_INTEGEROPERATIONS_HPP
34 std::unique_ptr<Operation>
35 copy()
const override;
41 operator==(
const Operation & other)
const noexcept override;
58 return Create(region, { numBits, value });
74 const std::
size_t numArgumentBits,
75 const std::
size_t numResultBits) noexcept
84 return *util::assertedCast<const rvsdg::BitType>(
argument(0).get());
103 operator==(
const Operation & other)
const noexcept override;
108 [[nodiscard]] std::unique_ptr<Operation>
109 copy()
const override;
113 const noexcept override;
120 flags() const noexcept override;
123 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
138 static std::optional<std::vector<rvsdg::Output *>>
141 const std::vector<rvsdg::Output *> & operands);
159 operator==(
const Operation & other)
const noexcept override;
164 [[nodiscard]] std::unique_ptr<Operation>
165 copy()
const override;
169 const noexcept override;
176 flags() const noexcept override;
179 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
196 static std::optional<std::vector<rvsdg::Output *>>
199 const std::vector<rvsdg::Output *> & operands);
211 static std::optional<std::vector<rvsdg::Output *>>
214 const std::vector<rvsdg::Output *> & operands);
232 operator==(
const Operation & other)
const noexcept override;
237 [[nodiscard]] std::unique_ptr<Operation>
238 copy()
const override;
242 const noexcept override;
249 flags() const noexcept override;
252 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
267 static std::optional<std::vector<rvsdg::Output *>>
270 const std::vector<rvsdg::Output *> & operands);
288 operator==(
const Operation & other)
const noexcept override;
293 [[nodiscard]] std::unique_ptr<Operation>
294 copy()
const override;
298 const noexcept override;
305 flags() const noexcept override;
308 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
323 static std::optional<std::vector<rvsdg::Output *>>
326 const std::vector<rvsdg::Output *> & operands);
344 operator==(
const Operation & other)
const noexcept override;
349 [[nodiscard]] std::unique_ptr<Operation>
350 copy()
const override;
354 const noexcept override;
361 flags() const noexcept override;
364 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
379 static std::optional<std::vector<rvsdg::Output *>>
382 const std::vector<rvsdg::Output *> & operands);
400 operator==(
const Operation & other)
const noexcept override;
405 [[nodiscard]] std::unique_ptr<Operation>
406 copy()
const override;
410 const noexcept override;
417 flags() const noexcept override;
420 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
435 static std::optional<std::vector<rvsdg::Output *>>
438 const std::vector<rvsdg::Output *> & operands);
456 operator==(
const Operation & other)
const noexcept override;
461 [[nodiscard]] std::unique_ptr<Operation>
462 copy()
const override;
466 const noexcept override;
473 flags() const noexcept override;
476 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
491 static std::optional<std::vector<rvsdg::Output *>>
494 const std::vector<rvsdg::Output *> & operands);
512 operator==(
const Operation & other)
const noexcept override;
517 [[nodiscard]] std::unique_ptr<Operation>
518 copy()
const override;
522 const noexcept override;
529 flags() const noexcept override;
532 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
547 static std::optional<std::vector<rvsdg::Output *>>
550 const std::vector<rvsdg::Output *> & operands);
568 operator==(
const Operation & other)
const noexcept override;
573 [[nodiscard]] std::unique_ptr<Operation>
574 copy()
const override;
578 const noexcept override;
585 flags() const noexcept override;
588 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
603 static std::optional<std::vector<rvsdg::Output *>>
606 const std::vector<rvsdg::Output *> & operands);
624 operator==(
const Operation & other)
const noexcept override;
629 [[nodiscard]] std::unique_ptr<Operation>
630 copy()
const override;
634 const noexcept override;
641 flags() const noexcept override;
644 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
659 static std::optional<std::vector<rvsdg::Output *>>
662 const std::vector<rvsdg::Output *> & operands);
680 operator==(
const Operation & other)
const noexcept override;
685 [[nodiscard]] std::unique_ptr<Operation>
686 copy()
const override;
690 const noexcept override;
697 flags() const noexcept override;
700 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
715 static std::optional<std::vector<rvsdg::Output *>>
718 const std::vector<rvsdg::Output *> & operands);
736 operator==(
const Operation & other)
const noexcept override;
741 [[nodiscard]] std::unique_ptr<Operation>
742 copy()
const override;
746 const noexcept override;
753 flags() const noexcept override;
756 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
771 static std::optional<std::vector<rvsdg::Output *>>
774 const std::vector<rvsdg::Output *> & operands);
792 operator==(
const Operation & other)
const noexcept override;
797 [[nodiscard]] std::unique_ptr<Operation>
798 copy()
const override;
802 const noexcept override;
809 flags() const noexcept override;
812 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
827 static std::optional<std::vector<rvsdg::Output *>>
830 const std::vector<rvsdg::Output *> & operands);
848 operator==(
const Operation & other)
const noexcept override;
853 [[nodiscard]] std::unique_ptr<Operation>
854 copy()
const override;
858 const noexcept override;
865 flags() const noexcept override;
868 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
883 static std::optional<std::vector<rvsdg::Output *>>
886 const std::vector<rvsdg::Output *> & operands);
904 operator==(
const Operation & other)
const noexcept override;
909 [[nodiscard]] std::unique_ptr<Operation>
910 copy()
const override;
914 const noexcept override;
921 flags() const noexcept override;
924 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
939 static std::optional<std::vector<rvsdg::Output *>>
942 const std::vector<rvsdg::Output *> & operands);
960 operator==(
const Operation & other)
const noexcept override;
965 [[nodiscard]] std::unique_ptr<Operation>
966 copy()
const override;
970 const noexcept override;
977 flags() const noexcept override;
980 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
995 static std::optional<std::vector<rvsdg::Output *>>
998 const std::vector<rvsdg::Output *> & operands);
1016 operator==(
const Operation & other)
const noexcept override;
1021 [[nodiscard]] std::unique_ptr<Operation>
1022 copy()
const override;
1026 const noexcept override;
1033 flags() const noexcept override;
1035 static rvsdg::Node &
1036 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1051 static std::optional<std::vector<rvsdg::Output *>>
1054 const std::vector<rvsdg::Output *> & operands);
1072 operator==(
const Operation & other)
const noexcept override;
1077 [[nodiscard]] std::unique_ptr<Operation>
1078 copy()
const override;
1082 const noexcept override;
1089 flags() const noexcept override;
1091 static rvsdg::Node &
1092 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1107 static std::optional<std::vector<rvsdg::Output *>>
1110 const std::vector<rvsdg::Output *> & operands);
1128 operator==(
const Operation & other)
const noexcept override;
1133 [[nodiscard]] std::unique_ptr<Operation>
1134 copy()
const override;
1138 const noexcept override;
1145 flags() const noexcept override;
1147 static rvsdg::Node &
1148 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1163 static std::optional<std::vector<rvsdg::Output *>>
1166 const std::vector<rvsdg::Output *> & operands);
1184 operator==(
const Operation & other)
const noexcept override;
1189 [[nodiscard]] std::unique_ptr<Operation>
1190 copy()
const override;
1194 const noexcept override;
1201 flags() const noexcept override;
1203 static rvsdg::Node &
1204 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1219 static std::optional<std::vector<rvsdg::Output *>>
1222 const std::vector<rvsdg::Output *> & operands);
1240 operator==(
const Operation & other)
const noexcept override;
1245 [[nodiscard]] std::unique_ptr<Operation>
1246 copy()
const override;
1250 const noexcept override;
1257 flags() const noexcept override;
1259 static rvsdg::Node &
1260 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1275 static std::optional<std::vector<rvsdg::Output *>>
1278 const std::vector<rvsdg::Output *> & operands);
1296 operator==(
const Operation & other)
const noexcept override;
1301 [[nodiscard]] std::unique_ptr<Operation>
1302 copy()
const override;
1306 const noexcept override;
1313 flags() const noexcept override;
1315 static rvsdg::Node &
1316 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1331 static std::optional<std::vector<rvsdg::Output *>>
1334 const std::vector<rvsdg::Output *> & operands);
1352 operator==(
const Operation & other)
const noexcept override;
1357 [[nodiscard]] std::unique_ptr<Operation>
1358 copy()
const override;
1362 const noexcept override;
1369 flags() const noexcept override;
1371 static rvsdg::Node &
1372 createNode(const
size_t numBits, rvsdg::Output & operand1, rvsdg::Output & operand2)
1387 static std::optional<std::vector<rvsdg::Output *>>
1390 const std::vector<rvsdg::Output *> & operands);
std::unique_ptr< Operation > copy() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerAShrOperation &operation, const std::vector< rvsdg::Output * > &operands)
bool operator==(const Operation &other) const noexcept override
std::string debug_string() const override
enum flags flags() const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
~IntegerAShrOperation() noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
enum flags flags() const noexcept override
~IntegerAddOperation() noexcept override
std::string debug_string() const override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerAddOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
std::unique_ptr< Operation > copy() const override
enum flags flags() const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerAndOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::string debug_string() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
bool operator==(const Operation &other) const noexcept override
~IntegerAndOperation() noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
~IntegerBinaryOperation() noexcept override
const rvsdg::BitType & Type() const noexcept
static rvsdg::Node & Create(rvsdg::Region ®ion, IntegerValueRepresentation representation)
~IntegerConstantOperation() override
bool operator==(const Operation &other) const noexcept override
IntegerValueRepresentation Representation_
static rvsdg::Node & Create(rvsdg::Region ®ion, std::size_t numBits, std::int64_t value)
IntegerConstantOperation(IntegerValueRepresentation representation)
const IntegerValueRepresentation & Representation() const noexcept
std::unique_ptr< Operation > copy() const override
std::string debug_string() const override
enum flags flags() const noexcept override
std::string debug_string() const override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerEqOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
~IntegerEqOperation() noexcept override
bool operator==(const Operation &other) const noexcept override
~IntegerLShrOperation() noexcept override
bool operator==(const Operation &other) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerLShrOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::string debug_string() const override
std::unique_ptr< Operation > copy() const override
enum flags flags() const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
~IntegerMulOperation() noexcept override
std::string debug_string() const override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerMulOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
enum flags flags() const noexcept override
bool operator==(const Operation &other) const noexcept override
std::string debug_string() const override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerNeOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
enum flags flags() const noexcept override
~IntegerNeOperation() noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
bool operator==(const Operation &other) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerOrOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
~IntegerOrOperation() noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
enum flags flags() const noexcept override
std::string debug_string() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSDivOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::string debug_string() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
~IntegerSDivOperation() noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
std::unique_ptr< Operation > copy() const override
bool operator==(const Operation &other) const noexcept override
enum flags flags() const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSRemOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::string debug_string() const override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
~IntegerSRemOperation() noexcept override
std::unique_ptr< Operation > copy() const override
enum flags flags() const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSgeOperation &operation, const std::vector< rvsdg::Output * > &operands)
enum flags flags() const noexcept override
bool operator==(const Operation &other) const noexcept override
std::unique_ptr< Operation > copy() const override
std::string debug_string() const override
~IntegerSgeOperation() noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSgtOperation &operation, const std::vector< rvsdg::Output * > &operands)
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
std::string debug_string() const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
std::unique_ptr< Operation > copy() const override
enum flags flags() const noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
~IntegerSgtOperation() noexcept override
std::unique_ptr< Operation > copy() const override
~IntegerShlOperation() noexcept override
enum flags flags() const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
std::string debug_string() const override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerShlOperation &operation, const std::vector< rvsdg::Output * > &operands)
bool operator==(const Operation &other) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
std::string debug_string() const override
enum flags flags() const noexcept override
~IntegerSleOperation() noexcept override
std::unique_ptr< Operation > copy() const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSleOperation &operation, const std::vector< rvsdg::Output * > &operands)
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
bool operator==(const Operation &other) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
std::unique_ptr< Operation > copy() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
std::string debug_string() const override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSltOperation &operation, const std::vector< rvsdg::Output * > &operands)
enum flags flags() const noexcept override
~IntegerSltOperation() noexcept override
~IntegerSubOperation() noexcept override
bool operator==(const Operation &other) const noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
std::string debug_string() const override
enum flags flags() const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerSubOperation &operation, const std::vector< rvsdg::Output * > &operands)
static std::optional< std::vector< rvsdg::Output * > > normalizeAdditiveInverse(const IntegerSubOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
bool operator==(const Operation &other) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerUDivOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::string debug_string() const override
~IntegerUDivOperation() noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
enum flags flags() const noexcept override
std::unique_ptr< Operation > copy() const override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
std::unique_ptr< Operation > copy() const override
std::string debug_string() const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
enum flags flags() const noexcept override
~IntegerURemOperation() noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerURemOperation &operation, const std::vector< rvsdg::Output * > &operands)
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerUgeOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::string debug_string() const override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
std::unique_ptr< Operation > copy() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
~IntegerUgeOperation() noexcept override
bool operator==(const Operation &other) const noexcept override
enum flags flags() const noexcept override
bool operator==(const Operation &other) const noexcept override
enum flags flags() const noexcept override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
std::string debug_string() const override
std::unique_ptr< Operation > copy() const override
~IntegerUgtOperation() noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerUgtOperation &operation, const std::vector< rvsdg::Output * > &operands)
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
enum flags flags() const noexcept override
std::string debug_string() const override
bool operator==(const Operation &other) const noexcept override
~IntegerUleOperation() noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
std::unique_ptr< Operation > copy() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerUleOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
enum flags flags() const noexcept override
std::string debug_string() const override
~IntegerUltOperation() noexcept override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
bool operator==(const Operation &other) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerUltOperation &operation, const std::vector< rvsdg::Output * > &operands)
static rvsdg::Node & createNode(const size_t numBits, rvsdg::Output &operand1, rvsdg::Output &operand2)
std::string debug_string() const override
rvsdg::Output * reduce_operand_pair(rvsdg::binop_reduction_path_t path, rvsdg::Output *op1, rvsdg::Output *op2) const override
~IntegerXorOperation() noexcept override
enum flags flags() const noexcept override
bool operator==(const Operation &other) const noexcept override
static std::optional< std::vector< rvsdg::Output * > > foldConstants(const IntegerXorOperation &operation, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< Operation > copy() const override
rvsdg::binop_reduction_path_t can_reduce_operand_pair(const rvsdg::Output *op1, const rvsdg::Output *op2) const noexcept override
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
Nullary operator (operator taking no formal arguments)
NullaryOperation(std::shared_ptr< const Type > resultType)
Represent acyclic RVSDG subgraphs.
const std::shared_ptr< const rvsdg::Type > & argument(size_t index) const noexcept
Global memory state passed between functions.
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.