aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2019-10-10 17:00:29 +0000
committerIlya Leoshkevich <iii@gcc.gnu.org>2019-10-10 17:00:29 +0000
commit3245582f7d5cf4a5f69218add91a15aa606e8822 (patch)
treefdcf32824e9008e70b705baee6af497f414c4b41
parentd26082357676a3c3843595dfe88a6c682b56e334 (diff)
downloadgcc-3245582f7d5cf4a5f69218add91a15aa606e8822.zip
gcc-3245582f7d5cf4a5f69218add91a15aa606e8822.tar.gz
gcc-3245582f7d5cf4a5f69218add91a15aa606e8822.tar.bz2
[PATCH 1/3] S/390: Do not use signaling vector comparisons on z13
z13 supports only non-signaling vector comparisons. This means we cannot vectorize LT, LE, GT, GE and LTGT when compiling for z13. Notify middle-end about this by using more restrictive operator predicate in vcond<V_HW:mode><V_HW2:mode>. gcc/ChangeLog: 2019-10-10 Ilya Leoshkevich <iii@linux.ibm.com> PR target/77918 * config/s390/vector.md (vcond_comparison_operator): New predicate. (vcond<V_HW:mode><V_HW2:mode>): Use vcond_comparison_operator. From-SVN: r276842
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/s390/vector.md22
2 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e3c1a4f..9c34213 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-10 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ PR target/77918
+ * config/s390/vector.md (vcond_comparison_operator): New
+ predicate.
+ (vcond<V_HW:mode><V_HW2:mode>): Use vcond_comparison_operator.
+
2019-10-10 David Malcolm <dmalcolm@redhat.com>
PR 87488
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 127b75f..e50047b 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -614,10 +614,30 @@
operands[2] = GEN_INT (GET_MODE_NUNITS (<MODE>mode) - 1);
})
+(define_predicate "vcond_comparison_operator"
+ (match_operand 0 "comparison_operator")
+{
+ if (!HONOR_NANS (GET_MODE (XEXP (op, 0)))
+ && !HONOR_NANS (GET_MODE (XEXP (op, 1))))
+ return true;
+ switch (GET_CODE (op))
+ {
+ case LE:
+ case LT:
+ case GE:
+ case GT:
+ case LTGT:
+ /* Signaling vector comparisons are supported only on z14+. */
+ return TARGET_Z14;
+ default:
+ return true;
+ }
+})
+
(define_expand "vcond<V_HW:mode><V_HW2:mode>"
[(set (match_operand:V_HW 0 "register_operand" "")
(if_then_else:V_HW
- (match_operator 3 "comparison_operator"
+ (match_operator 3 "vcond_comparison_operator"
[(match_operand:V_HW2 4 "register_operand" "")
(match_operand:V_HW2 5 "nonmemory_operand" "")])
(match_operand:V_HW 1 "nonmemory_operand" "")