diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2018-04-06 07:45:42 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2018-04-06 07:45:42 +0000 |
commit | aad98a61044276f322dbdb9876e83ead7d8a9e60 (patch) | |
tree | a9298538dcca93788364c3e520d19d6cc4791028 /gcc | |
parent | bce89076ce03ff9bcf89362477cff548a585bcdd (diff) | |
download | gcc-aad98a61044276f322dbdb9876e83ead7d8a9e60.zip gcc-aad98a61044276f322dbdb9876e83ead7d8a9e60.tar.gz gcc-aad98a61044276f322dbdb9876e83ead7d8a9e60.tar.bz2 |
IBM Z: Use the dedicated NOP instructions for "nop"
We still use lr r0,r0 as a NOP instruction although we have some kind
of dedicated NOP instruction (nopr) which maps to a "branch never".
As a side-effect this fixes testcases scanning for NOPs
e.g. patchable_function_entry-*.
As another side-effect this makes it difficult to distingiush NOPs
generated for hotpatching from NOPs added when using -O0 to attach
location information to it. Hence I had to make sure that the hotpatch
testcases get skipped when compiling without optimization.
gcc/ChangeLog:
2018-04-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390.c (s390_z10_optimize_cmp): Expand dedicated NOP
instructions.
* config/s390/s390.md (UNSPECV_NOP_LR_0, UNSPECV_NOP_LR_1): New
constant definitions.
("nop"): lr 0,0 -> nopr r0
("nop_lr0", "nop_lr1"): New insn definitions.
gcc/testsuite/ChangeLog:
2018-04-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/s390.exp: Remove -O0 from list of torture
options.
* gcc.target/s390/hotpatch-1.c: Skip when building without
optimization.
* gcc.target/s390/hotpatch-10.c: Likewise.
* gcc.target/s390/hotpatch-11.c: Likewise.
* gcc.target/s390/hotpatch-12.c: Likewise.
* gcc.target/s390/hotpatch-13.c: Likewise.
* gcc.target/s390/hotpatch-14.c: Likewise.
* gcc.target/s390/hotpatch-15.c: Likewise.
* gcc.target/s390/hotpatch-16.c: Likewise.
* gcc.target/s390/hotpatch-17.c: Likewise.
* gcc.target/s390/hotpatch-18.c: Likewise.
* gcc.target/s390/hotpatch-19.c: Likewise.
* gcc.target/s390/hotpatch-2.c: Likewise.
* gcc.target/s390/hotpatch-3.c: Likewise.
* gcc.target/s390/hotpatch-4.c: Likewise.
* gcc.target/s390/hotpatch-5.c: Likewise.
* gcc.target/s390/hotpatch-6.c: Likewise.
* gcc.target/s390/hotpatch-7.c: Likewise.
* gcc.target/s390/hotpatch-8.c: Likewise.
* gcc.target/s390/hotpatch-9.c: Likewise.
From-SVN: r259164
Diffstat (limited to 'gcc')
24 files changed, 77 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0929270..f96b375 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-04-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + + * config/s390/s390.c (s390_z10_optimize_cmp): Expand dedicated NOP + instructions. + * config/s390/s390.md (UNSPECV_NOP_LR_0, UNSPECV_NOP_LR_1): New + constant definitions. + ("nop"): lr 0,0 -> nopr r0 + ("nop_lr0", "nop_lr1"): New insn definitions. + 2018-04-06 Chung-Ju Wu <jasonwucj@gmail.com> * config/nds32/nds32.md (*stack_push, *stack_pop): Use diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 51adb0d..59f5de9 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -14376,9 +14376,9 @@ s390_z10_optimize_cmp (rtx_insn *insn) && s390_non_addr_reg_read_p (*op0, prev_insn)) { if (REGNO (*op1) == 0) - emit_insn_after (gen_nop1 (), insn); + emit_insn_after (gen_nop_lr1 (), insn); else - emit_insn_after (gen_nop (), insn); + emit_insn_after (gen_nop_lr0 (), insn); insn_added_p = true; } else diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 5481f13..c4d391b 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -267,6 +267,10 @@ UNSPECV_CAS UNSPECV_ATOMIC_OP + ; Non-branch nops used for compare-and-branch adjustments on z10 + UNSPECV_NOP_LR_0 + UNSPECV_NOP_LR_1 + ; Hotpatching (unremovable NOPs) UNSPECV_NOP_2_BYTE UNSPECV_NOP_4_BYTE @@ -10998,12 +11002,21 @@ (define_insn "nop" [(const_int 0)] "" + "nopr\t%%r0" + [(set_attr "op_type" "RR")]) + +; non-branch NOPs required for optimizing compare-and-branch patterns +; on z10 + +(define_insn "nop_lr0" + [(unspec_volatile [(const_int 0)] UNSPECV_NOP_LR_0)] + "" "lr\t0,0" [(set_attr "op_type" "RR") (set_attr "z10prop" "z10_fr_E1")]) -(define_insn "nop1" - [(const_int 1)] +(define_insn "nop_lr1" + [(unspec_volatile [(const_int 0)] UNSPECV_NOP_LR_1)] "" "lr\t1,1" [(set_attr "op_type" "RR")]) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e47998..9755321 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,30 @@ 2018-04-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * gcc.target/s390/s390.exp: Remove -O0 from list of torture + options. + * gcc.target/s390/hotpatch-1.c: Skip when building without + optimization. + * gcc.target/s390/hotpatch-10.c: Likewise. + * gcc.target/s390/hotpatch-11.c: Likewise. + * gcc.target/s390/hotpatch-12.c: Likewise. + * gcc.target/s390/hotpatch-13.c: Likewise. + * gcc.target/s390/hotpatch-14.c: Likewise. + * gcc.target/s390/hotpatch-15.c: Likewise. + * gcc.target/s390/hotpatch-16.c: Likewise. + * gcc.target/s390/hotpatch-17.c: Likewise. + * gcc.target/s390/hotpatch-18.c: Likewise. + * gcc.target/s390/hotpatch-19.c: Likewise. + * gcc.target/s390/hotpatch-2.c: Likewise. + * gcc.target/s390/hotpatch-3.c: Likewise. + * gcc.target/s390/hotpatch-4.c: Likewise. + * gcc.target/s390/hotpatch-5.c: Likewise. + * gcc.target/s390/hotpatch-6.c: Likewise. + * gcc.target/s390/hotpatch-7.c: Likewise. + * gcc.target/s390/hotpatch-8.c: Likewise. + * gcc.target/s390/hotpatch-9.c: Likewise. + +2018-04-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * c-c++-common/Wattributes.c: Disable warning for s390* target and check for an error instead. * gcc.dg/Wattributes-6.c: Likewise. diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-1.c b/gcc/testsuite/gcc.target/s390/hotpatch-1.c index 5f0f2e1..67e101e 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-1.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-1.c @@ -3,6 +3,13 @@ /* { dg-do compile } */ /* { dg-options "-mzarch" } */ +/* Without optimization extra NOPs will be added just to attach + location info to it. Don't run the test in that case. The torture + framework always appears to run the testcase without -O option + first. */ + +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ + #include <stdio.h> void hp1(void) diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-10.c b/gcc/testsuite/gcc.target/s390/hotpatch-10.c index 2308d33..21d499e 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-10.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-10.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,0" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-11.c b/gcc/testsuite/gcc.target/s390/hotpatch-11.c index 56b3596..a37f311 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-11.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-11.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=1,0" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-12.c b/gcc/testsuite/gcc.target/s390/hotpatch-12.c index 8a91c1b..cb8d152 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-12.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-12.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=999,0" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-13.c b/gcc/testsuite/gcc.target/s390/hotpatch-13.c index 70fab74..fb037c2 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-13.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-13.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-14.c b/gcc/testsuite/gcc.target/s390/hotpatch-14.c index 389bf42..fd0368a 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-14.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-14.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-15.c b/gcc/testsuite/gcc.target/s390/hotpatch-15.c index 0b10fb1..a1c3e7c 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-15.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-15.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-16.c b/gcc/testsuite/gcc.target/s390/hotpatch-16.c index 2fcdf1c..737c3a1 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-16.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-16.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,0" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-17.c b/gcc/testsuite/gcc.target/s390/hotpatch-17.c index 299f825..6d8c40c 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-17.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-17.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=1,2" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-18.c b/gcc/testsuite/gcc.target/s390/hotpatch-18.c index fd44d11..02807ff 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-18.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-18.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=1,2 -mhotpatch=0,0" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-19.c b/gcc/testsuite/gcc.target/s390/hotpatch-19.c index 899e000..71c2ed1 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-19.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-19.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=1,2" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-2.c b/gcc/testsuite/gcc.target/s390/hotpatch-2.c index 99fe911..ece6cb3 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-2.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-2.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,1" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-3.c b/gcc/testsuite/gcc.target/s390/hotpatch-3.c index 20f43c6b..65ebe35 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-3.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-3.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,2" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-4.c b/gcc/testsuite/gcc.target/s390/hotpatch-4.c index 32a3c03..d0956f1 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-4.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-4.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,3" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-5.c b/gcc/testsuite/gcc.target/s390/hotpatch-5.c index 72ee5a3..64d49ee 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-5.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-5.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,4" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-6.c b/gcc/testsuite/gcc.target/s390/hotpatch-6.c index 1e1d0e6..e6753c8 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-6.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-6.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,5" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-7.c b/gcc/testsuite/gcc.target/s390/hotpatch-7.c index 3f60e61..3f1c9f0 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-7.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-7.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-mzarch -mhotpatch=0,6" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-8.c b/gcc/testsuite/gcc.target/s390/hotpatch-8.c index 012a4eb..a2fb83f 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-8.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-8.c @@ -2,6 +2,7 @@ /* { dg-do compile { target { ! lp64 } } } */ /* { dg-options "-mesa -march=g5 -Wno-deprecated -mhotpatch=0,3" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-9.c b/gcc/testsuite/gcc.target/s390/hotpatch-9.c index b7d557e..34fae55 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-9.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-9.c @@ -2,6 +2,7 @@ /* { dg-do compile { target { ! lp64 } } } */ /* { dg-options "-mesa -march=g5 -Wno-deprecated -mhotpatch=0,4" } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */ #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp index 63e1a4c..bb13bfd 100644 --- a/gcc/testsuite/gcc.target/s390/s390.exp +++ b/gcc/testsuite/gcc.target/s390/s390.exp @@ -220,7 +220,7 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/md/*.{c,S,C}]] \ # Additional hotpatch torture tests. torture-init -set-torture-options [list -Os -O0 -O1 -O2 -O3] +set-torture-options [list -Os -O1 -O2 -O3] gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/hotpatch-\[0-9\]*.c]] \ "" $DEFAULT_CFLAGS torture-finish |