diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2015-12-02 07:55:40 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2015-12-02 07:55:40 +0000 |
commit | b0057efd3030267c324d1019786a428fd61b5de9 (patch) | |
tree | 350f6c089d2297c2fac47e42d5c475fd621ecebd /gcc/config/s390/constraints.md | |
parent | a4a443cee2ea9c2db55e2802d46a4d5b6cbe1784 (diff) | |
download | gcc-b0057efd3030267c324d1019786a428fd61b5de9.zip gcc-b0057efd3030267c324d1019786a428fd61b5de9.tar.gz gcc-b0057efd3030267c324d1019786a428fd61b5de9.tar.bz2 |
S/390: Enable vrepi constants.
gcc/testsuite/ChangeLog:
2015-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/vector/vec-vrepi-1.c: New test.
gcc/ChangeLog:
2015-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/constraints.md ("jKK"): New constraint.
* config/s390/s390.c (tm-constrs.h): Include for
satisfies_constraint_*.
(s390_legitimate_constant_p): Allow jKK constants. Use
satisfies_constraint_* also for the others.
(legitimate_reload_vector_constant_p): Likewise.
(print_operand): Allow h output modifier on vectors.
* config/s390/vector.md ("mov<mode>"): Add vrepi.
From-SVN: r231154
Diffstat (limited to 'gcc/config/s390/constraints.md')
-rw-r--r-- | gcc/config/s390/constraints.md | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/gcc/config/s390/constraints.md b/gcc/config/s390/constraints.md index 66d4ace..1dab92a 100644 --- a/gcc/config/s390/constraints.md +++ b/gcc/config/s390/constraints.md @@ -34,6 +34,8 @@ ;; jm1: constant scalar or vector with all bits set ;; jxx: contiguous bitmask of 0 or 1 in all vector elements ;; jyy: constant consisting of byte chunks being either 0 or 0xff +;; jKK: constant vector with all elements having the same value and +;; matching K constraint ;; t -- Access registers 36 and 37. ;; v -- Vector registers v0-v31. ;; C -- A signed 8-bit constant (-128..127) @@ -108,23 +110,6 @@ "FP_REGS" "Floating point registers") -(define_constraint "j00" - "Zero scalar or vector constant" - (match_test "op == CONST0_RTX (GET_MODE (op))")) - -(define_constraint "jm1" - "All one bit scalar or vector constant" - (match_test "op == CONSTM1_RTX (GET_MODE (op))")) - -(define_constraint "jxx" - "@internal" - (and (match_code "const_vector") - (match_test "s390_contiguous_bitmask_vector_p (op, NULL, NULL)"))) - -(define_constraint "jyy" - "@internal" - (and (match_code "const_vector") - (match_test "s390_bytemask_vector_p (op, NULL)"))) (define_register_constraint "t" "ACCESS_REGS" @@ -402,6 +387,33 @@ (match_test "s390_O_constraint_str ('n', ival)"))) +;; +;; Vector constraints follow. +;; + +(define_constraint "j00" + "Zero scalar or vector constant" + (match_test "op == CONST0_RTX (GET_MODE (op))")) + +(define_constraint "jm1" + "All one bit scalar or vector constant" + (match_test "op == CONSTM1_RTX (GET_MODE (op))")) + +(define_constraint "jxx" + "@internal" + (and (match_code "const_vector") + (match_test "s390_contiguous_bitmask_vector_p (op, NULL, NULL)"))) + +(define_constraint "jyy" + "@internal" + (and (match_code "const_vector") + (match_test "s390_bytemask_vector_p (op, NULL)"))) + +(define_constraint "jKK" + "@internal" + (and (and (match_code "const_vector") + (match_test "const_vec_duplicate_p (op)")) + (match_test "satisfies_constraint_K (XVECEXP (op, 0, 0))"))) ;; |