Go to file
Jakub Jelinek a62b3dc5f9 re PR middle-end/22141 (Missing optimization when storing structures)
PR middle-end/22141
	* gimple-ssa-store-merging.c: Include rtl.h and expr.h.
	(struct store_immediate_info): Add bitregion_start and bitregion_end
	fields.
	(store_immediate_info::store_immediate_info): Add brs and bre
	arguments and initialize bitregion_{start,end} from those.
	(struct merged_store_group): Add bitregion_start, bitregion_end,
	align_base and mask fields.  Drop unnecessary struct keyword from
	struct store_immediate_info.  Add do_merge method.
	(clear_bit_region_be): Use memset instead of loop storing zeros.
	(merged_store_group::do_merge): New method.
	(merged_store_group::merge_into): Use do_merge.  Allow gaps in between
	stores as long as the surrounding bitregions have no gaps.
	(merged_store_group::merge_overlapping): Use do_merge.
	(merged_store_group::apply_stores): Test that bitregion_{start,end}
	is byte aligned, rather than requiring that start and width are
	byte aligned.  Drop unnecessary struct keyword from
	struct store_immediate_info.  Allocate and populate also mask array.
	Make start of the arrays relative to bitregion_start rather than
	start and size them according to bitregion_{end,start} difference.
	(struct imm_store_chain_info): Drop unnecessary struct keyword from
	struct store_immediate_info.
	(pass_store_merging::gate): Punt if BITS_PER_UNIT or CHAR_BIT is not 8.
	(pass_store_merging::terminate_all_aliasing_chains): Drop unnecessary
	struct keyword from struct store_immediate_info.
	(imm_store_chain_info::coalesce_immediate_stores): Allow gaps in
	between stores as long as the surrounding bitregions have no gaps.
	Formatting fixes.
	(struct split_store): Add orig non-static data member.
	(split_store::split_store): Initialize orig to false.
	(find_constituent_stmts): Return store_immediate_info *, non-NULL
	if there is exactly a single original stmt.  Change stmts argument
	to pointer from reference, if NULL, don't push anything to it.  Add
	first argument, use it to optimize skipping over orig stmts that
	are known to be before bitpos already.  Simplify.
	(split_group): Return unsigned int count how many stores are or
	would be needed rather than a bool.  Add allow_unaligned argument.
	Change split_stores argument from reference to pointer, if NULL,
	only do a dry run computing how many stores would be produced.
	Rewritten algorithm to use both alignment and misalign if
	!allow_unaligned and handle bitfield stores with gaps.
	(imm_store_chain_info::output_merged_store): Set start_byte_pos
	from bitregion_start instead of start.  Compute allow_unaligned
	here, if true, do 2 split_group dry runs to compute which one
	produces fewer stores and prefer aligned if equal.  Punt if
	new count is bigger or equal than original before emitting any
	statements, rather than during that.  Remove no longer needed
	new_ssa_names tracking.  Replace num_stmts with
	split_stores.length ().  Use 32-bit stack allocated entries
	in split_stores auto_vec.  Try to reuse original store lhs/rhs1
	if possible.  Handle bitfields with gaps.
	(pass_store_merging::execute): Ignore bitsize == 0 stores.
	Compute bitregion_{start,end} for the stores and construct
	store_immediate_info with that.  Formatting fixes.

	* gcc.dg/store_merging_10.c: New test.
	* gcc.dg/store_merging_11.c: New test.
	* gcc.dg/store_merging_12.c: New test.
	* g++.dg/pr71694.C: Add -fno-store-merging to dg-options.

