Kewen Lin f4a3cea3fb rs6000: Use rldimi for vec init instead of shift + ior
This patch is to teach unsigned int vector init to use rldimi to
merge two integers instead of shift and ior.  It also adds one
required splitter made by Segher.

An rl*imi is usually written as an IOR of an ASHIFT or similar, and
an AND of a register with a constant mask.  In some cases combine
knows that that AND doesn't do anything (because all zero bits in
that mask correspond to bits known to be already zero), and then no
pattern matches.  This patch adds a define_split for such cases.

It uses nonzero_bits in the condition of the splitter, but does not
need it afterwards for the instruction to be recognised.  This is
necessary because later passes can see fewer nonzero_bits.

Because it is a splitter, combine will only use it when starting with
three insns (or more), even though the result is just one.  This isn't
a huge problem in practice, but some possible combinations still won't
happen.

Bootstrapped/regtested on powerpc64le-linux-gnu P9 and
powerpc64-linux-gnu P8, also SPEC2017 build/run passed on P9.

gcc/ChangeLog:

2020-02-23  Segher Boessenkool  <segher@kernel.crashing.org>
	    Kewen Lin  <linkw@gcc.gnu.org>

	* config/rs6000/rs6000.md (*rotl<mode>3_insert_3): Renamed to...
	(rotl<mode>3_insert_3): ...this.
	(plus_ior_xor): New code_iterator.
	(define_split for GPR rl*imi): New splitter.
	* config/rs6000/vsx.md (vsx_init_v4si): Use gen_rotldi3_insert_3
	for integer merging.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/vec-init-10.c: New test.
2021-02-22 23:44:05 -06:00
2021-01-06 00:16:55 +00:00
2021-01-06 00:16:55 +00:00
2021-02-09 00:16:30 +00:00
2020-12-15 00:16:35 +00:00
2021-02-03 00:16:23 +00:00
2021-01-17 00:16:23 +00:00
2021-01-04 10:26:59 +01:00
2021-01-16 00:16:29 +00:00
2021-02-13 00:16:38 +00:00
2021-01-06 00:16:55 +00:00
2021-01-13 00:16:36 +00:00
2021-02-20 00:16:26 +00:00
2021-01-04 10:26:59 +01:00
2021-01-06 00:16:55 +00:00
2021-02-23 00:16:34 +00:00
2021-02-13 00:16:38 +00:00
2021-02-19 12:33:25 -08:00
2021-02-23 00:16:34 +00:00
2021-01-06 00:16:55 +00:00
2021-02-21 00:16:18 +00:00
2021-01-16 00:16:29 +00:00
2021-01-06 00:16:55 +00:00
2021-01-06 00:16:55 +00:00
2021-02-05 00:16:23 +00:00
2021-01-06 00:16:55 +00:00
2021-01-27 00:16:33 +00:00
2021-01-06 00:16:55 +00:00
2021-01-06 00:16:55 +00:00
2021-01-06 00:16:55 +00:00
2020-12-17 00:16:37 +00:00
2021-01-06 00:16:55 +00:00
2020-12-02 11:04:01 -07:00
2021-01-26 00:16:34 +00:00
2020-12-15 07:42:59 -08:00
2020-12-15 07:42:59 -08:00
2021-01-05 16:04:14 -07:00
2020-12-15 07:42:59 -08:00

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.
Description
No description provided
Readme 2.1 GiB
Languages
C++ 31.9%
C 31.3%
Ada 12%
D 6.5%
Go 6.4%
Other 11.5%