[llvm] r214584 - UseListOrder: Guarantee that shuffles change use-list order
Duncan P. N. Exon Smith
dexonsmith at apple.com
Fri Aug 1 15:50:05 PDT 2014
Author: dexonsmith
Date: Fri Aug 1 17:50:04 2014
New Revision: 214584
URL: http://llvm.org/viewvc/llvm-project?rev=214584&view=rev
Log:
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.
Modified:
llvm/trunk/lib/IR/UseListOrder.cpp
Modified: llvm/trunk/lib/IR/UseListOrder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/UseListOrder.cpp?rev=214584&r1=214583&r2=214584&view=diff
==============================================================================
--- llvm/trunk/lib/IR/UseListOrder.cpp (original)
+++ llvm/trunk/lib/IR/UseListOrder.cpp Fri Aug 1 17:50:04 2014
@@ -63,17 +63,20 @@ static void shuffleValueUseLists(Value *
DEBUG(dbgs() << "V = "; V->dump());
std::uniform_int_distribution<short> Dist(10, 99);
SmallDenseMap<const Use *, short, 16> Order;
- for (const Use &U : V->uses()) {
- auto I = Dist(Gen);
- Order[&U] = I;
- DEBUG(dbgs() << " - order: " << I << ", op = " << U.getOperandNo()
- << ", U = ";
- U.getUser()->dump());
- }
+ auto compareUses =
+ [&Order](const Use &L, const Use &R) { return Order[&L] < Order[&R]; };
+ do {
+ for (const Use &U : V->uses()) {
+ auto I = Dist(Gen);
+ Order[&U] = I;
+ DEBUG(dbgs() << " - order: " << I << ", op = " << U.getOperandNo()
+ << ", U = ";
+ U.getUser()->dump());
+ }
+ } while (std::is_sorted(V->use_begin(), V->use_end(), compareUses));
DEBUG(dbgs() << " => shuffle\n");
- V->sortUseList(
- [&Order](const Use &L, const Use &R) { return Order[&L] < Order[&R]; });
+ V->sortUseList(compareUses);
DEBUG({
for (const Use &U : V->uses()) {
More information about the llvm-commits
mailing list