0b76990a9d
This patch rewrites fwprop.c to use the RTL SSA framework. It tries as far as possible to mimic the old behaviour, even in caes where that doesn't fit naturally with the new framework. I've added ??? comments to mark those places, but I think “fixing” them should be done separately to make bisection easier. In particular: * The old implementation iterated over uses, and after a successful substitution, the new insn's uses were added to the end of the list. The pass still processed those uses, but because it processed them at the end, it didn't fully optimise one instruction before propagating it into the next. The new version follows the same approach for comparison purposes, but I'd like to drop that as a follow-on patch. * The old implementation operated on single use sites (DF_REF_LOCs). This doesn't work well for instructions with match_dups, where it's necessary to update both an operand and its dups at the same time. For example, attempting to substitute into a divmod instruction would fail because only the div or the mod side would be updated. The new version again follows this to some extent for comparison purposes (although not exactly). Again I'd like to drop it as a follow-on patch. One difference is that if a register occurs in multiple MEM addresses in a set, the new version will try to update them all at once. This is what causes the SVE ACLE st4* output to improve. Also, the old version didn't naturally guarantee termination (PR79405), whereas the new one does. gcc/ * fwprop.c: Rewrite to use the RTL SSA framework. gcc/testsuite/ * gcc.dg/rtl/x86_64/test-return-const.c.before-fwprop.c: Don't expect insn updates to be deferred. * gcc.target/aarch64/sve/acle/asm/st4_s8.c: Expect the addition to be folded into the address. * gcc.target/aarch64/sve/acle/asm/st4_u8.c: Likewise. |
||
---|---|---|
c++tools | ||
config | ||
contrib | ||
fixincludes | ||
gcc | ||
gnattools | ||
gotools | ||
include | ||
INSTALL | ||
intl | ||
libada | ||
libatomic | ||
libbacktrace | ||
libcc1 | ||
libcody | ||
libcpp | ||
libdecnumber | ||
libffi | ||
libgcc | ||
libgfortran | ||
libgo | ||
libgomp | ||
libhsail-rt | ||
libiberty | ||
libitm | ||
libobjc | ||
liboffloadmic | ||
libphobos | ||
libquadmath | ||
libsanitizer | ||
libssp | ||
libstdc++-v3 | ||
libvtv | ||
lto-plugin | ||
maintainer-scripts | ||
zlib | ||
.dir-locals.el | ||
.gitattributes | ||
.gitignore | ||
ABOUT-NLS | ||
ar-lib | ||
ChangeLog | ||
ChangeLog.jit | ||
ChangeLog.tree-ssa | ||
compile | ||
config-ml.in | ||
config.guess | ||
config.rpath | ||
config.sub | ||
configure | ||
configure.ac | ||
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 | ||
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.