GCC modified for the FreeChainXenon project
Find a file
Jakub Jelinek cf39dccf92 cselim: Don't assume it is safe to cstore replace a store to a local variable with unknown offset [PR94734]
As the new testcase shows, it is not safe to assume we can optimize
a conditional store into an automatic non-addressable var, we can do it
only if we can prove that the unconditional load or store actually will
not be outside of the boundaries of the variable.
If the offset and size are constant, we can, but this is already all
checked in !tree_could_trap_p, otherwise we really need to check for
a dominating unconditional store, or for the specific case of automatic
non-addressable variables, it is enough if there is a dominating load
(that is what those 4 testcases have).  tree-ssa-phiopt.c has some
infrastructure for this already, see the add_or_mark_expr method etc.,
but right now it handles only MEM_REFs with SSA_NAME first operand
and some integral offset.  So, I think it can be for GCC11 extended
to handle other memory references, possibly up to just doing
get_inner_reference and hasing based on the base, offset expressions
and bit_offset and bit_size, and have also a special case that for
!TREE_ADDRESSABLE automatic variables it could ignore whether something
is a load or store because the local stack should be always writable.
But it feels way too dangerous to do this this late for GCC10, so this
patch just restricts the optimization to the safe case (where lhs doesn't
trap), and on Richi's request also ignores TREE_ADDRESSABLE bit if
flag_store_data_races, because my understanding the reason for
TREE_ADDRESSABLE check is that we want to avoid introducing
store data races (if address of an automatic var escapes, some other thread
could be accessing it concurrently).

2020-04-25  Jakub Jelinek  <jakub@redhat.com>
	    Richard Biener  <rguenther@suse.de>

	PR tree-optimization/94734
	PR tree-optimization/89430
	* tree-ssa-phiopt.c: Include tree-eh.h.
	(cond_store_replacement): Return false if an automatic variable
	access could trap.  If -fstore-data-races, don't return false
	just because an automatic variable is addressable.

	* gcc.dg/tree-ssa/pr89430-1.c: Add xfail.
	* gcc.dg/tree-ssa/pr89430-2.c: Add xfail.
	* gcc.dg/tree-ssa/pr89430-5.c: Add xfail.
	* gcc.dg/tree-ssa/pr89430-6.c: Add xfail.
	* gcc.c-torture/execute/pr94734.c: New test.
2020-04-25 00:10:01 +02:00
config libgfortran: Provide some further math library fallbacks [PR94694] 2020-04-22 21:34:19 +02:00
contrib Do not modify tab options in vimrc for .py files. 2020-04-17 08:55:55 +02:00
fixincludes Allow CONFIG_SHELL to override build-time shell in mkheaders 2020-02-20 22:09:03 -03:00
gcc cselim: Don't assume it is safe to cstore replace a store to a local variable with unknown offset [PR94734] 2020-04-25 00:10:01 +02:00
gnattools
gotools libgo: update to Go1.14beta1 2020-01-21 23:53:22 -08:00
include Do not use HAVE_DOS_BASED_FILE_SYSTEM for Cygwin. 2020-04-17 09:22:51 +02:00
INSTALL
intl intl: Unbreak intl build with bison 3 when no regeneration is needed [PR92008] 2020-04-16 11:55:00 +02:00
libada Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
libatomic i386: Remove unneeded assignments when triggering SSE exceptions 2020-04-19 14:27:12 +02:00
libbacktrace libbacktrace: update to current libgo test file 2020-02-15 18:25:13 -08:00
libcc1 c++: Fix return type deduction with an abbreviated function template 2020-02-10 20:43:53 -05:00
libcpp Update cpplib eo.po. 2020-04-06 21:34:20 +00:00
libdecnumber Update copyright years. 2020-01-01 12:51:42 +01:00
libffi Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
libgcc aarch64, libgcc: Fix unwinding from pac-ret to normal frames [PR94514] 2020-04-21 17:49:01 +01:00
libgfortran Protect the trigd functions in libgfortran from unavailable math functions. 2020-04-23 10:11:01 -04:00
libgo gotest: increase the test timeout 2020-04-23 20:16:32 -07:00
libgomp amdgcn: Check HSA return codes [PR94629] 2020-04-23 15:05:23 +01:00
libhsail-rt Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
libiberty Keep .GCC.command.line sections of LTO objetcs 2020-03-05 08:44:11 +01:00
libitm Use a non-empty test program to test ability to link. 2020-02-12 13:22:07 -08:00
libobjc Use a non-empty test program to test ability to link. 2020-02-12 13:22:07 -08:00
liboffloadmic Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
libphobos libphobos: Remove GDCFLAGSX variable from configure scripts. 2020-04-21 23:03:23 +02:00
libquadmath Use a non-empty test program to test ability to link. 2020-02-12 13:22:07 -08:00
libsanitizer Darwin, libsanitizer: Adjust minimum supported Darwin version (PR93731). 2020-03-01 14:40:57 +00:00
libssp Use a non-empty test program to test ability to link. 2020-02-12 13:22:07 -08:00
libstdc++-v3 libstdc++: Make net::service_already_exists default constructible 2020-04-24 14:15:51 +01:00
libvtv Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
lto-plugin API extension for binutils (type of symbols). 2020-03-19 16:56:27 +01:00
maintainer-scripts maintainer-scripts: Fix up gcc_release without -l, where mkdir was using umask 077 after migration 2020-03-12 18:30:16 +01:00
zlib Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
.dir-locals.el
.gitattributes Add *.md diff=md. 2020-01-15 14:29:53 +01:00
.gitignore
ABOUT-NLS
ar-lib
ChangeLog Since the pdp11-aout target does not support gdb, gdbserver or gprof these should be excluded in configure. 2020-04-21 10:44:32 +01:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in MSP430: Add -fno-exceptions multilib 2019-12-11 19:19:50 +00:00
config.guess Update config.sub and config.guess. 2019-09-09 11:14:32 +02:00
config.rpath
config.sub Update config.sub and config.guess. 2019-09-09 11:14:32 +02:00
configure Since the pdp11-aout target does not support gdb, gdbserver or gprof these should be excluded in configure. 2020-04-21 10:44:32 +01:00
configure.ac Since the pdp11-aout target does not support gdb, gdbserver or gprof these should be excluded in configure. 2020-04-21 10:44:32 +01:00
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
depcomp
install-sh
libtool-ldflags
libtool.m4 [ARM/FDPIC v6 02/24] [ARM] FDPIC: Handle arm*-*-uclinuxfdpiceabi in configure scripts 2019-09-10 09:37:00 +02:00
ltgcc.m4
ltmain.sh Do not use HAVE_DOS_BASED_FILE_SYSTEM for Cygwin. 2020-04-17 09:22:51 +02:00
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
MAINTAINERS MAINTAINERS: add myself for write after approval 2020-04-22 09:39:44 +02:00
Makefile.def Merge top-level configury changes from gdb 2020-04-09 06:52:55 -06:00
Makefile.in Merge top-level configury changes from gdb 2020-04-09 06:52:55 -06:00
Makefile.tpl
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
symlink-tree
test-driver
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.