mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-09-19 13:24:25 +00:00
No description
- C++ 30.8%
- C 30.4%
- Ada 14.2%
- D 6%
- Go 5.6%
- Other 12.5%
Currently, if we compile with vector support and we cannot straight-line expand a memset using vectors, the expander fails and we don't fall back to the by-pieces infrastructure but to a libcall instead. That's because the guard is more permissive than the actual expander. But even if they agree, memset of a nonzero value expands to a libcall because by-pieces refuses a 5-insn synthesized splat constant. This patch adds two things: - A testing_p param for memset expansion that asks the expanders to not emit any code but just report if they could expand. This is used in riscv_use_by_pieces_infrastructure_p to decide whether or not to fall back to by-pieces. - A scalar memset expander for nonzero values and known lengths. The implementation is intentionally kept simple for now and just stores splatted Pmode values when unaligned accesses are fast. gcc/ChangeLog: * config/riscv/riscv-protos.h (riscv_expand_block_clear): Remove. (expand_vec_setmem): Add testing param. (riscv_expand_setmem): Likewise. * config/riscv/riscv-string.cc (riscv_expand_block_clear_zicboz_zic64b): Likewise. (riscv_expand_block_clear): Make static. (expand_scalar_setmem): New function. (riscv_expand_setmem): New function. (expand_vec_setmem): Add testing param. * config/riscv/riscv.cc (riscv_use_by_pieces_infrastructure_p): Query riscv_expand_setmem for support. * config/riscv/riscv.md: Use riscv_expand_setmem. gcc/testsuite/ChangeLog: * gcc.target/riscv/setmem-nolibcall.c: New test. * gcc.target/riscv/setmem-scalar-32.c: New test. * gcc.target/riscv/setmem-scalar-64.c: New test. * gcc.target/riscv/setmem-scalar-run.c: New test. |
||
|---|---|---|
| .forgejo | ||
| .github | ||
| c++tools | ||
| config | ||
| contrib | ||
| fixincludes | ||
| gcc | ||
| gnattools | ||
| gotools | ||
| include | ||
| INSTALL | ||
| libada | ||
| libatomic | ||
| libbacktrace | ||
| libcc1 | ||
| libcody | ||
| libcpp | ||
| libdecnumber | ||
| libffi | ||
| libga68 | ||
| libgcc | ||
| libgcobol | ||
| 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 | ||
| .editorconfig | ||
| .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 | ||
| MAINTAINERS.yml | ||
| Makefile.def | ||
| Makefile.in | ||
| Makefile.tpl | ||
| missing | ||
| mkdep | ||
| mkinstalldirs | ||
| move-if-change | ||
| multilib.am | ||
| pyproject.toml | ||
| 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.