1774ab8486
In the PR104639 optimization, I've added code to emit # DEBUG D#1 => arg != carg ? arg : oarg instruction and replace debug uses of the phi with that debug temp, so that the debug info is still accurrate. Unfortunately, that is only correct if the middle-bb and phi bb contain 1 and 2 predecessors, i.e. the ones that we are using in the optimization (in particular middle-bb has cond-bb as pred and phi bb cond-bb and middle-bb). If that is not the case, then we can reach these from another bb and so the arg SSA_NAME might not be valid there (its definition doesn't dominate all incoming edges), or, even if it is valid, might be wrong-debug, e.g. phi argument from some unrelated other incoming edge might have the carg value that the debug stmt remaps to oarg. In theory we could check for that case and if middle-bb doesn't have a single pred or phi bb 2 preds check if arg SSA_NAME dominates the phi bb and if all other phi arguments are expr_not_equal_to the carg value, but this patch just uses a simpler approach and resets already if we have some extra incoming edges. 2022-04-11 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/105218 * tree-ssa-phiopt.cc (value_replacement): If middle_bb has more than one predecessor or phi's bb more than 2 predecessors, reset phi result uses instead of adding a debug temp. * gcc.dg/pr105218.c: New test. |
||
---|---|---|
INSTALL | ||
c++tools | ||
config | ||
contrib | ||
fixincludes | ||
gcc | ||
gnattools | ||
gotools | ||
include | ||
intl | ||
libada | ||
libatomic | ||
libbacktrace | ||
libcc1 | ||
libcody | ||
libcpp | ||
libdecnumber | ||
libffi | ||
libgcc | ||
libgfortran | ||
libgo | ||
libgomp | ||
libiberty | ||
libitm | ||
libobjc | ||
liboffloadmic | ||
libphobos | ||
libquadmath | ||
libsanitizer | ||
libssp | ||
libstdc++-v3 | ||
libvtv | ||
lto-plugin | ||
maintainer-scripts | ||
zlib | ||
.dir-locals.el | ||
.gitattributes | ||
.gitignore | ||
ABOUT-NLS | ||
COPYING | ||
COPYING.LIB | ||
COPYING.RUNTIME | ||
COPYING3 | ||
COPYING3.LIB | ||
ChangeLog | ||
ChangeLog.jit | ||
ChangeLog.tree-ssa | ||
MAINTAINERS | ||
Makefile.def | ||
Makefile.in | ||
Makefile.tpl | ||
README | ||
ar-lib | ||
compile | ||
config-ml.in | ||
config.guess | ||
config.rpath | ||
config.sub | ||
configure | ||
configure.ac | ||
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 | ||
multilib.am | ||
symlink-tree | ||
test-driver | ||
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.