PR target/77822: S390: Validate argument range of {zero,sign}_extract.
authorDominik Vogt <vogt@linux.vnet.ibm.com>
Fri, 2 Dec 2016 08:30:16 +0000 (08:30 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 2 Dec 2016 08:30:16 +0000 (08:30 +0000)
commit0f6f72e80525f14e91d4d1ee6d3bd91fd7c96859
tree8f6736b8478f662ac5b9ec7843dbc636b64598e5
parent8f61415f1f776d35f0d616bd662019a659a6e536
PR target/77822: S390: Validate argument range of {zero,sign}_extract.

With some undefined code, combine generates patterns where the arguments to
*_extract are out of range, e.b. a negative bit position.  If the s390 backend
accepts these, they lead to not just undefined behaviour but invalid assembly
instructions (argument out of the allowed range).  So this patch makes sure
that the rtl expressions with out of range arguments are rejected.

gcc/ChangeLog:

2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>

PR target/77822
* config/s390/s390.md ("extzv")
("*extzv<mode><clobbercc_or_nocc>")
("*extzvdi<clobbercc_or_nocc>_lshiftrt")
("*<risbg_n>_ior_and_sr_ze")
("*extract1bitdi<clobbercc_or_nocc>")
("*insv<mode><clobbercc_or_nocc>", "*insv_rnsbg_noshift")
("*insv_rnsbg_srl", "*insv<mode>_mem_reg")
("*insvdi_mem_reghigh", "*insvdi_reg_imm"): Use EXTRACT_ARGS_IN_RANGE
to validate the arguments of zero_extract and sign_extract.

gcc/testsuite/ChangeLog:

2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>

PR target/77822
* gcc.target/s390/s390.exp: Support .C tests.
* gcc.target/s390/pr77822-2.c: New test.
* gcc.target/s390/pr77822-1.C: New test.

From-SVN: r243160
gcc/ChangeLog
gcc/config/s390/s390.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/pr77822-1.C [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/pr77822-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/s390.exp