mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-11 11:34:02 +00:00
UseListOrder: Guarantee that shuffles change use-list order
Change shuffleUseLists() always to change use-list order by rejecting orders that have no changes. This is part of PR5680. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214584 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1526278443
commit
7df1db57b3
@ -63,6 +63,9 @@ static void shuffleValueUseLists(Value *V, std::minstd_rand0 &Gen,
|
|||||||
DEBUG(dbgs() << "V = "; V->dump());
|
DEBUG(dbgs() << "V = "; V->dump());
|
||||||
std::uniform_int_distribution<short> Dist(10, 99);
|
std::uniform_int_distribution<short> Dist(10, 99);
|
||||||
SmallDenseMap<const Use *, short, 16> Order;
|
SmallDenseMap<const Use *, short, 16> Order;
|
||||||
|
auto compareUses =
|
||||||
|
[&Order](const Use &L, const Use &R) { return Order[&L] < Order[&R]; };
|
||||||
|
do {
|
||||||
for (const Use &U : V->uses()) {
|
for (const Use &U : V->uses()) {
|
||||||
auto I = Dist(Gen);
|
auto I = Dist(Gen);
|
||||||
Order[&U] = I;
|
Order[&U] = I;
|
||||||
@ -70,10 +73,10 @@ static void shuffleValueUseLists(Value *V, std::minstd_rand0 &Gen,
|
|||||||
<< ", U = ";
|
<< ", U = ";
|
||||||
U.getUser()->dump());
|
U.getUser()->dump());
|
||||||
}
|
}
|
||||||
|
} while (std::is_sorted(V->use_begin(), V->use_end(), compareUses));
|
||||||
|
|
||||||
DEBUG(dbgs() << " => shuffle\n");
|
DEBUG(dbgs() << " => shuffle\n");
|
||||||
V->sortUseList(
|
V->sortUseList(compareUses);
|
||||||
[&Order](const Use &L, const Use &R) { return Order[&L] < Order[&R]; });
|
|
||||||
|
|
||||||
DEBUG({
|
DEBUG({
|
||||||
for (const Use &U : V->uses()) {
|
for (const Use &U : V->uses()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user