diff options
author | Andreas Krebbel <krebbel@gcc.gnu.org> | 2016-01-13 11:59:29 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2016-01-13 11:59:29 +0000 |
commit | 9060e33505bda4d9d9301e26f7962d347cf79c9d (patch) | |
tree | 3fd86bc7b0c6922b245f4dda10f3a7309e67037e /gcc | |
parent | e862906c2505cab2bd31a76e34b882807d0db9fa (diff) | |
download | gcc-9060e33505bda4d9d9301e26f7962d347cf79c9d.zip gcc-9060e33505bda4d9d9301e26f7962d347cf79c9d.tar.gz gcc-9060e33505bda4d9d9301e26f7962d347cf79c9d.tar.bz2 |
S/390: PR69247: Fix bswap hi splitter.
gcc/ChangeLog:
2016-01-13 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/69247
* config/s390/s390.md (bswaphi splitter): Use simplify_gen_subreg.
gcc/testsuite/ChangeLog:
2016-01-13 Jakub Jelinek <jakub@redhat.com>
PR target/69247
* gcc.dg/pr69247.c: New test.
From-SVN: r232318
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr69247.c | 14 |
4 files changed, 26 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7e3601..ab61dff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-01-13 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + + PR target/69247 + * config/s390/s390.md (bswaphi splitter): Use simplify_gen_subreg. + 2016-01-13 Richard Biener <rguenther@suse.de> PR tree-optimization/69242 diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index d6097c1..3e340c3 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -10522,11 +10522,9 @@ (bswap:HI (match_operand:HI 1 "register_operand" "")))] "TARGET_CPU_ZARCH" [(set (match_dup 2) (bswap:SI (match_dup 3))) - (set (match_dup 2) (lshiftrt:SI (match_dup 2) - (const_int 16))) - (set (match_dup 0) (subreg:HI (match_dup 2) 2))] + (set (match_dup 2) (lshiftrt:SI (match_dup 2) (const_int 16)))] { - operands[2] = gen_reg_rtx (SImode); + operands[2] = simplify_gen_subreg (SImode, operands[0], HImode, 0); operands[3] = simplify_gen_subreg (SImode, operands[1], HImode, 0); }) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4568a636..59596d0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-13 Jakub Jelinek <jakub@redhat.com> + + PR target/69247 + * gcc.dg/pr69247.c: New test. + 2016-01-13 Richard Biener <rguenther@suse.de> PR tree-optimization/69242 diff --git a/gcc/testsuite/gcc.dg/pr69247.c b/gcc/testsuite/gcc.dg/pr69247.c new file mode 100644 index 0000000..b7406e6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69247.c @@ -0,0 +1,14 @@ +/* PR target/69247 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-additional-options "-march=zEC12" { target s390*-*-* } } */ + +void foo (short *); + +void +bar (short x, int y) +{ + if (y) + x = x << 8 | (unsigned short) x >> 8; + foo (&x); +} |