![]() In a later patch, I need to add "@" to a pattern that uses subst attributes. This combination is problematic for two reasons: (1) define_substs are applied and filtered at a later stage than the handling of "@" patterns, so that the handling of "@" patterns doesn't know which subst variants are valid and which will later be dropped. Just adding a "@" therefore triggers a build error due to references to non-existent patterns. (2) Currently, the code will treat a single "@" pattern as contributing to a single set of overloaded functions. These overloaded functions will have an integer argument for every subst attribute. For example, the vczle and vczbe in: "@aarch64_rev<REVERSE:rev_op><mode><vczle><vczbe>" are subst attributes, and so currently we'd try to generate a single set of overloads that take four arguments: one for rev_op, one for the mode, one for vczle, and one for vczbe. The gen_* and maybe_gen_* functions will also have one rtx argument for each operand in the original pattern. This model doesn't really make sense for define_substs, since define_substs are allowed to add extra operands to an instruction. The number of rtx operands to the generators would then be incorrect. I think a more sensible way of handling define_substs would be to apply them first (and thus expand things like <vczle> and <vczbe> above) and then apply "@". However, that's a relatively invasive change and not suitable for stage 3. This patch instead skips over subst attributes and restricts "@" overload handling to the cases where no define_subst is applied. I looked through all uses of "@" names in target code and there seemed to be only one current use of "@" with define_substs, in x86 vector code. The current behaviour seemed to be unwanted there, and the x86 code was having to work around it. gcc/ * read-rtl.cc (md_reader::handle_overloaded_name): Don't add arguments for uses of subst attributes. (apply_iterators): Only add instructions to an overloaded helper if they use the default subst iterator values. * doc/md.texi: Update documentation accordingly. * config/i386/i386-expand.cc (expand_vec_perm_broadcast_1): Update accordingly. |
||
---|---|---|
.forgejo | ||
.github | ||
c++tools | ||
config | ||
contrib | ||
fixincludes | ||
gcc | ||
gnattools | ||
gotools | ||
include | ||
INSTALL | ||
libada | ||
libatomic | ||
libbacktrace | ||
libcc1 | ||
libcody | ||
libcpp | ||
libdecnumber | ||
libffi | ||
libgcc | ||
libgfortran | ||
libgm2 | ||
libgo | ||
libgomp | ||
libgrust | ||
libiberty | ||
libitm | ||
libobjc | ||
libphobos | ||
libquadmath | ||
libsanitizer | ||
libssp | ||
libstdc++-v3 | ||
libvtv | ||
lto-plugin | ||
maintainer-scripts | ||
zlib | ||
.b4-config | ||
.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.