From-SVN: r254213
2017-10-30 12:04:49 +01:00
INSTALL
config Add bootstrap-cet.mk to bootstrap GCC with Intel CET 2017-10-24 05:50:03 -07:00
contrib Handle libbacktrace in contrib/gcc_update 2017-10-02 13:56:50 +02:00
fixincludes fixinc.in (dirname): Change sed from 's|[^/]*/||' to 's|[^/]*//*||'. 2017-10-13 09:28:41 -06:00
gcc re PR middle-end/22141 (Missing optimization when storing structures) 2017-10-30 12:04:49 +01:00
gnattools re PR ada/81878 (--disable-bootstrap --enable-languages=ada fails) 2017-08-17 13:39:58 +00:00
gotools Makefile.am (check-go-tool): Output colon after ${fl}. 2017-10-25 22:00:50 +00:00
include Add INCLUDE_UNIQUE_PTR and use it (PR bootstrap/82610) 2017-10-23 20:25:58 +00:00
intl config-ml.in: Remove references to GCJ. 2016-11-15 16:34:02 +00:00
libada re PR ada/80921 (cross compiling fails to build Ada shared libraries) 2017-06-01 10:51:15 +00:00
libatomic [arm] Fix architecture selection when building libatomic with automatic FPU selection 2017-10-20 12:33:39 +00:00
libbacktrace ztest.c (test_large): Pass unsigned long *, not size_t *, to zlib uncompress function. 2017-10-06 13:37:20 +00:00
libcc1 [C++ PATCH] Move mangling alias out of :: 2017-10-04 16:55:54 +00:00
libcilkrts os-unix-sysdep.c (__cilkrts_getticks): Adjust preprocessor test for SPARC/Linux. 2017-06-23 17:33:43 +00:00
libcpp [PATCH] preprocessor stringizing raw strings 2017-10-10 18:56:31 +00:00
libdecnumber bid2dpd_dpd2bid.c (_bid_to_dpd32): Fix whitespace. 2017-06-29 11:35:03 -06:00
libffi Import from libffi master repository. 2017-10-03 14:26:31 -04:00
libgcc rl78.md: New define_expand "subdi3". 2017-10-23 13:54:02 -04:00
libgfortran re PR libfortran/81938 (valgrind error message and heap-buffer-overflow on address sanitized libgfortran.so) 2017-10-27 17:50:22 +00:00
libgo debug/dwarf: support 64-bit DWARF in byte order check 2017-10-20 18:34:36 +00:00
libgomp target.c (struct gomp_coalesce_buf): New type. 2017-10-28 09:02:39 +02:00
libhsail-rt [BRIGFE] Improved support for function and module scope group 2017-09-27 15:40:24 +00:00
libiberty PR82687, g++.dg/asan/default-options-1.C fails with PR82575 fix 2017-10-24 23:15:01 +10:30
libitm PR c++/80560 - warn on undefined memory operations involving non-trivial types 2017-06-15 21:48:59 -06:00
libmpx * mpxrt/mpxrt-utils.h (__mpxrt_stop): New prototype. 2017-01-30 15:26:24 +01:00
libobjc [2/77] Add an E_ prefix to case statements 2017-08-30 11:08:28 +00:00
liboffloadmic libgomp: Provide prototypes for functions implemented by libgomp plugins 2017-01-31 15:32:58 +01:00
libquadmath re PR libquadmath/81848 (Add PowerPC support to libquadmath) 2017-09-01 22:10:57 +00:00
libsanitizer re PR sanitizer/82595 (bootstrap fails in libsanitizer on powerpc64-unknown-linux-gnu) 2017-10-20 09:32:35 +02:00
libssp ssp.c (__guard_setup): Suppress unused variable warning. 2017-04-02 00:35:58 +00:00
libstdc++-v3 Simplify _Node_insert_return to avoid including <tuple> 2017-10-27 18:49:36 +01:00
libvtv re PR other/79046 (g++ -print-file-name=plugin uses full version number in path) 2017-01-21 09:47:11 +01:00
lto-plugin re PR lto/81487 ([mingw32] ld.exe: error: asprintf failed) 2017-07-21 15:58:14 +00:00
maintainer-scripts update_version_svn: Ignore the GCC 5 branch. 2017-10-10 15:10:28 +02:00
zlib re PR bootstrap/79771 (in-tree zlib breaks build) 2017-03-14 23:01:23 -06:00
.dir-locals.el
.gitattributes add basic .gitattributes files to notice whitespace issues 2016-04-23 02:37:43 +00:00
.gitignore .gitignore: Ignore in-tree prerequisites. 2016-09-09 17:20:55 -04:00
ABOUT-NLS
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
ChangeLog Fix profiledbootstrap. 2017-10-27 13:13:05 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
MAINTAINERS MAINTAINERS (write after approval): Add myself. 2017-10-16 23:36:39 +02:00
Makefile.def re PR bootstrap/81217 (Makefile:22754: warning: overriding recipe for target 'profiledbootstrap') 2017-06-28 07:54:14 +00:00
Makefile.in Fix profiledbootstrap. 2017-10-27 13:13:05 +00:00
Makefile.tpl Fix profiledbootstrap. 2017-10-27 13:13:05 +00:00
README
compile
config-ml.in config-ml.in: Remove references to GCJ. 2016-11-15 16:34:02 +00:00
config.guess * config.guess: Import latest from upstream. 2017-03-18 18:22:06 +00:00
config.rpath
config.sub * config.sub: Import latest version. 2016-12-29 22:04:53 +11:00
configure configure.ac (target-libffi): Don't disable for AIX. 2017-07-28 14:56:28 -04:00
configure.ac configure.ac (target-libffi): Don't disable for AIX. 2017-07-28 14:56:28 -04:00
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
missing
mkdep
mkinstalldirs
move-if-change
symlink-tree
ylwrap

README

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.