Hi, these patches introduce a new predicate that recognizes shift-count operands instead of the subst patterns we used before. This allows introducing (no-op) subregs in the patterns which was not possible via subst before (see https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00853.html). The second patch adds some tests.
The third patch defines the shift_truncation_mask and adds a test for it. Bootstrapped and regtested. Regards Robin --- Robin Dapp (3): S/390: Rework shift count handling. S/390: Shift count tests. S/390: Define shift_truncation_mask. gcc/config/s390/constraints.md | 12 ++ gcc/config/s390/predicates.md | 29 +++++ gcc/config/s390/s390-protos.h | 1 + gcc/config/s390/s390.c | 59 +++++++++- gcc/config/s390/s390.md | 43 +++---- gcc/config/s390/subst.md | 72 ------------ gcc/config/s390/vector.md | 14 ++- .../gcc.target/s390/combine-rotate-modulo.c | 36 ++++++ .../s390/combine-shift-rotate-add-mod.c | 29 +++++ .../gcc.target/s390/vector/combine-shift-vec.c | 107 ++++++++++++++++++ .../gcc.target/s390/rotate-truncation-mask.c | 11 ++ 11 files changed, 314 insertions(+), 99 deletions(-) create mode 100644 gcc/testsuite/gcc.target/s390/combine-rotate-modulo.c create mode 100644 gcc/testsuite/gcc.target/s390/combine-shift-rotate-add-mod.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/combine-shift-vec.c create mode 100644 gcc/testsuite/gcc.target/s390/rotate-truncation-mask.c -- 2.17.0