[llvm] [SandboxVec][DAG] MemDGNode for memory-dependency candidate nodes (PR #109684)
Thorsten Schütt via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 27 11:24:28 PDT 2024
================
@@ -29,22 +29,42 @@
namespace llvm::sandboxir {
+class DependencyGraph;
+class MemDGNode;
+
+/// SubclassIDs for isa/dyn_cast etc.
+enum class DGNodeID {
+ DGNode,
+ MemDGNode,
+};
+
/// A DependencyGraph Node that points to an Instruction and contains memory
/// dependency edges.
class DGNode {
+protected:
Instruction *I;
+ // TODO: Use a PointerIntPair for SubclassID and I.
+ /// For isa/dyn_cast etc.
+ DGNodeID SubclassID;
/// Memory predecessors.
DenseSet<DGNode *> MemPreds;
- /// This is true if this may read/write memory, or if it has some ordering
- /// constraints, like with stacksave/stackrestore and alloca/inalloca.
- bool IsMem;
+
+ DGNode(Instruction *I, DGNodeID ID) : I(I), SubclassID(ID) {}
+ friend class MemDGNode; // For constructor.
public:
- DGNode(Instruction *I) : I(I) {
- IsMem = I->isMemDepCandidate() ||
- (isa<AllocaInst>(I) && cast<AllocaInst>(I)->isUsedWithInAlloca()) ||
- I->isStackSaveOrRestoreIntrinsic();
+ DGNode(Instruction *I) : I(I), SubclassID(DGNodeID::DGNode) {
+ assert(!isMemDepCandidate(I) && "Expected Non-Mem instruction, ");
}
+ DGNode(const DGNode &Other) = delete;
+ virtual ~DGNode() = default;
+ /// \Returns true if \p I is a memory dependency candidate instruction.
+ static bool isMemDepCandidate(Instruction *I) {
+ return I->isMemDepCandidate() ||
+ (isa<AllocaInst>(I) && cast<AllocaInst>(I)->isUsedWithInAlloca()) ||
----------------
tschuett wrote:
We can argue about the `should` but ....
https://github.com/llvm/llvm-project/pull/109684
More information about the llvm-commits
mailing list