forked from OSchip/llvm-project
RegAllocGreedy: Follow-up to r296722
We can now end up in situations where we initiate LiveIntervalUnion queries with different SubRanges against the same register unit, so the assert() no longer holds in all cases. Just recalculate now when we know the cache is out of date. llvm-svn: 296928
This commit is contained in:
parent
65a16dd858
commit
ffe40dd69e
|
@ -849,7 +849,11 @@ void RAGreedy::evictInterference(LiveInterval &VirtReg, unsigned PhysReg,
|
||||||
SmallVector<LiveInterval*, 8> Intfs;
|
SmallVector<LiveInterval*, 8> Intfs;
|
||||||
for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
|
for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
|
||||||
LiveIntervalUnion::Query &Q = Matrix->query(VirtReg, *Units);
|
LiveIntervalUnion::Query &Q = Matrix->query(VirtReg, *Units);
|
||||||
assert(Q.seenAllInterferences() && "Didn't check all interfererences.");
|
// We usually have the interfering VRegs cached so collectInterferingVRegs()
|
||||||
|
// should be fast, we may need to recalculate if when different physregs
|
||||||
|
// overlap the same register unit so we had different SubRanges queried
|
||||||
|
// against it.
|
||||||
|
Q.collectInterferingVRegs();
|
||||||
ArrayRef<LiveInterval*> IVR = Q.interferingVRegs();
|
ArrayRef<LiveInterval*> IVR = Q.interferingVRegs();
|
||||||
Intfs.append(IVR.begin(), IVR.end());
|
Intfs.append(IVR.begin(), IVR.end());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue