r243169 - in /branches/gcc-5-branch/gcc: Change...

krebbel@gcc.gnu.org krebbel@gcc.gnu.org
Fri Dec 2 08:52:00 GMT 2016


Author: krebbel
Date: Fri Dec  2 08:51:58 2016
New Revision: 243169

URL: https://gcc.gnu.org/viewcvs?rev=243169&root=gcc&view=rev
Log:
S/390: Fix vector all/any cc modes.

This fixes a problem with the vector compares producing CC mode
results.

The instructions produce condition code modes which can be either
interpreted to check an ALL elements or an ANY element result.  As the
modes where used before they could not be inverted by the middle-end
by inverting the comparison code (e.g. eq to ne).  The result usually
was just wrong.

In fact inverting a comparison code on an CCVALL mode would require to
also change the mode to CCVANY but this cannot be done easily in the
middle-end.  With this patch the meaning of an ALL cc mode only refers
to the not-inverted comparison code (e.g. eq, gt, ge).  With that
change inverting the comparison code matches a not operation on the
condition code mask again.

Bootstrapped and regression tested on s390 and s390x.

Bye,

-Andreas-

gcc/testsuite/ChangeLog:

2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	Backport from mainline
	2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.target/s390/vector/vec-scalar-cmp-1.c: Fix and harden the
	pattern checks.
	* gcc.target/s390/zvector/vec-cmp-1.c: New test.

gcc/ChangeLog:

2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	Backport from mainline
	2016-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390-modes.def (CCVEQANY, CCVH, CCVHANY, CCVHU)
	(CCVHUANY): Remove modes.
	(CCVIH, CCVIHU, CCVIALL, CCVIANY, CCVFALL, CCVFANY): Add modes and
	documentation.
	* config/s390/s390.c (s390_match_ccmode_set): Rename cc modes.
	(s390_expand_vec_compare_scalar): Pick one of the cc consumer
	modes.
	(s390_branch_condition_mask): Adjust to use the new cc consumer
	modes.  The new modes allow for proper reversal in the middle-end.
	(s390_expand_vec_compare_cc): Determine the proper cc producer and
	consumer modes for a comparison.
	* config/s390/s390.md: Rename CCVH to CCVIH and CCVHU to CCVIHU
	throughout the file.
	* config/s390/vx-builtins.md: Likewise.


Added:
    branches/gcc-5-branch/gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c
Modified:
    branches/gcc-5-branch/gcc/ChangeLog
    branches/gcc-5-branch/gcc/config/s390/s390-modes.def
    branches/gcc-5-branch/gcc/config/s390/s390.c
    branches/gcc-5-branch/gcc/config/s390/s390.md
    branches/gcc-5-branch/gcc/config/s390/vx-builtins.md
    branches/gcc-5-branch/gcc/testsuite/ChangeLog
    branches/gcc-5-branch/gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c



More information about the Gcc-cvs mailing list