diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2016-10-28 12:31:37 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2016-10-28 12:31:37 +0000 |
commit | 539405d5541e31914995e5efbd4660ddf382f834 (patch) | |
tree | 2c194d85a345839f86cb019c38ef6b0c569752ce /gcc/testsuite | |
parent | 0dbb19f0f1542f9e61e599cbd25111f5de811929 (diff) | |
download | gcc-539405d5541e31914995e5efbd4660ddf382f834.zip gcc-539405d5541e31914995e5efbd4660ddf382f834.tar.gz gcc-539405d5541e31914995e5efbd4660ddf382f834.tar.bz2 |
S/390: Add static OSC breaker if necessary.
This patch adds a magic OSC (operand store compare) break instruction
which is necessary if a store is followed closely by a load with same
base+indx+displ while either base or index get modified in between.
The patch improves several SpecCPU testcases running on IBM z13.
gcc/testsuite/ChangeLog:
2016-10-28 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/oscbreak-1.c: New test.
gcc/ChangeLog:
2016-10-28 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390.c (s390_adjust_loop_scan_osc): New function.
(s390_adjust_loops): New function.
(s390_reorg): Invoke s390_adjust_loops.
* config/s390/s390.md: (UNSPEC_OSC_BREAK): New constant.
("osc_break"): New insn definition.
From-SVN: r241644
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/oscbreak-1.c | 25 |
2 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 960d20e..a51fcf4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2016-10-28 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * gcc.target/s390/oscbreak-1.c: New test. + +2016-10-28 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * gcc.target/s390/target-attribute/tattr-m64-33.c: New test. 2016-10-28 Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/testsuite/gcc.target/s390/oscbreak-1.c b/gcc/testsuite/gcc.target/s390/oscbreak-1.c new file mode 100644 index 0000000..fdf356c --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/oscbreak-1.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -mtune=z13 -dp" } */ + +void +foo (char *a, int b) +{ + int i; + + for (i = 0; i < b; i++) + a[i] += 1; +} + +void +bar (char *a, int b) +{ + int i; + + for (i = 0; i < b; i++) + { + if (a[i] & 1) + a[i] = 1; + } +} + +/* { dg-final { scan-assembler "osc_break" } } */ |