Commit e150da38 by Richard Biener Committed by Richard Biener

match.pd (nop_convert): Remove empty match.

2019-12-06  Richard Biener  <rguenther@suse.de>

	* match.pd (nop_convert): Remove empty match.  Use nop_convert?
	everywhere.

From-SVN: r279040
parent 998d6381
2019-12-06 Richard Biener <rguenther@suse.de>
* match.pd (nop_convert): Remove empty match. Use nop_convert?
everywhere.
2019-12-06 Richard Sandiford <richard.sandiford@arm.com> 2019-12-06 Richard Sandiford <richard.sandiford@arm.com>
* tree-data-ref.c (prune_runtime_alias_test_list): Exit early * tree-data-ref.c (prune_runtime_alias_test_list): Exit early
...@@ -98,8 +98,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -98,8 +98,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(define_operator_list COND_TERNARY (define_operator_list COND_TERNARY
IFN_COND_FMA IFN_COND_FMS IFN_COND_FNMA IFN_COND_FNMS) IFN_COND_FMA IFN_COND_FMS IFN_COND_FNMA IFN_COND_FNMS)
/* As opposed to convert?, this still creates a single pattern, so /* With nop_convert? combine convert? and view_convert? in one pattern
it is not a suitable replacement for convert? in all cases. */ plus conditionalize on tree_nop_conversion_p conversions. */
(match (nop_convert @0) (match (nop_convert @0)
(convert @0) (convert @0)
(if (tree_nop_conversion_p (type, TREE_TYPE (@0))))) (if (tree_nop_conversion_p (type, TREE_TYPE (@0)))))
...@@ -109,9 +109,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -109,9 +109,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& known_eq (TYPE_VECTOR_SUBPARTS (type), && known_eq (TYPE_VECTOR_SUBPARTS (type),
TYPE_VECTOR_SUBPARTS (TREE_TYPE (@0))) TYPE_VECTOR_SUBPARTS (TREE_TYPE (@0)))
&& tree_nop_conversion_p (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (@0)))))) && tree_nop_conversion_p (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (@0))))))
/* This one has to be last, or it shadows the others. */
(match (nop_convert @0)
@0)
/* Transform likes of (char) ABS_EXPR <(int) x> into (char) ABSU_EXPR <x> /* Transform likes of (char) ABS_EXPR <(int) x> into (char) ABSU_EXPR <x>
ABSU_EXPR returns unsigned absolute value of the operand and the operand ABSU_EXPR returns unsigned absolute value of the operand and the operand
...@@ -1428,7 +1425,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -1428,7 +1425,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* Convert - (~A) to A + 1. */ /* Convert - (~A) to A + 1. */
(simplify (simplify
(negate (nop_convert (bit_not @0))) (negate (nop_convert? (bit_not @0)))
(plus (view_convert @0) { build_each_one_cst (type); })) (plus (view_convert @0) { build_each_one_cst (type); }))
/* Convert ~ (A - 1) or ~ (A + -1) to -A. */ /* Convert ~ (A - 1) or ~ (A + -1) to -A. */
...@@ -1455,7 +1452,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -1455,7 +1452,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* Otherwise prefer ~(X ^ Y) to ~X ^ Y as more canonical. */ /* Otherwise prefer ~(X ^ Y) to ~X ^ Y as more canonical. */
(simplify (simplify
(bit_xor:c (nop_convert:s (bit_not:s @0)) @1) (bit_xor:c (nop_convert?:s (bit_not:s @0)) @1)
(if (tree_nop_conversion_p (type, TREE_TYPE (@0))) (if (tree_nop_conversion_p (type, TREE_TYPE (@0)))
(bit_not (bit_xor (view_convert @0) @1)))) (bit_not (bit_xor (view_convert @0) @1))))
...@@ -1684,7 +1681,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -1684,7 +1681,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* For equality, this is also true with wrapping overflow. */ /* For equality, this is also true with wrapping overflow. */
(for op (eq ne) (for op (eq ne)
(simplify (simplify
(op:c (nop_convert@3 (plus:c@2 @0 (convert1? @1))) (convert2? @1)) (op:c (nop_convert?@3 (plus:c@2 @0 (convert1? @1))) (convert2? @1))
(if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)) (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0)) && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0))
|| TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0))) || TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))
...@@ -1693,7 +1690,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -1693,7 +1690,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& tree_nop_conversion_p (TREE_TYPE (@3), TREE_TYPE (@1))) && tree_nop_conversion_p (TREE_TYPE (@3), TREE_TYPE (@1)))
(op @0 { build_zero_cst (TREE_TYPE (@0)); }))) (op @0 { build_zero_cst (TREE_TYPE (@0)); })))
(simplify (simplify
(op:c (nop_convert@3 (pointer_plus@2 (convert1? @0) @1)) (convert2? @0)) (op:c (nop_convert?@3 (pointer_plus@2 (convert1? @0) @1)) (convert2? @0))
(if (tree_nop_conversion_p (TREE_TYPE (@2), TREE_TYPE (@0)) (if (tree_nop_conversion_p (TREE_TYPE (@2), TREE_TYPE (@0))
&& tree_nop_conversion_p (TREE_TYPE (@3), TREE_TYPE (@0)) && tree_nop_conversion_p (TREE_TYPE (@3), TREE_TYPE (@0))
&& (CONSTANT_CLASS_P (@1) || (single_use (@2) && single_use (@3)))) && (CONSTANT_CLASS_P (@1) || (single_use (@2) && single_use (@3))))
...@@ -2142,7 +2139,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -2142,7 +2139,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|| !HONOR_SIGN_DEPENDENT_ROUNDING (type))) || !HONOR_SIGN_DEPENDENT_ROUNDING (type)))
(convert (negate @1)))) (convert (negate @1))))
(simplify (simplify
(negate (nop_convert (negate @1))) (negate (nop_convert? (negate @1)))
(if (!TYPE_OVERFLOW_SANITIZED (type) (if (!TYPE_OVERFLOW_SANITIZED (type)
&& !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (@1))) && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (@1)))
(view_convert @1))) (view_convert @1)))
...@@ -2159,25 +2156,25 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -2159,25 +2156,25 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* A - (A +- B) -> -+ B */ /* A - (A +- B) -> -+ B */
/* A +- (B -+ A) -> +- B */ /* A +- (B -+ A) -> +- B */
(simplify (simplify
(minus (nop_convert (plus:c (nop_convert @0) @1)) @0) (minus (nop_convert1? (plus:c (nop_convert2? @0) @1)) @0)
(view_convert @1)) (view_convert @1))
(simplify (simplify
(minus (nop_convert (minus (nop_convert @0) @1)) @0) (minus (nop_convert1? (minus (nop_convert2? @0) @1)) @0)
(if (!ANY_INTEGRAL_TYPE_P (type) (if (!ANY_INTEGRAL_TYPE_P (type)
|| TYPE_OVERFLOW_WRAPS (type)) || TYPE_OVERFLOW_WRAPS (type))
(negate (view_convert @1)) (negate (view_convert @1))
(view_convert (negate @1)))) (view_convert (negate @1))))
(simplify (simplify
(plus:c (nop_convert (minus @0 (nop_convert @1))) @1) (plus:c (nop_convert1? (minus @0 (nop_convert2? @1))) @1)
(view_convert @0)) (view_convert @0))
(simplify (simplify
(minus @0 (nop_convert (plus:c (nop_convert @0) @1))) (minus @0 (nop_convert1? (plus:c (nop_convert2? @0) @1)))
(if (!ANY_INTEGRAL_TYPE_P (type) (if (!ANY_INTEGRAL_TYPE_P (type)
|| TYPE_OVERFLOW_WRAPS (type)) || TYPE_OVERFLOW_WRAPS (type))
(negate (view_convert @1)) (negate (view_convert @1))
(view_convert (negate @1)))) (view_convert (negate @1))))
(simplify (simplify
(minus @0 (nop_convert (minus (nop_convert @0) @1))) (minus @0 (nop_convert1? (minus (nop_convert2? @0) @1)))
(view_convert @1)) (view_convert @1))
/* (A +- B) + (C - A) -> C +- B */ /* (A +- B) + (C - A) -> C +- B */
/* (A + B) - (A - C) -> B + C */ /* (A + B) - (A - C) -> B + C */
...@@ -2204,7 +2201,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -2204,7 +2201,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(for inner_op (plus minus) (for inner_op (plus minus)
neg_inner_op (minus plus) neg_inner_op (minus plus)
(simplify (simplify
(outer_op (nop_convert (inner_op @0 CONSTANT_CLASS_P@1)) (outer_op (nop_convert? (inner_op @0 CONSTANT_CLASS_P@1))
CONSTANT_CLASS_P@2) CONSTANT_CLASS_P@2)
/* If one of the types wraps, use that one. */ /* If one of the types wraps, use that one. */
(if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type)) (if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type))
...@@ -2243,7 +2240,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -2243,7 +2240,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* (CST1 - A) +- CST2 -> CST3 - A */ /* (CST1 - A) +- CST2 -> CST3 - A */
(for outer_op (plus minus) (for outer_op (plus minus)
(simplify (simplify
(outer_op (nop_convert (minus CONSTANT_CLASS_P@1 @0)) CONSTANT_CLASS_P@2) (outer_op (nop_convert? (minus CONSTANT_CLASS_P@1 @0)) CONSTANT_CLASS_P@2)
/* If one of the types wraps, use that one. */ /* If one of the types wraps, use that one. */
(if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type)) (if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type))
/* If all 3 captures are CONSTANT_CLASS_P, punt, as we might recurse /* If all 3 captures are CONSTANT_CLASS_P, punt, as we might recurse
...@@ -2262,7 +2259,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -2262,7 +2259,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
Use view_convert because it is safe for vectors and equivalent for Use view_convert because it is safe for vectors and equivalent for
scalars. */ scalars. */
(simplify (simplify
(minus CONSTANT_CLASS_P@1 (nop_convert (minus CONSTANT_CLASS_P@2 @0))) (minus CONSTANT_CLASS_P@1 (nop_convert? (minus CONSTANT_CLASS_P@2 @0)))
/* If one of the types wraps, use that one. */ /* If one of the types wraps, use that one. */
(if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type)) (if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type))
/* If all 3 captures are CONSTANT_CLASS_P, punt, as we might recurse /* If all 3 captures are CONSTANT_CLASS_P, punt, as we might recurse
......
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