9#include <unordered_set>
33 virtual std::unordered_set<const RegisterOperand *>
regOps()
const = 0;
34 virtual std::unordered_set<const RegisterOperand *>
dsts()
const = 0;
35 virtual std::unordered_set<const RegisterOperand *>
srcs()
const = 0;
36 std::unordered_set<RegisterOperand *>
regOps();
37 std::unordered_set<RegisterOperand *>
dsts();
38 std::unordered_set<RegisterOperand *>
srcs();
39 virtual std::unordered_set<PhysicalRegister *>
implicitDsts()
const {
return {}; }
40 virtual std::unordered_set<PhysicalRegister *>
implicitSrcs()
const {
return {}; }
41 virtual std::unordered_set<const ImmediateOperand *>
immOps()
const = 0;
42 std::unordered_set<ImmediateOperand *>
immOps();
43 virtual std::unordered_set<const MemoryOperand *>
memOps()
const = 0;
44 std::unordered_set<MemoryOperand *>
memOps();
49 virtual std::string
format()
const = 0;
50 virtual std::unique_ptr<Instruction>
clone()
const = 0;
60template <
typename InstructionT>
61 requires std::derived_from<InstructionT, mini_llvm::mir::Instruction>
62struct std::formatter<InstructionT> {
63 constexpr auto parse(std::format_parse_context &ctx) {
67 template <
typename FormatContext>
68 auto format(
const InstructionT &I, FormatContext &ctx)
const {
69 return std::format_to(ctx.out(),
"{}", I.format());
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition InstructionVisitor.h:70
Definition Instruction.h:21
std::unordered_set< MemoryOperand * > memOps()
virtual std::unordered_set< const RegisterOperand * > regOps() const =0
Instruction & operator=(Instruction &&)=delete
virtual Register * coalescenceDst() const
Definition Instruction.h:46
virtual bool hasSideEffects() const =0
Instruction(const Instruction &)=delete
std::unordered_set< RegisterOperand * > srcs()
virtual bool isCoalescent() const
Definition Instruction.h:45
virtual std::unordered_set< const ImmediateOperand * > immOps() const =0
Instruction & operator=(const Instruction &)=delete
virtual std::unique_ptr< Instruction > clone() const =0
virtual ~Instruction()=default
virtual Register * coalescenceSrc() const
Definition Instruction.h:47
virtual std::unordered_set< const RegisterOperand * > srcs() const =0
virtual std::unordered_set< PhysicalRegister * > implicitDsts() const
Definition Instruction.h:39
virtual std::unordered_set< const RegisterOperand * > dsts() const =0
Instruction(Instruction &&)=delete
virtual std::unordered_set< PhysicalRegister * > implicitSrcs() const
Definition Instruction.h:40
virtual std::unordered_set< const MemoryOperand * > memOps() const =0
std::unordered_set< ImmediateOperand * > immOps()
virtual void accept(InstructionVisitor &visitor) const =0
std::unordered_set< RegisterOperand * > dsts()
virtual std::string format() const =0
std::unordered_set< RegisterOperand * > regOps()
virtual void accept(InstructionVisitor &visitor)=0
Definition BasicBlock.h:22
std::unordered_set< Register * > def(const BasicBlock &B)
std::unordered_set< Register * > use(const BasicBlock &B)