[PATCH v4 0/7] S/390: Use signaling FP comparison instructions
Ilya Leoshkevich
iii@linux.ibm.com
Tue Oct 1 13:27:00 GMT 2019
Bootstrapped and regtested on s390x-redhat-linux, x86_64-redhat-linux,
ppc64le-redhat-linux.
This patch series adds signaling FP comparison support (both scalar and
vector) to s390 backend.
Patches 1-3 make it possible to query supported vcond rtxes and make
use of that for z13.
Patches 4-5 are preparation cleanups.
Patch 6 is an actual implementation.
Path 7 contains new tests, that make sure autovectorized comparisons use
proper instructions.
Ilya Leoshkevich (7):
Allow COND_EXPR and VEC_COND_EXPR condtions to trap
Introduce can_vcond_compare_p function
S/390: Do not use signaling vector comparisons on z13
S/390: Implement vcond expander for V1TI,V1TF
S/390: Remove code duplication in vec_* comparison expanders
S/390: Use signaling FP comparison instructions
S/390: Test signaling FP comparison instructions
v1->v2:
Improve wording in documentation commit message.
Replace hook with optabs query.
Add signaling eq test.
v2->v3:
Allow COND_EXPR and VEC_COND_EXPR conditions to throw, while making
sure that GIMPLE_COND's condition still cannot throw.
Remove documentation patch (superseded by
https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=275303).
Add PR target/77918 reference.
v3->v4:
Committed alloca and vec_unordered bits separately.
Fixed issues in in gimple_could_trap_p_1.
Dropped unnecessary gimple_ternary_operands_ok_p.
Simplified vcondv1tiv1tf implementation.
Improved VEC_CMP_EXPAND naming.
Improved can_vcond_compare_p naming and streamlined implementation.
gcc/config/s390/2827.md | 14 +-
gcc/config/s390/2964.md | 13 +-
gcc/config/s390/3906.md | 17 +-
gcc/config/s390/8561.md | 19 +-
gcc/config/s390/s390-builtins.def | 16 +-
gcc/config/s390/s390-modes.def | 8 +
gcc/config/s390/s390.c | 38 ++-
gcc/config/s390/s390.md | 14 +
gcc/config/s390/vector.md | 260 ++++++++++++------
gcc/gimple-expr.c | 25 +-
gcc/gimple-expr.h | 1 +
gcc/gimple.c | 14 +-
gcc/gimplify.c | 5 +-
gcc/optabs-tree.c | 37 ++-
gcc/optabs.c | 38 ++-
gcc/optabs.h | 7 +
gcc/testsuite/gcc.target/s390/s390.exp | 8 +
.../gcc.target/s390/vector/vec-scalar-cmp-1.c | 8 +-
.../s390/zvector/autovec-double-quiet-eq.c | 8 +
.../s390/zvector/autovec-double-quiet-ge.c | 8 +
.../s390/zvector/autovec-double-quiet-gt.c | 8 +
.../s390/zvector/autovec-double-quiet-le.c | 8 +
.../s390/zvector/autovec-double-quiet-lt.c | 8 +
.../zvector/autovec-double-quiet-ordered.c | 10 +
.../s390/zvector/autovec-double-quiet-uneq.c | 10 +
.../zvector/autovec-double-quiet-unordered.c | 11 +
.../autovec-double-signaling-eq-z13-finite.c | 10 +
.../zvector/autovec-double-signaling-eq-z13.c | 9 +
.../zvector/autovec-double-signaling-eq.c | 11 +
.../autovec-double-signaling-ge-z13-finite.c | 10 +
.../zvector/autovec-double-signaling-ge-z13.c | 9 +
.../zvector/autovec-double-signaling-ge.c | 8 +
.../autovec-double-signaling-gt-z13-finite.c | 10 +
.../zvector/autovec-double-signaling-gt-z13.c | 9 +
.../zvector/autovec-double-signaling-gt.c | 8 +
.../autovec-double-signaling-le-z13-finite.c | 10 +
.../zvector/autovec-double-signaling-le-z13.c | 9 +
.../zvector/autovec-double-signaling-le.c | 8 +
.../autovec-double-signaling-lt-z13-finite.c | 10 +
.../zvector/autovec-double-signaling-lt-z13.c | 9 +
.../zvector/autovec-double-signaling-lt.c | 8 +
...autovec-double-signaling-ltgt-z13-finite.c | 9 +
.../autovec-double-signaling-ltgt-z13.c | 9 +
.../zvector/autovec-double-signaling-ltgt.c | 9 +
.../s390/zvector/autovec-double-smax-z13.F90 | 11 +
.../s390/zvector/autovec-double-smax.F90 | 8 +
.../s390/zvector/autovec-double-smin-z13.F90 | 11 +
.../s390/zvector/autovec-double-smin.F90 | 8 +
.../s390/zvector/autovec-float-quiet-eq.c | 8 +
.../s390/zvector/autovec-float-quiet-ge.c | 8 +
.../s390/zvector/autovec-float-quiet-gt.c | 8 +
.../s390/zvector/autovec-float-quiet-le.c | 8 +
.../s390/zvector/autovec-float-quiet-lt.c | 8 +
.../zvector/autovec-float-quiet-ordered.c | 10 +
.../s390/zvector/autovec-float-quiet-uneq.c | 10 +
.../zvector/autovec-float-quiet-unordered.c | 11 +
.../s390/zvector/autovec-float-signaling-eq.c | 11 +
.../s390/zvector/autovec-float-signaling-ge.c | 8 +
.../s390/zvector/autovec-float-signaling-gt.c | 8 +
.../s390/zvector/autovec-float-signaling-le.c | 8 +
.../s390/zvector/autovec-float-signaling-lt.c | 8 +
.../zvector/autovec-float-signaling-ltgt.c | 9 +
.../gcc.target/s390/zvector/autovec-fortran.h | 7 +
.../autovec-long-double-signaling-ge.c | 8 +
.../autovec-long-double-signaling-gt.c | 8 +
.../autovec-long-double-signaling-le.c | 8 +
.../autovec-long-double-signaling-lt.c | 8 +
.../gcc.target/s390/zvector/autovec.h | 41 +++
gcc/tree-eh.c | 8 +
gcc/tree-ssa-forwprop.c | 7 +-
70 files changed, 881 insertions(+), 153 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-eq.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-ge.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-gt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-le.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-lt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-ordered.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-uneq.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-unordered.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-eq-z13-finite.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-eq-z13.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-eq.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ge-z13-finite.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ge-z13.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ge.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-gt-z13-finite.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-gt-z13.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-gt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-le-z13-finite.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-le-z13.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-le.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-lt-z13-finite.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-lt-z13.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-lt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ltgt-z13-finite.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ltgt-z13.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ltgt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smax-z13.F90
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smax.F90
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smin-z13.F90
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smin.F90
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-eq.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-ge.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-gt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-le.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-lt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-ordered.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-uneq.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-unordered.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-eq.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-ge.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-gt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-le.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-lt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-ltgt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-fortran.h
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-ge.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-gt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-le.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-lt.c
create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec.h
--
2.23.0
More information about the Gcc-patches
mailing list