aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2016-10-28 12:31:37 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2016-10-28 12:31:37 +0000
commit539405d5541e31914995e5efbd4660ddf382f834 (patch)
tree2c194d85a345839f86cb019c38ef6b0c569752ce /gcc/testsuite
parent0dbb19f0f1542f9e61e599cbd25111f5de811929 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/s390/oscbreak-1.c25
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" } } */