[llvm] [MachinePipeliner] Introduce a new class for loop-carried deps (PR #137663)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 4 16:37:05 PDT 2025
================
@@ -266,6 +266,82 @@ struct SUnitWithMemInfo {
bool getUnderlyingObjects();
};
+/// Add loop-carried chain dependencies. This class handles the same type of
+/// dependencies added by `ScheduleDAGInstrs::buildSchedGraph`, but takes into
+/// account dependencies across iterations.
+class LoopCarriedOrderDepsTracker {
+ // Type of instruction that is relevant to order-dependencies
+ enum class InstrTag {
+ Barrier = 0, ///< A barrier event instruction.
+ LoadOrStore = 1, ///< An instruction that may load or store memory, but is
+ ///< not a barrier event.
+ FPExceptions = 2, ///< An instruction that does not match above, but may
+ ///< raise floatin-point exceptions.
+ };
+
+ struct TaggedSUnit : PointerIntPair<SUnit *, 2> {
+ TaggedSUnit(SUnit *SU, InstrTag Tag)
+ : PointerIntPair<SUnit *, 2>(SU, unsigned(Tag)) {}
+
+ InstrTag getTag() const { return InstrTag(getInt()); }
+ };
+
+ /// Holds loads and stores with memory related information.
----------------
aankit-ca wrote:
Can you add a comment here on it's purpose?
https://github.com/llvm/llvm-project/pull/137663
More information about the llvm-commits
mailing list