Uncovering non-determinism in LLVM - The Next Steps

FYI, I just successfully performed a 3-stage bootstrap with
stage2/stage3 object file comparison on x86_64-apple-darwin16 for
llvm/clang/clang-tools-extra/compiler-rt/libcxx/openmp/polly using our
custom fink packaging scripts with the
-DLLVM_REVERSE_ITERATION:BOOL=ON cmake option. There were no
stage2/stage3 object file comparison failures or test suite
regressions.
       I do have one question though. Is there any particular reason
not to leave this option on for deployed release builds of the
compiler? Other than possibly running into some extreme corner case of
non-deterministism that the stage2/stage3 comparisons and test suites
miss, is there any performance issues introduced in compile time by
leaving -DLLVM_REVERSE_ITERATION:BOOL=ON defaulted on? Thanks in
advance for any clarifications.
            Jack
ps Is it still the case that none of the llvm.org build bots are doing
a full 3-stage bootstrap with stage2/stage3 file comparison (ala FSF
gcc)? If so, that seems like an unfortunate gap in the llvm compiler
testing.

       FYI, I just successfully performed a 3-stage bootstrap with
stage2/stage3 object file comparison on x86_64-apple-darwin16 for
llvm/clang/clang-tools-extra/compiler-rt/libcxx/openmp/polly using our
custom fink packaging scripts with the
-DLLVM_REVERSE_ITERATION:BOOL=ON cmake option. There were no
stage2/stage3 object file comparison failures or test suite
regressions.
       I do have one question though. Is there any particular reason
not to leave this option on for deployed release builds of the
compiler?

Because it wouldn't accomplish anything.
The goal is to have a different iteration order than the default.
If you make this the default, that doesn't help, because now the default is
reverse

Other than possibly running into some extreme corner case of
non-deterministism that the stage2/stage3 comparisons and test suites
miss, is there any performance issues introduced in compile time by
leaving -DLLVM_REVERSE_ITERATION:BOOL=ON defaulted on?

Thanks in

advance for any clarifications.
            Jack
ps Is it still the case that none of the llvm.org build bots are doing
a full 3-stage bootstrap with stage2/stage3 file comparison (ala FSF
gcc)?

Errr, last i looked, a ton were doing so?

       FYI, I just successfully performed a 3-stage bootstrap with
stage2/stage3 object file comparison on x86_64-apple-darwin16 for
llvm/clang/clang-tools-extra/compiler-rt/libcxx/openmp/polly using our
custom fink packaging scripts with the
-DLLVM_REVERSE_ITERATION:BOOL=ON cmake option. There were no
stage2/stage3 object file comparison failures or test suite
regressions.
       I do have one question though. Is there any particular reason
not to leave this option on for deployed release builds of the
compiler?

Because it wouldn't accomplish anything.
The goal is to have a different iteration order than the default.
If you make this the default, that doesn't help, because now the default is
reverse

So perhaps I am doing this wrong? Should I have have the stage2 build without
-DLLVM_REVERSE_ITERATION:BOOL=ON and stage3 with that option
so that any variation in the object files generated for the llvm build
is picked up?

Other than possibly running into some extreme corner case of
non-deterministism that the stage2/stage3 comparisons and test suites
miss, is there any performance issues introduced in compile time by
leaving -DLLVM_REVERSE_ITERATION:BOOL=ON defaulted on?

Thanks in
advance for any clarifications.
            Jack
ps Is it still the case that none of the llvm.org build bots are doing
a full 3-stage bootstrap with stage2/stage3 file comparison (ala FSF
gcc)?

Really? From https://llvm.org/svn/llvm-project/zorg/trunk/buildbot/osuosl/master/config/builders.py,
it seemed like those where commented out. no?

# {'name' : "clang-3stage-ubuntu",
# 'slavenames' : ["ps4-buildslave1a"],
# 'builddir' : "clang-3stage-ubuntu",
# 'factory': ClangLTOBuilder3Stage.get3StageClangLTOBuildFactory(
# clean=True,
# env=None,
# build_gold=True,

This would be ideal, yes :slight_smile:

This produces no regressions in the file comparison between stage2 and
stage3 except for the expected...

--- stage2/include/llvm/Config/abi-breaking.h 2017-07-09
20:42:54.000000000 -0400
+++ stage3/include/llvm/Config/abi-breaking.h 2017-07-09
21:27:57.000000000 -0400
@@ -16,7 +16,7 @@
#define LLVM_ENABLE_ABI_BREAKING_CHECKS 0

/* Define to enable reverse iteration of unordered llvm containers */
-#define LLVM_ENABLE_REVERSE_ITERATION 1
+#define LLVM_ENABLE_REVERSE_ITERATION 0

/* Allow selectively disabling link-time mismatch checking so that header-only
    ADT content from LLVM can be used without linking libSupport. */

when stage2 is passed -DLLVM_REVERSE_ITERATION:BOOL=ON and stage3 is not for
a llvm/clang/clang-tools-extra/compiler-rt/libcxx/openmp/polly 3-stage
bootstrap on x86_64-apple-darwin16.
                 Jack