GCC modified for the FreeChainXenon project
![]() This patch generalises the TFmode load/store pair patterns to TImode and TDmode. This brings them in line with the DXmode patterns, and uses the same technique with separate mode iterators (TX and TX2) to allow for distinct modes in each arm of the load/store pair. For example, in combination with the post-RA load/store pair fusion pass in the following patch, this improves the codegen for the following varargs testcase involving TImode stores: void g(void *); int foo(int x, ...) { __builtin_va_list ap; __builtin_va_start (ap, x); g(&ap); __builtin_va_end (ap); } from: foo: .LFB0: stp x29, x30, [sp, -240]! .LCFI0: mov w9, -56 mov w8, -128 mov x29, sp add x10, sp, 176 stp x1, x2, [sp, 184] add x1, sp, 240 add x0, sp, 16 stp x1, x1, [sp, 16] str x10, [sp, 32] stp w9, w8, [sp, 40] str q0, [sp, 48] str q1, [sp, 64] str q2, [sp, 80] str q3, [sp, 96] str q4, [sp, 112] str q5, [sp, 128] str q6, [sp, 144] str q7, [sp, 160] stp x3, x4, [sp, 200] stp x5, x6, [sp, 216] str x7, [sp, 232] bl g ldp x29, x30, [sp], 240 .LCFI1: ret to: foo: .LFB0: stp x29, x30, [sp, -240]! .LCFI0: mov w9, -56 mov w8, -128 mov x29, sp add x10, sp, 176 stp x1, x2, [sp, 1bd4971b7c71e70a637a1dq84] add x1, sp, 240 add x0, sp, 16 stp x1, x1, [sp, 16] str x10, [sp, 32] stp w9, w8, [sp, 40] stp q0, q1, [sp, 48] stp q2, q3, [sp, 80] stp q4, q5, [sp, 112] stp q6, q7, [sp, 144] stp x3, x4, [sp, 200] stp x5, x6, [sp, 216] str x7, [sp, 232] bl g ldp x29, x30, [sp], 240 .LCFI1: ret Note that this patch isn't neeed if we only use the mode canonicalization approach in the new ldp fusion pass (since we canonicalize T{I,F,D}mode to V16QImode), but we seem to get slightly better performance with mode canonicalization disabled (see --param=aarch64-ldp-canonicalize-modes in the following patch). gcc/ChangeLog: * config/aarch64/aarch64.md (load_pair_dw_tftf): Rename to ... (load_pair_dw_<TX:mode><TX2:mode>): ... this. (store_pair_dw_tftf): Rename to ... (store_pair_dw_<TX:mode><TX2:mode>): ... this. * config/aarch64/iterators.md (TX2): New. |
||
---|---|---|
c++tools | ||
config | ||
contrib | ||
fixincludes | ||
gcc | ||
gnattools | ||
gotools | ||
include | ||
INSTALL | ||
intl | ||
libada | ||
libatomic | ||
libbacktrace | ||
libcc1 | ||
libcody | ||
libcpp | ||
libdecnumber | ||
libffi | ||
libgcc | ||
libgfortran | ||
libgm2 | ||
libgo | ||
libgomp | ||
libiberty | ||
libitm | ||
libobjc | ||
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 | ||
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 | ||
Makefile.def | ||
Makefile.in | ||
Makefile.tpl | ||
missing | ||
mkdep | ||
mkinstalldirs | ||
move-if-change | ||
multilib.am | ||
README | ||
SECURITY.txt | ||
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.