aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/s390/constraints.md
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2015-12-02 07:55:40 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2015-12-02 07:55:40 +0000
commitb0057efd3030267c324d1019786a428fd61b5de9 (patch)
tree350f6c089d2297c2fac47e42d5c475fd621ecebd /gcc/config/s390/constraints.md
parenta4a443cee2ea9c2db55e2802d46a4d5b6cbe1784 (diff)
downloadgcc-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.md46
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))")))
;;