[llvm-dev] Non-determinism in LLVM codegen

Hans Wennborg via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 13 18:39:29 PST 2016


On Tue, Dec 13, 2016 at 4:57 PM, Grang, Mandeep Singh via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> Everyone,
>
> The following patch to reverse iterate SmallPtrSet's has now been merged:
> https://reviews.llvm.org/D26718
>
> This is how LLVM behavior will change due to this patch:
> - In LLVM builds with assertions enabled, SmallPtrSet's would always be
> reverse iterated by default.
>   This default behavior can be overridden via the flag "-mllvm
> -reverse-iterate=<true/false>".
>
> - In LLVM builds with assertions disabled, SmallPtrSet's would continue to
> be always forward iterated.
>   This behavior cannot be overridden as the above flag is available only in
> builds with assertions enabled.
>
> Currently, the following unit tests are failing in Release+Asserts mode due
> to the difference in SmallPtrSet iteration order:
>     Clang :: Analysis/keychainAPI.m
>     Clang :: Analysis/malloc.c
>     Clang :: Rewriter/objc-modern-metadata-visibility.mm
>     Clang :: SemaCXX/warn-loop-analysis.cpp
>     LLVM :: Transforms/SimplifyCFG/bug-25299.ll

Wait, so you committed a patch that breaks these tests? Should you fix
them first?

IIUC, LLVM_ABI_BREAKING_CHECKS is WITH_ASSERTS by default, so your
change, which is known to break things, is enabled for those of us
enabling asserts?

Or am I misunderstanding?


More information about the llvm-dev mailing list