@@ -62,8 +62,6 @@ DependencyGraph::getRoughDepType(Instruction *FromI, Instruction *ToI) {
62
62
} else if (FromI->mayReadFromMemory ()) {
63
63
if (ToI->mayWriteToMemory ())
64
64
return DependencyType::WriteAfterRead;
65
- if (ToI->mayReadFromMemory ())
66
- return DependencyType::ReadAfterRead;
67
65
}
68
66
if (isa<sandboxir::PHINode>(FromI) || isa<sandboxir::PHINode>(ToI))
69
67
return DependencyType::Control;
@@ -103,7 +101,7 @@ bool DependencyGraph::alias(Instruction *SrcI, Instruction *DstI,
103
101
// TODO: Check AABudget
104
102
ModRefInfo SrcModRef =
105
103
isOrdered (SrcI)
106
- ? ModRefInfo::Mod
104
+ ? ModRefInfo::ModRef
107
105
: Utils::aliasAnalysisGetModRefInfo (*BatchAA, SrcI, *DstLocOpt);
108
106
switch (DepType) {
109
107
case DependencyType::ReadAfterWrite:
@@ -119,8 +117,6 @@ bool DependencyGraph::alias(Instruction *SrcI, Instruction *DstI,
119
117
bool DependencyGraph::hasDep (Instruction *SrcI, Instruction *DstI) {
120
118
DependencyType RoughDepType = getRoughDepType (SrcI, DstI);
121
119
switch (RoughDepType) {
122
- case DependencyType::ReadAfterRead:
123
- return false ;
124
120
case DependencyType::ReadAfterWrite:
125
121
case DependencyType::WriteAfterWrite:
126
122
case DependencyType::WriteAfterRead:
@@ -175,9 +171,11 @@ Interval<Instruction> DependencyGraph::extend(ArrayRef<Instruction *> Instrs) {
175
171
}
176
172
// Create the dependencies.
177
173
auto DstRange = MemDGNodeIntervalBuilder::make (InstrInterval, *this );
178
- for (MemDGNode &DstN : drop_begin (DstRange)) {
179
- auto SrcRange = Interval<MemDGNode>(DstRange.top (), DstN.getPrevNode ());
180
- scanAndAddDeps (DstN, SrcRange);
174
+ if (!DstRange.empty ()) {
175
+ for (MemDGNode &DstN : drop_begin (DstRange)) {
176
+ auto SrcRange = Interval<MemDGNode>(DstRange.top (), DstN.getPrevNode ());
177
+ scanAndAddDeps (DstN, SrcRange);
178
+ }
181
179
}
182
180
183
181
return InstrInterval;
0 commit comments