Commit cff1a122 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/89570 (ICE in prepare_cmp_insn, at optabs.c:4001)

	PR tree-optimization/89570
	* match.pd (vec_cond into cond_op simplification): Don't use
	get_conditional_internal_fn, use as_internal_fn (cond_op).

Co-Authored-By: Richard Sandiford <richard.sandiford@arm.com>

From-SVN: r269391
parent d7c50d67
2019-03-05 Jakub Jelinek <jakub@redhat.com>
Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/89570
* match.pd (vec_cond into cond_op simplification): Don't use
get_conditional_internal_fn, use as_internal_fn (cond_op).
2019-03-05 Wilco Dijkstra <wdijkstr@arm.com> 2019-03-05 Wilco Dijkstra <wdijkstr@arm.com>
PR target/89222 PR target/89222
......
...@@ -5176,24 +5176,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -5176,24 +5176,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
if the target can do it in one go. This makes the operation conditional if the target can do it in one go. This makes the operation conditional
on c, so could drop potentially-trapping arithmetic, but that's a valid on c, so could drop potentially-trapping arithmetic, but that's a valid
simplification if the result of the operation isn't needed. */ simplification if the result of the operation isn't needed.
Avoid speculatively generating a stand-alone vector comparison
on targets that might not support them. Any target implementing
conditional internal functions must support the same comparisons
inside and outside a VEC_COND_EXPR. */
#if GIMPLE #if GIMPLE
(for uncond_op (UNCOND_BINARY) (for uncond_op (UNCOND_BINARY)
cond_op (COND_BINARY) cond_op (COND_BINARY)
(simplify (simplify
(vec_cond @0 (view_convert? (uncond_op@4 @1 @2)) @3) (vec_cond @0 (view_convert? (uncond_op@4 @1 @2)) @3)
(with { tree op_type = TREE_TYPE (@4); (with { tree op_type = TREE_TYPE (@4); }
internal_fn cond_fn = get_conditional_internal_fn (uncond_op); } (if (vectorized_internal_fn_supported_p (as_internal_fn (cond_op), op_type)
(if (cond_fn != IFN_LAST
&& vectorized_internal_fn_supported_p (cond_fn, op_type)
&& element_precision (type) == element_precision (op_type)) && element_precision (type) == element_precision (op_type))
(view_convert (cond_op @0 @1 @2 (view_convert:op_type @3)))))) (view_convert (cond_op @0 @1 @2 (view_convert:op_type @3))))))
(simplify (simplify
(vec_cond @0 @1 (view_convert? (uncond_op@4 @2 @3))) (vec_cond @0 @1 (view_convert? (uncond_op@4 @2 @3)))
(with { tree op_type = TREE_TYPE (@4); (with { tree op_type = TREE_TYPE (@4); }
internal_fn cond_fn = get_conditional_internal_fn (uncond_op); } (if (vectorized_internal_fn_supported_p (as_internal_fn (cond_op), op_type)
(if (cond_fn != IFN_LAST
&& vectorized_internal_fn_supported_p (cond_fn, op_type)
&& element_precision (type) == element_precision (op_type)) && element_precision (type) == element_precision (op_type))
(view_convert (cond_op (bit_not @0) @2 @3 (view_convert:op_type @1))))))) (view_convert (cond_op (bit_not @0) @2 @3 (view_convert:op_type @1)))))))
...@@ -5202,20 +5204,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -5202,20 +5204,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
cond_op (COND_TERNARY) cond_op (COND_TERNARY)
(simplify (simplify
(vec_cond @0 (view_convert? (uncond_op@5 @1 @2 @3)) @4) (vec_cond @0 (view_convert? (uncond_op@5 @1 @2 @3)) @4)
(with { tree op_type = TREE_TYPE (@5); (with { tree op_type = TREE_TYPE (@5); }
internal_fn cond_fn (if (vectorized_internal_fn_supported_p (as_internal_fn (cond_op), op_type)
= get_conditional_internal_fn (as_internal_fn (uncond_op)); }
(if (cond_fn != IFN_LAST
&& vectorized_internal_fn_supported_p (cond_fn, op_type)
&& element_precision (type) == element_precision (op_type)) && element_precision (type) == element_precision (op_type))
(view_convert (cond_op @0 @1 @2 @3 (view_convert:op_type @4)))))) (view_convert (cond_op @0 @1 @2 @3 (view_convert:op_type @4))))))
(simplify (simplify
(vec_cond @0 @1 (view_convert? (uncond_op@5 @2 @3 @4))) (vec_cond @0 @1 (view_convert? (uncond_op@5 @2 @3 @4)))
(with { tree op_type = TREE_TYPE (@5); (with { tree op_type = TREE_TYPE (@5); }
internal_fn cond_fn (if (vectorized_internal_fn_supported_p (as_internal_fn (cond_op), op_type)
= get_conditional_internal_fn (as_internal_fn (uncond_op)); }
(if (cond_fn != IFN_LAST
&& vectorized_internal_fn_supported_p (cond_fn, op_type)
&& element_precision (type) == element_precision (op_type)) && element_precision (type) == element_precision (op_type))
(view_convert (cond_op (bit_not @0) @2 @3 @4 (view_convert (cond_op (bit_not @0) @2 @3 @4
(view_convert:op_type @1))))))) (view_convert:op_type @1)))))))
......
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