[llvm] [SandboxVec][DAG] MemDGNode for memory-dependency candidate nodes (PR #109684)
Alina Sbirlea via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 1 09:51:00 PDT 2024
================
@@ -66,9 +88,46 @@ class DGNode {
#endif // NDEBUG
};
+/// A DependencyGraph Node for instructions that may read/write memory, or have
+/// some ordering constraints, like with stacksave/stackrestore and
+/// alloca/inalloca.
+class MemDGNode final : public DGNode {
+ MemDGNode *PrevMemN = nullptr;
+ MemDGNode *NextMemN = nullptr;
+
+ void setNextNode(MemDGNode *N) { NextMemN = N; }
+ void setPrevNode(MemDGNode *N) { PrevMemN = N; }
+ friend class DependencyGraph; // For setNextNode(), setPrevNode().
+
+public:
+ MemDGNode(Instruction *I) : DGNode(I, DGNodeID::MemDGNode) {
+ assert(isMemDepCandidate(I) && "Expected Mem instruction!");
+ }
+ static bool classof(const DGNode *Other) {
+ return Other->SubclassID == DGNodeID::MemDGNode;
+ }
+ /// \Returns the previous Mem DGNode in instruction order.
+ MemDGNode *getPrevNode() const { return PrevMemN; }
+ /// \Returns the next Mem DGNode in instruction order.
+ MemDGNode *getNextNode() const { return NextMemN; }
+};
+
+/// Convenience builders for a MemDGNode interval.
+class MemDGNodeIntervalBuilder {
+public:
+ /// Given \p Instrs it finds their closest mem nodes in the interval and
+ /// returns the corresponding mem range. Note: BotN (or its neighboring mem
+ /// node) is included in the range.
+ static Interval<MemDGNode> make(const Interval<Instruction> &Instrs,
----------------
alinas wrote:
Can you elaborate why you need both Interval<Instructions> and a DAG? The DAG has an interval<Instruction> inside. Are they different intervals, what's the usage for each?
https://github.com/llvm/llvm-project/pull/109684
More information about the llvm-commits
mailing list