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
- gcc.target/s390/oscbreak-1.c: New test.
gcc/ChangeLog:
2016-10-28 Andreas Krebbel
- 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.
987860a S/390: Add static OSC breaker if necessary.
gcc/ChangeLog | 8 ++
gcc/config/s390/s390.c | 152 ++++++++++++++++++++++++++++
gcc/config/s390/s390.md | 8 ++
gcc/testsuite/ChangeLog | 4 +
gcc/testsuite/gcc.target/s390/oscbreak-1.c | 25 +++++
5 files changed, 197 insertions(+)
Upstream: gcc.gnu.org