diff options
Diffstat (limited to 'backend/include/rcc/CodeGen/ScheduleDAG.h')
| -rw-r--r-- | backend/include/rcc/CodeGen/ScheduleDAG.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/backend/include/rcc/CodeGen/ScheduleDAG.h b/backend/include/rcc/CodeGen/ScheduleDAG.h index 644d98a..7634202 100644 --- a/backend/include/rcc/CodeGen/ScheduleDAG.h +++ b/backend/include/rcc/CodeGen/ScheduleDAG.h @@ -9,6 +9,7 @@ #include <cstddef> #include <cstdint> +#include <optional> #include <span> #include <vector> @@ -32,6 +33,7 @@ enum class ScheduleDependencyKind : std::uint8_t { Memory, Barrier, Artificial, + Cluster, RegisterUnit, RegisterMask, }; @@ -57,6 +59,8 @@ struct ScheduleUnit final { std::uint64_t Depth = 0; std::uint64_t Height = 0; MachineInstrStableID StableID; + std::optional<std::size_t> ClusterPredecessor; + std::optional<std::size_t> ClusterSuccessor; }; class ScheduleDAG final { @@ -64,7 +68,7 @@ public: [[nodiscard]] static Expected<ScheduleDAG> build(MachineBasicBlock &Block, std::span<MachineInstr *const> Instructions, const MachineFunction &Function, const TargetDescription &Target, - const TargetSchedulingModel &Model, ScheduleDAGMode Mode); + const TargetSchedulingModel &Model, ScheduleDAGMode Mode, bool EmitDebugOutput = false); [[nodiscard]] MachineBasicBlock &block() const noexcept { return *Block; @@ -84,6 +88,7 @@ public: [[nodiscard]] Expected<void> addArtificialDependency(std::size_t Source, std::size_t Destination, std::uint32_t Latency); + [[nodiscard]] Expected<bool> fuseInstructionPair(std::size_t First, std::size_t Second); private: explicit ScheduleDAG(MachineBasicBlock &Block) : Block(&Block) {} @@ -97,9 +102,11 @@ private: ScheduleDAGMode Mode); [[nodiscard]] Expected<void> buildMemoryDependencies(const TargetDescription &Target); [[nodiscard]] Expected<void> buildOrderDependencies(const TargetDescription &Target); + [[nodiscard]] bool hasPath(std::size_t Source, std::size_t Destination) const; + [[nodiscard]] bool hasDirectDependency(std::size_t Source, std::size_t Destination) const; void addDependency(std::size_t Source, std::size_t Destination, ScheduleDependencyKind Kind, std::uint32_t Latency); - void computeCriticalPaths(); + [[nodiscard]] Expected<void> computeCriticalPaths(); MachineBasicBlock *Block; std::vector<ScheduleUnit> Units; |
