Go to file
Jan Hubicka afa6adbd6c Improve handling of memory operands in ipa-icf 3/4
this patch is based on Maritn's patch
https://gcc.gnu.org/legacy-ml/gcc-patches/2019-11/msg02633.html
however based on new code that track and compare memory accesses
so it can be implemented correctly.

As shown here
https://gcc.gnu.org/pipermail/gcc-patches/2020-November/558773.html
the most common reason for function body being streamed in but merging to fail
is the mismatch in base alias set.

This patch collect base and ref types ao_alias_ptr types, stream them to WPA
and at WPA time hash is produced. Now we can use alias_sets since these these
are assumed to be same as ltrans time alias sets. This is currently not always
true - but that is pre-existing issue.  I will try to produce a testcase and
make followup patch on this (that will stream out ODR types with TYPE_CANONICAL
that is !ODR as !ODR type). However for this patch this is not a problem since
the real alias sets are finer but definitly not coarser.

We may make it possible to use canonical type hash and save some streaming, but
I think it would be better to wait for next stage1 since it is not completely
trivial WRT ODR types: either we hash ODR type names and then hash values would
be too coarse for cases we got conflict betwen C and C++ type or we do not
stream and will again get into trouble with hash values being too weak. Tried
that - we get a lot of types that are struturally same but distinguished by
ODR names (from template instantiations).

As followup I will add code for merging with mismatched base alias sets.  This
makes the aforementioned problem about ODR names less pronounced but it is
still present on pointer loads/stores which requires REF alias set mismatches.

2020-11-13  Jan Hubicka  <hubicka@ucw.cz>
	    Martin Liska  <mliska@suse.cz>

	* ipa-icf.c: Include data-streamer.h and alias.h.
	(sem_function::sem_function): Initialize memory_access_types
	and m_alias_sets_hash.
	(sem_function::hash_stmt): For memory accesses and when going to
	do lto streaming add base and ref types into memory_access_types.
	(sem_item_optimizer::write_summary): Stream memory access types.
	(sem_item_optimizer::read_section): Likewise and also iniitalize
	m_alias_sets_hash.
	(sem_item_optimizer::execute): Call
	sem_item_optimizer::update_hash_by_memory_access_type.
	(sem_item_optimizer::update_hash_by_memory_access_type): Updat.
	* ipa-icf.h (sem_function): Add memory_access_types and
	m_alias_sets_hash.
2020-11-17 15:41:06 +01:00
config
contrib Daily bump. 2020-11-17 00:16:27 +00:00
fixincludes Daily bump. 2020-10-04 00:16:21 +00:00
gcc Improve handling of memory operands in ipa-icf 3/4 2020-11-17 15:41:06 +01:00
gnattools
gotools Daily bump. 2020-10-30 00:16:29 +00:00
include Daily bump. 2020-09-25 00:16:27 +00:00
INSTALL
intl
libada
libatomic Daily bump. 2020-10-12 00:16:25 +00:00
libbacktrace Daily bump. 2020-10-21 00:16:36 +00:00
libcc1 Daily bump. 2020-11-12 00:16:39 +00:00
libcpp Daily bump. 2020-11-14 00:16:38 +00:00
libdecnumber
libffi Daily bump. 2020-09-25 00:16:27 +00:00
libgcc Daily bump. 2020-11-17 00:16:27 +00:00
libgfortran Daily bump. 2020-11-02 20:53:00 +00:00
libgo libgo: update to Go 1.15.4 release 2020-11-10 07:25:32 -08:00
libgomp Daily bump. 2020-11-15 00:16:26 +00:00
libhsail-rt
libiberty Daily bump. 2020-11-14 00:16:38 +00:00
libitm Daily bump. 2020-10-02 00:16:27 +00:00
libobjc Daily bump. 2020-10-12 00:16:25 +00:00
liboffloadmic
libphobos Daily bump. 2020-11-14 00:16:38 +00:00
libquadmath
libsanitizer Daily bump. 2020-11-14 00:16:38 +00:00
libssp
libstdc++-v3 Daily bump. 2020-11-17 00:16:27 +00:00
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore Add .cache to git ignore. 2020-11-16 12:52:43 +01:00
ABOUT-NLS
ar-lib
ChangeLog Daily bump. 2020-11-17 00:16:27 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in config-ml.in: Suppress output from multi-do recipes 2020-11-09 14:28:37 +00:00
config.guess
config.rpath
config.sub
configure configure: Fix in-tree building of GMP on BSD [PR97302] 2020-10-06 11:49:34 +02:00
configure.ac configure: Fix in-tree building of GMP on BSD [PR97302] 2020-10-06 11:49:34 +02:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.RUNTIME
depcomp
install-sh
libtool-ldflags
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS MAINTAINERS: add myself for write after approval 2020-11-13 11:01:12 +08:00
Makefile.def
Makefile.in
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.