@@ -62,8 +62,6 @@ DependencyGraph::getRoughDepType(Instruction *FromI, Instruction *ToI) {
6262 } else if (FromI->mayReadFromMemory ()) {
6363 if (ToI->mayWriteToMemory ())
6464 return DependencyType::WriteAfterRead;
65- if (ToI->mayReadFromMemory ())
66- return DependencyType::ReadAfterRead;
6765 }
6866 if (isa<sandboxir::PHINode>(FromI) || isa<sandboxir::PHINode>(ToI))
6967 return DependencyType::Control;
@@ -103,7 +101,7 @@ bool DependencyGraph::alias(Instruction *SrcI, Instruction *DstI,
103101 // TODO: Check AABudget
104102 ModRefInfo SrcModRef =
105103 isOrdered (SrcI)
106- ? ModRefInfo::Mod
104+ ? ModRefInfo::ModRef
107105 : Utils::aliasAnalysisGetModRefInfo (*BatchAA, SrcI, *DstLocOpt);
108106 switch (DepType) {
109107 case DependencyType::ReadAfterWrite:
@@ -119,8 +117,6 @@ bool DependencyGraph::alias(Instruction *SrcI, Instruction *DstI,
119117bool DependencyGraph::hasDep (Instruction *SrcI, Instruction *DstI) {
120118 DependencyType RoughDepType = getRoughDepType (SrcI, DstI);
121119 switch (RoughDepType) {
122- case DependencyType::ReadAfterRead:
123- return false ;
124120 case DependencyType::ReadAfterWrite:
125121 case DependencyType::WriteAfterWrite:
126122 case DependencyType::WriteAfterRead:
@@ -175,9 +171,11 @@ Interval<Instruction> DependencyGraph::extend(ArrayRef<Instruction *> Instrs) {
175171 }
176172 // Create the dependencies.
177173 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+ }
181179 }
182180
183181 return InstrInterval;
0 commit comments