[lld] r288527 - Remove a wrong performance optimization.

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 4 01:36:40 PST 2016


I think this can be easily fixed by just using a single constant index in
the no-thread case, i.e. `(Config->Threads ? Cnt : 0)` or something like
that.

-- Sean Silva

On Fri, Dec 2, 2016 at 10:40 AM, Rui Ueyama via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: ruiu
> Date: Fri Dec  2 12:40:43 2016
> New Revision: 288527
>
> URL: http://llvm.org/viewvc/llvm-project?rev=288527&view=rev
> Log:
> Remove a wrong performance optimization.
>
> This is a hack for single thread execution. We are using Color[0] and
> Color[1] alternately on each iteration. This optimization is to look
> at the next slot as opposted to the current slot to get recent results
> early. Turns out that the assumption is wrong, because the other slots
> are not always have the most recent values, but instead it may have
> stale values of the previous iteration. This patch removes that
> performance hack.
>
> Modified:
>     lld/trunk/ELF/ICF.cpp
>
> Modified: lld/trunk/ELF/ICF.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ICF.cpp?
> rev=288527&r1=288526&r2=288527&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/ICF.cpp (original)
> +++ lld/trunk/ELF/ICF.cpp Fri Dec  2 12:40:43 2016
> @@ -235,19 +235,12 @@ bool ICF<ELFT>::variableEq(const InputSe
>      if (!X || !Y)
>        return false;
>
> -    // Performance hack for single-thread. If no other threads are
> -    // running, we can safely read next colors as there is no race
> -    // condition. This optimization may reduce the number of
> -    // iterations of the main loop because we can see results of the
> -    // same iteration.
> -    size_t Idx = (Config->Threads ? Cnt : Cnt + 1) % 2;
> -
>      // Ineligible sections have the special color 0.
>      // They can never be the same in terms of section colors.
> -    if (X->Color[Idx] == 0)
> +    if (X->Color[Cnt % 2] == 0)
>        return false;
>
> -    return X->Color[Idx] == Y->Color[Idx];
> +    return X->Color[Cnt % 2] == Y->Color[Cnt % 2];
>    };
>
>    return std::equal(RelsA.begin(), RelsA.end(), RelsB.begin(), Eq);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161204/240870b8/attachment.html>


More information about the llvm-commits mailing list