mirror of
https://git.musl-libc.org/git/musl
synced 2025-01-21 21:52:04 +03:00
configure: disable TBAA optimization because most compilers are buggy
unlike most projects that use -fno-strict-aliasing, we aim to have all sources respect the C language rules for effective type that make type-based alias analysis optimizations possible. unfortunately, it turns out that there are deep, and likely very difficult to fix, flaws in the TBAA performed by GCC and likely other compilers, whereby this kind of optimization can transform code that follows the rules strictly in ways that will make it malfunction. see for example GCC bugs 107107 and 107115, the latter of which also affects clang. there are not presently any known instances of breakage due to wrong type-based aliasing optimizations in our codebase. nonetheless, since the transformations are unsound and could introduce breakage, configure CFLAGS to build with -fno-strict-aliasing. some casual analysis of the effects on codegen suggest that this is unlikely to affect performance except possibly in the regex engine. in general, we should probably prefer making better use of the restrict keyword over relying on types to imply non-aliasing for optimization purposes; doing so should be able to get back any performance that was lost and more, should it turn out to matter (unlikely).
This commit is contained in:
parent
e6e8213244
commit
833a469167
8
configure
vendored
8
configure
vendored
@ -353,6 +353,14 @@ tryflag CFLAGS_C99FSE -fexcess-precision=standard \
|
||||
|| { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; }
|
||||
tryflag CFLAGS_C99FSE -frounding-math
|
||||
|
||||
#
|
||||
# Semantically we want to insist that our sources follow the
|
||||
# C rules for type-based aliasing, but most if not all real-world
|
||||
# compilers are known or suspected to have critical bugs in their
|
||||
# type-based aliasing analysis. See for example GCC bug 107107.
|
||||
#
|
||||
tryflag CFLAGS_C99FSE -fno-strict-aliasing
|
||||
|
||||
#
|
||||
# We may use the may_alias attribute if __GNUC__ is defined, so
|
||||
# if the compiler defines __GNUC__ but does not provide it,
|
||||
|
Loading…
Reference in New Issue
Block a user