diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-08 04:14:34 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-08 04:14:34 +0800 |
| commit | 77884c967d1cbc48afcbaef7e5a35adcb3c5da1b (patch) | |
| tree | 8cc31c1c5115ed909ec9f8751964bfdc96fbd4ad /backend/include/rcc/CodeGen/TargetCodeGen.h | |
| parent | 10b7e69448f866bcd6893b21d7f78d766252eb11 (diff) | |
| download | rcc-project-77884c967d1cbc48afcbaef7e5a35adcb3c5da1b.tar.gz rcc-project-77884c967d1cbc48afcbaef7e5a35adcb3c5da1b.tar.xz | |
[CodeGen] Implement machine SSA exit
Diffstat (limited to 'backend/include/rcc/CodeGen/TargetCodeGen.h')
| -rw-r--r-- | backend/include/rcc/CodeGen/TargetCodeGen.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/TargetCodeGen.h b/backend/include/rcc/CodeGen/TargetCodeGen.h index b1be1f6..f2aac5d 100644 --- a/backend/include/rcc/CodeGen/TargetCodeGen.h +++ b/backend/include/rcc/CodeGen/TargetCodeGen.h @@ -7,12 +7,14 @@ #include "rcc/CodeGen/Register.h" #include "rcc/Support/Error.h" +#include <cstddef> #include <cstdint> #include <optional> namespace rcc { class MachineFunction; +class MachineBasicBlock; class MachineInstr; class MachineRegisterInfo; class TargetDescription; @@ -89,6 +91,38 @@ public: } }; +class TargetSSAInfo { +public: + virtual ~TargetSSAInfo() = default; + + [[nodiscard]] virtual Expected<bool> isFallthroughEdge(const MachineBasicBlock &From, + const MachineBasicBlock &To, + const MachineFunction &Function, + const TargetDescription &Target) const = 0; + + [[nodiscard]] virtual Expected<bool> + rewriteBranchTarget(MachineBasicBlock &Block, MachineBasicBlock &OldTarget, + MachineBasicBlock &NewTarget, MachineFunction &Function, + const TargetDescription &Target) const = 0; + + [[nodiscard]] virtual Expected<void> + insertUnconditionalBranch(MachineBasicBlock &Block, MachineBasicBlock &Target, + MachineFunction &Function, + const TargetDescription &TargetDescription) const = 0; + + [[nodiscard]] virtual Expected<void> validateCopy(Register Destination, + SubRegIndex DestinationSubReg, Register Source, + SubRegIndex SourceSubReg, + const MachineFunction &Function, + const TargetDescription &Target) const = 0; + + [[nodiscard]] virtual Expected<bool> tryConvertToThreeAddress(MachineInstr &, std::size_t, + std::size_t, MachineFunction &, + const TargetDescription &) const { + return false; + } +}; + } // namespace rcc #endif // RCC_CODEGEN_TARGETCODEGEN_H |
