aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/CodeGen/TargetBranchInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/include/rcc/CodeGen/TargetBranchInfo.h')
-rw-r--r--backend/include/rcc/CodeGen/TargetBranchInfo.h66
1 files changed, 0 insertions, 66 deletions
diff --git a/backend/include/rcc/CodeGen/TargetBranchInfo.h b/backend/include/rcc/CodeGen/TargetBranchInfo.h
deleted file mode 100644
index 39c5122..0000000
--- a/backend/include/rcc/CodeGen/TargetBranchInfo.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef RCC_CODEGEN_TARGETBRANCHINFO_H
-#define RCC_CODEGEN_TARGETBRANCHINFO_H
-
-#include "rcc/Support/Error.h"
-
-#include <cstdint>
-#include <optional>
-
-namespace rcc {
-
-class MachineBasicBlock;
-class MachineFunction;
-class MachineInstr;
-class TargetDescription;
-
-struct MachineBranchAnalysis final {
- MachineInstr *Conditional = nullptr;
- MachineInstr *Unconditional = nullptr;
- MachineBasicBlock *TrueTarget = nullptr;
- MachineBasicBlock *FalseTarget = nullptr;
- bool HasUnanalyzableTerminator = false;
-};
-
-class TargetBranchInfo {
-public:
- virtual ~TargetBranchInfo() = default;
-
- [[nodiscard]] virtual Expected<MachineBranchAnalysis>
- analyzeBranch(MachineBasicBlock &Block, MachineFunction &Function,
- const TargetDescription &Target) const = 0;
- [[nodiscard]] virtual Expected<void>
- reverseBranchCondition(MachineInstr &Branch, MachineBasicBlock &NewTarget,
- MachineFunction &Function, const TargetDescription &Target) const = 0;
- [[nodiscard]] virtual Expected<void> removeBranch(MachineInstr &Branch, 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<MachineInstr *>
- insertUnconditionalBranch(MachineBasicBlock &Block, MachineBasicBlock &TargetBlock,
- MachineFunction &Function, const TargetDescription &Target) const = 0;
-
- [[nodiscard]] virtual Expected<std::uint32_t>
- instructionSize(const MachineInstr &Instruction, const MachineFunction &Function,
- const TargetDescription &Target) const = 0;
- [[nodiscard]] virtual Expected<MachineBasicBlock *>
- branchTarget(MachineInstr &Instruction, MachineFunction &Function,
- const TargetDescription &Target) const = 0;
- [[nodiscard]] virtual Expected<std::optional<bool>>
- evaluateBranchCondition(const MachineInstr &, const MachineFunction &,
- const TargetDescription &) const {
- return std::optional<bool>{};
- }
- [[nodiscard]] virtual bool isBranchOffsetInRange(const MachineInstr &Instruction,
- std::int64_t Offset) const noexcept = 0;
- [[nodiscard]] virtual Expected<bool> relaxBranch(MachineInstr &Instruction, std::int64_t Offset,
- MachineFunction &Function,
- const TargetDescription &Target) const = 0;
-};
-
-} // namespace rcc
-
-#endif // RCC_CODEGEN_TARGETBRANCHINFO_H