mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[MIR-Canon] Fixing non-determinism that was breaking bots (NFC).
An earlier fix of a subtle iterator invalidation bug had uncovered a nondeterminism that was present in the MultiUsers bag. Problem was that MultiUsers was being looked up using pointers. This patch is an NFC change that numbers each multiuser and processes each in numbered order. This fixes the test failure on netbsd and will likely fix the green-dragon bot too. llvm-svn: 363012
This commit is contained in:
parent
38d081001e
commit
6d47e1a226
@ -180,6 +180,8 @@ static bool rescheduleCanonically(unsigned &PseudoIdempotentInstCount,
|
||||
}
|
||||
|
||||
std::map<MachineInstr *, std::vector<MachineInstr *>> MultiUsers;
|
||||
std::map<unsigned, MachineInstr *> MultiUserLookup;
|
||||
unsigned UseToBringDefCloserToCount = 0;
|
||||
std::vector<MachineInstr *> PseudoIdempotentInstructions;
|
||||
std::vector<unsigned> PhysRegDefs;
|
||||
for (auto *II : Instructions) {
|
||||
@ -255,6 +257,7 @@ static bool rescheduleCanonically(unsigned &PseudoIdempotentInstCount,
|
||||
if (Delta < Distance) {
|
||||
Distance = Delta;
|
||||
UseToBringDefCloserTo = UseInst;
|
||||
MultiUserLookup[UseToBringDefCloserToCount++] = UseToBringDefCloserTo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -294,11 +297,11 @@ static bool rescheduleCanonically(unsigned &PseudoIdempotentInstCount,
|
||||
}
|
||||
|
||||
// Sort the defs for users of multiple defs lexographically.
|
||||
for (const auto &E : MultiUsers) {
|
||||
for (const auto &E : MultiUserLookup) {
|
||||
|
||||
auto UseI =
|
||||
std::find_if(MBB->instr_begin(), MBB->instr_end(),
|
||||
[&](MachineInstr &MI) -> bool { return &MI == E.first; });
|
||||
[&](MachineInstr &MI) -> bool { return &MI == E.second; });
|
||||
|
||||
if (UseI == MBB->instr_end())
|
||||
continue;
|
||||
@ -306,7 +309,8 @@ static bool rescheduleCanonically(unsigned &PseudoIdempotentInstCount,
|
||||
LLVM_DEBUG(
|
||||
dbgs() << "Rescheduling Multi-Use Instructions Lexographically.";);
|
||||
Changed |= rescheduleLexographically(
|
||||
E.second, MBB, [&]() -> MachineBasicBlock::iterator { return UseI; });
|
||||
MultiUsers[E.second], MBB,
|
||||
[&]() -> MachineBasicBlock::iterator { return UseI; });
|
||||
}
|
||||
|
||||
PseudoIdempotentInstCount = PseudoIdempotentInstructions.size();
|
||||
|
Loading…
Reference in New Issue
Block a user