[PATCH] AArch64: Make AArch64A57FPLoadBalancing output stable.
James Molloy
james at jamesmolloy.co.uk
Fri Jan 30 00:40:45 PST 2015
Hi Geoff,
Thanks for fixing this! It looks ok as-is, but wouldn't switching simply
from std::sort to std::stable_sort solve the problem easier? Stable_sort is
used for this reason in other areas of the compiler.
Cheers,
James
On Fri, 30 Jan 2015 at 03:51, Geoff Berry <gberry at codeaurora.org> wrote:
> Hi jmolloy, mcrosier, apazos,
>
> Add tie breaker to colorChainSet() sort so that processing order doesn't
> depend on std::set order, which depends on pointer order, which is
> unstable from run to run.
>
> REPOSITORY
> rL LLVM
>
> http://reviews.llvm.org/D7265
>
> Files:
> lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp
>
> Index: lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp
> ===================================================================
> --- lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp
> +++ lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp
> @@ -259,7 +259,7 @@
> }
>
> /// Return true if this chain starts before Other.
> - bool startsBefore(Chain *Other) {
> + bool startsBefore(const Chain *Other) const {
> return StartInstIdx < Other->StartInstIdx;
> }
>
> @@ -431,10 +431,17 @@
> // chains that we cannot change before we look at those we can,
> // so the parity counter is updated and we know what color we should
> // change them to!
> + // Final tie-break with instruction order so pass output is stable
> (i.e. not
> + // dependent on malloc'd pointer values).
> std::sort(GV.begin(), GV.end(), [](const Chain *G1, const Chain *G2) {
> if (G1->size() != G2->size())
> return G1->size() > G2->size();
> - return G1->requiresFixup() > G2->requiresFixup();
> + if (G1->requiresFixup() != G2->requiresFixup())
> + return G1->requiresFixup() > G2->requiresFixup();
> + // Make sure startsBefore() produces a stable final order.
> + assert((G1 == G2 || (G1->startsBefore(G2) ^ G2->startsBefore(G1)))
> &&
> + "Starts before not total order!");
> + return G1->startsBefore(G2);
> });
>
> Color PreferredColor = Parity < 0 ? Color::Even : Color::Odd;
>
> EMAIL PREFERENCES
> http://reviews.llvm.org/settings/panel/emailpreferences/
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150130/88e46e96/attachment.html>
More information about the llvm-commits
mailing list