S/390: Add static OSC breaker if necessary.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Fri, 28 Oct 2016 12:31:37 +0000 (12:31 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 28 Oct 2016 12:31:37 +0000 (12:31 +0000)
commit539405d5541e31914995e5efbd4660ddf382f834
tree2c194d85a345839f86cb019c38ef6b0c569752ce
parent0dbb19f0f1542f9e61e599cbd25111f5de811929
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
gcc/ChangeLog
gcc/config/s390/s390.c
gcc/config/s390/s390.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/oscbreak-1.c [new file with mode: 0644]