Find a file
Richard Sandiford 33031ee690 Fix phi backedge detection in backprop (PR85989)
This PR is a nasty wrong code bug due to my fluffing a test for a
backedge in gimple-ssa-backprop.c.  Backedges are supposed to be
from definitions in the statement we're visiting to uses in statements
that we haven't visited yet.  However, the check failed to account for
PHIs in the current block that had already been processed, so if two
PHIs in the same block referenced each other, we'd treat both
references as backedges.

In more detail:

The first phase of the pass goes through all statements in an arbitrary
order, making optimistic assumptions about any statements that haven't
been visited yet.  The second phase then calculates a correct
(supposedly maximal) fixed point.

Although the first phase order is arbitrary in principle, we still use
the CFG rpo to cut down on the backedges.  This means that the only
thing that's truly arbitrary is the order that we process the PHIs
in a block.  Any order should be OK and should eventually give the
same results.  But we have to follow whatever order we pick,
and the pass wasn't doing that.

2018-06-01  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR tree-optimization/85989
	* gimple-ssa-backprop.c (backprop::m_visited_phis): New member
	variable.
	(backprop::intersect_uses): Check it when deciding whether this
	is a backedge reference.
	(backprop::process_block): Add each phi to m_visited_phis
	after visiting it, then clear it at the end.

gcc/testsuite/
	PR tree-optimization/85989
	* gcc.dg/torture/pr85989.c: New test.

From-SVN: r261064
2018-06-01 12:49:44 +00:00
config Improve boostrap-ubsan config (PR bootstrap/64914). 2018-05-10 10:15:42 +00:00
contrib re PR bootstrap/85571 (non-bootstrap-debug miscompare with trunk) 2018-05-08 08:50:33 +00:00
fixincludes * inclhack.def (vxworks_iolib_include_unistd): New fix. 2018-05-25 10:51:58 -06:00
gcc Fix phi backedge detection in backprop (PR85989) 2018-06-01 12:49:44 +00:00
gnattools Update copyright years. 2018-01-03 11:03:58 +01:00
gotools go/build, cmd/go: update to match recent changes to gc 2018-05-09 21:49:47 +00:00
include simple-object.h (simple_object_copy_lto_debug_sections): Add rename parameter. 2018-05-30 19:57:50 +02:00
INSTALL
intl Require ngettext in test of system gettext implementation 2017-11-07 15:24:01 +10:30
libada re PR jit/85384 (libgccjit does not work if --with-gcc-major-version is used) 2018-04-18 11:46:58 +02:00
libatomic x86: libatomic: Do not assume ELF constructors run before IFUNC resolvers 2018-05-23 13:13:05 +02:00
libbacktrace Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libcc1 PR c++/69560 - wrong alignof(double) on x86. 2018-04-23 16:49:38 -04:00
libcpp * system.h: #include <new> earlier. 2018-05-23 13:13:30 -04:00
libdecnumber Do not use bit and for conjunction of predicates (PR c/81272). 2018-02-19 18:29:20 +00:00
libffi Backport of RISC-V support for libffi 2018-05-08 10:29:16 +00:00
libgcc re PR target/85591 (__builtin_cpu_is() is not detecting bdver2 with Model = 0x02) 2018-05-31 21:45:54 +02:00
libgfortran re PR fortran/85840 (Memory leak in write.c) 2018-05-28 21:55:31 +00:00
libgo libgo: update to Go 1.10.2 release 2018-05-31 21:42:53 +00:00
libgomp re PR fortran/85841 ([F2018] reject deleted features) 2018-05-21 22:48:59 +02:00
libhsail-rt [BRIGFE] phsa-specific optimizations 2018-05-04 19:43:57 +00:00
libiberty simple-object.h (simple_object_copy_lto_debug_sections): Add rename parameter. 2018-05-30 19:57:50 +02:00
libitm PR c++/58407 - deprecated implicit copy ops. 2018-05-18 16:02:48 -04:00
libmpx Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libobjc Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
liboffloadmic re PR jit/85384 (libgccjit does not work if --with-gcc-major-version is used) 2018-04-18 11:46:58 +02:00
libquadmath Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libsanitizer re PR sanitizer/86012 (libsanitizer build failure on sparc64-linux-gnu) 2018-05-31 09:57:33 +00:00
libssp Regenerate configure of target libraries 2018-04-24 09:45:26 -07:00
libstdc++-v3 PR libstdc++/78870 support std::filesystem on Windows 2018-05-31 20:20:24 +01:00
libvtv [testsuite] Add scan-ltrans-tree-dump 2018-05-02 12:16:32 +00:00
lto-plugin lto-plugin.c: (non_claimed_files): New static var. 2018-05-30 16:34:54 +00:00
maintainer-scripts re PR other/85622 (gcc-8.1.0/NEWS says it's not released yet) 2018-05-03 11:29:39 +02:00
zlib re PR bootstrap/79771 (in-tree zlib breaks build) 2017-03-14 23:01:23 -06:00
.dir-locals.el
.gitattributes
.gitignore
ABOUT-NLS
ChangeLog * MAINTAINERS (loop-optimizer): Add myself. 2018-05-22 08:26:50 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
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 version. 2018-01-03 15:25:18 +11:00
config.rpath
config.sub config.guess: Import latest version. 2018-01-03 15:25:18 +11:00
configure Add the Netronome Flow Processor (nfp) as a build target to the top-level configure.ac file. 2018-05-01 15:26:51 +00:00
configure.ac Add the Netronome Flow Processor (nfp) as a build target to the top-level configure.ac file. 2018-05-01 15:26:51 +00:00
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
MAINTAINERS * MAINTAINERS (loop-optimizer): Add myself. 2018-05-22 08:26:50 +00:00
Makefile.def Remove Cilk Plus support. 2017-11-28 11:35:37 +01:00
Makefile.in re PR bootstrap/85571 (non-bootstrap-debug miscompare with trunk) 2018-04-30 08:18:03 +00:00
Makefile.tpl re PR bootstrap/85571 (non-bootstrap-debug miscompare with trunk) 2018-04-30 08:18:03 +00:00
missing
mkdep
mkinstalldirs
move-if-change
README
symlink-tree
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.