Commit 3245582f by Ilya Leoshkevich Committed by Ilya Leoshkevich

[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
parent d2608235
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> 2019-10-10 David Malcolm <dmalcolm@redhat.com>
PR 87488 PR 87488
......
...@@ -614,10 +614,30 @@ ...@@ -614,10 +614,30 @@
operands[2] = GEN_INT (GET_MODE_NUNITS (<MODE>mode) - 1); 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>" (define_expand "vcond<V_HW:mode><V_HW2:mode>"
[(set (match_operand:V_HW 0 "register_operand" "") [(set (match_operand:V_HW 0 "register_operand" "")
(if_then_else:V_HW (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 4 "register_operand" "")
(match_operand:V_HW2 5 "nonmemory_operand" "")]) (match_operand:V_HW2 5 "nonmemory_operand" "")])
(match_operand:V_HW 1 "nonmemory_operand" "") (match_operand:V_HW 1 "nonmemory_operand" "")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment