Bootstrap and regtest running on x86_64-redhat-linux and s390x-redhat-linux.
This patch series adds signaling FP comparison support (both scalar and vector) to s390 backend. Patch 1 documents the current behavior of MIN, MAX and LTGT operations with respect to signaling. Patches 2-4 make it possible to query supported vcond rtxes and make use of that for z13. Patches 5-7 are preparation cleanups. Patch 8 is an actual implementation. Path 9 contains new tests, that make sure autovectorized comparisons use proper instructions. Ilya Leoshkevich (9): Document signaling for min, max and ltgt operations hash_traits: split pointer_hash_mark from pointer_hash Introduce can_vector_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_unordered<mode> 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. gcc/Makefile.in | 2 +- 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 | 283 ++++++++++++------ gcc/cp/decl2.c | 14 +- gcc/doc/generic.texi | 16 +- gcc/doc/md.texi | 3 +- gcc/doc/rtl.texi | 3 +- gcc/hash-traits.h | 74 +++-- gcc/ipa-prop.c | 47 +-- gcc/optabs-tree.c | 11 +- gcc/optabs.c | 79 +++++ gcc/optabs.h | 15 + 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 +++ 71 files changed, 946 insertions(+), 233 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.21.0