Am 2018-01-12 um 19:45 schrieb Jeff Law:
On 01/12/2018 11:26 AM, Cory Fields wrote:
Quick disclaimer: I'm 100% new to GCC code and the dev process, so
there are bound to be some faulty assumptions below.

I recently worked on a build of gcc, x86_64-pc-linux-gnu ->
x86_64-pc-linux-musl. In order to boost my confidence in musl, I
decided that I'd like to ensure that 3 (and 4) stage bootstraps
succeed and compare equal.

I quickly ran into failed object comparisons at stage3. The issue, as
it turned out, was that musl's qsort algorithm differs significantly
from gcc's, though both (as far as I can tell) are perfectly legal.
The c spec allows for different results in the cast of unstable
arrays.
THe key here is the results can differ if the comparison function is not
stable.  That's inherent in the qsort algorithms.

But, if the comparison functions are fixed, then the implementation
differences between the qsorts won't matter.

Alexander Monokov has led an effort to identify cases where the
comparison functions do not provide a stable ordering and to fix them.
Some remain, but the majority have been addressed over the last year.
His work also includes a qsort checking implementation to try and spot
these problems as part of GCC's internal consistency checking mechanisms.

His work is on the development trunk and will show up in the upcoming
gcc-8 release.

Coincidentally I just stumbled over the differences in assembler code for a gcc-6 powerpc-eabi cross-compiler running on Linux, Cygwin64 and Solaris. With some help from IRC I found the following 3 trunk revisions seem to be enough to greatly stabilize gcc-6 (and likely gcc-7) on these platforms:

r250395:
2017-07-20  Alexander Monakov  <amona...@ispras.ru>

     * lra-assigns.c (pseudo_compare_func): Fix comparison step based on
     non_spilled_static_chain_regno_p.

r253207:
2017-09-26  Martin Jambor  <mjam...@suse.cz>

     * tree-sra.c (compare_access_positions): Put integral types first,
     stabilize sorting of integral types, remove conditions putting
     non-full-precision integers last.
     (sort_and_splice_var_accesses): Disable scalarization if a
     non-integert would be represented by a non-full-precision integer.

r256682:
2018-01-14  Cory Fields  <cory-nosp...@coryfields.com>

     * tree-ssa-loop-im.c (sort_bbs_in_loop_postorder_cmp): Stabilize sort.
     * ira-color (allocno_hard_regs_compare): Likewise.


All applied cleanly to the current gcc-6-branch. I'm unsure if it's worth backporting them to the branches, but since I already prepared the list...

Franz

Reply via email to