builtins.c (fold_builtin_atomic_always_lock_free): Use CONVERT_EXPR_P, CONVERT_EXPR_CODE_P and CASE_CONVERT where approprate.

2014-10-31  Richard Biener  <rguenther@suse.de>

	* builtins.c (fold_builtin_atomic_always_lock_free): Use
	CONVERT_EXPR_P, CONVERT_EXPR_CODE_P and CASE_CONVERT where
	approprate.
	(fold_builtin_expect): Likewise.
	(integer_valued_real_p): Likewise.
	* cfgexpand.c (expand_debug_expr): Likewise.
	* ipa-inline-analysis.c (eliminated_by_inlining_prob): Likewise.
	(find_foldable_builtin_expect): Likewise.
	* trans-mem.c (thread_private_new_memory): Likewise.
	* tree-affine.c (aff_combination_expand): Likewise.
	* tree-data-ref.c (initialize_matrix_A): Likewise.
	* tree-inline.c (copy_bb): Likewise.
	* tree-pretty-print.c (dump_function_name): Likewise.
	(print_call_name): Likewise.
	* tree-ssa-forwprop.c (constant_pointer_difference): Likewise.
	* tree-ssa-math-opts.c (find_bswap_or_nop_1): Likewise.
	* tree-vect-generic.c (expand_vector_operations_1): Likewise.
	* tree-vect-patterns.c (vect_handle_widen_op_by_const): Likewise.
	(vect_recog_widen_mult_pattern): Likewise.
	(vect_operation_fits_smaller_type): Likewise.
	* tree-vrp.c (find_assert_locations_1): Likewise.
	* tree-ssa-dom.c (initialize_hash_element): Canonicalize
	converts to NOP_EXPR.

From-SVN: r216982
This commit is contained in:
Richard Biener 2014-10-31 16:26:43 +00:00 committed by Richard Biener
parent c5cec2fe71
commit 625a9766c9
15 changed files with 47 additions and 25 deletions

View File

@ -1,3 +1,29 @@
2014-10-31 Richard Biener <rguenther@suse.de>
* builtins.c (fold_builtin_atomic_always_lock_free): Use
CONVERT_EXPR_P, CONVERT_EXPR_CODE_P and CASE_CONVERT where
approprate.
(fold_builtin_expect): Likewise.
(integer_valued_real_p): Likewise.
* cfgexpand.c (expand_debug_expr): Likewise.
* ipa-inline-analysis.c (eliminated_by_inlining_prob): Likewise.
(find_foldable_builtin_expect): Likewise.
* trans-mem.c (thread_private_new_memory): Likewise.
* tree-affine.c (aff_combination_expand): Likewise.
* tree-data-ref.c (initialize_matrix_A): Likewise.
* tree-inline.c (copy_bb): Likewise.
* tree-pretty-print.c (dump_function_name): Likewise.
(print_call_name): Likewise.
* tree-ssa-forwprop.c (constant_pointer_difference): Likewise.
* tree-ssa-math-opts.c (find_bswap_or_nop_1): Likewise.
* tree-vect-generic.c (expand_vector_operations_1): Likewise.
* tree-vect-patterns.c (vect_handle_widen_op_by_const): Likewise.
(vect_recog_widen_mult_pattern): Likewise.
(vect_operation_fits_smaller_type): Likewise.
* tree-vrp.c (find_assert_locations_1): Likewise.
* tree-ssa-dom.c (initialize_hash_element): Canonicalize
converts to NOP_EXPR.
2014-10-31 Richard Biener <rguenther@suse.de> 2014-10-31 Richard Biener <rguenther@suse.de>
* genmatch.c (expr::gen_transform): Use NOP_EXPRs instead of * genmatch.c (expr::gen_transform): Use NOP_EXPRs instead of

View File

@ -5551,7 +5551,7 @@ fold_builtin_atomic_always_lock_free (tree arg0, tree arg1)
end before anything else has a chance to look at it. The pointer end before anything else has a chance to look at it. The pointer
parameter at this point is usually cast to a void *, so check for that parameter at this point is usually cast to a void *, so check for that
and look past the cast. */ and look past the cast. */
if (TREE_CODE (arg1) == NOP_EXPR && POINTER_TYPE_P (ttype) if (CONVERT_EXPR_P (arg1) && POINTER_TYPE_P (ttype)
&& VOID_TYPE_P (TREE_TYPE (ttype))) && VOID_TYPE_P (TREE_TYPE (ttype)))
arg1 = TREE_OPERAND (arg1, 0); arg1 = TREE_OPERAND (arg1, 0);
@ -6989,7 +6989,7 @@ fold_builtin_expect (location_t loc, tree arg0, tree arg1, tree arg2)
/* Distribute the expected value over short-circuiting operators. /* Distribute the expected value over short-circuiting operators.
See through the cast from truthvalue_type_node to long. */ See through the cast from truthvalue_type_node to long. */
inner_arg0 = arg0; inner_arg0 = arg0;
while (TREE_CODE (inner_arg0) == NOP_EXPR while (CONVERT_EXPR_P (inner_arg0)
&& INTEGRAL_TYPE_P (TREE_TYPE (inner_arg0)) && INTEGRAL_TYPE_P (TREE_TYPE (inner_arg0))
&& INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (inner_arg0, 0)))) && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (inner_arg0, 0))))
inner_arg0 = TREE_OPERAND (inner_arg0, 0); inner_arg0 = TREE_OPERAND (inner_arg0, 0);
@ -7155,7 +7155,7 @@ integer_valued_real_p (tree t)
case REAL_CST: case REAL_CST:
return real_isinteger (TREE_REAL_CST_PTR (t), TYPE_MODE (TREE_TYPE (t))); return real_isinteger (TREE_REAL_CST_PTR (t), TYPE_MODE (TREE_TYPE (t)));
case NOP_EXPR: CASE_CONVERT:
{ {
tree type = TREE_TYPE (TREE_OPERAND (t, 0)); tree type = TREE_TYPE (TREE_OPERAND (t, 0));
if (TREE_CODE (type) == INTEGER_TYPE) if (TREE_CODE (type) == INTEGER_TYPE)

View File

@ -3882,8 +3882,7 @@ expand_debug_expr (tree exp)
adjust_mode: adjust_mode:
case PAREN_EXPR: case PAREN_EXPR:
case NOP_EXPR: CASE_CONVERT:
case CONVERT_EXPR:
{ {
inner_mode = GET_MODE (op0); inner_mode = GET_MODE (op0);

View File

@ -1617,8 +1617,7 @@ eliminated_by_inlining_prob (gimple stmt)
and stores to return value or parameters are often free after and stores to return value or parameters are often free after
inlining dua to SRA and further combining. inlining dua to SRA and further combining.
Assume that half of statements goes away. */ Assume that half of statements goes away. */
if (rhs_code == CONVERT_EXPR if (CONVERT_EXPR_CODE_P (rhs_code)
|| rhs_code == NOP_EXPR
|| rhs_code == VIEW_CONVERT_EXPR || rhs_code == VIEW_CONVERT_EXPR
|| rhs_code == ADDR_EXPR || rhs_code == ADDR_EXPR
|| gimple_assign_rhs_class (stmt) == GIMPLE_SINGLE_RHS) || gimple_assign_rhs_class (stmt) == GIMPLE_SINGLE_RHS)
@ -2377,7 +2376,7 @@ find_foldable_builtin_expect (basic_block bb)
match = true; match = true;
done = true; done = true;
break; break;
case NOP_EXPR: CASE_CONVERT:
break; break;
default: default:
done = true; done = true;

View File

@ -1415,7 +1415,7 @@ thread_private_new_memory (basic_block entry_block, tree x)
else if (code == POINTER_PLUS_EXPR) else if (code == POINTER_PLUS_EXPR)
x = gimple_assign_rhs1 (stmt); x = gimple_assign_rhs1 (stmt);
/* x = (cast*) foo ==> foo */ /* x = (cast*) foo ==> foo */
else if (code == VIEW_CONVERT_EXPR || code == NOP_EXPR) else if (code == VIEW_CONVERT_EXPR || CONVERT_EXPR_CODE_P (code))
x = gimple_assign_rhs1 (stmt); x = gimple_assign_rhs1 (stmt);
/* x = c ? op1 : op2 == > op1 or op2 just like a PHI */ /* x = c ? op1 : op2 == > op1 or op2 just like a PHI */
else if (code == COND_EXPR) else if (code == COND_EXPR)

View File

@ -648,7 +648,7 @@ aff_combination_expand (aff_tree *comb ATTRIBUTE_UNUSED,
type = TREE_TYPE (e); type = TREE_TYPE (e);
name = e; name = e;
/* Look through some conversions. */ /* Look through some conversions. */
if (TREE_CODE (e) == NOP_EXPR if (CONVERT_EXPR_P (e)
&& (TYPE_PRECISION (type) && (TYPE_PRECISION (type)
>= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (e, 0))))) >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (e, 0)))))
name = TREE_OPERAND (e, 0); name = TREE_OPERAND (e, 0);

View File

@ -2100,7 +2100,7 @@ initialize_matrix_A (lambda_matrix A, tree chrec, unsigned index, int mult)
return chrec_fold_op (TREE_CODE (chrec), chrec_type (chrec), op0, op1); return chrec_fold_op (TREE_CODE (chrec), chrec_type (chrec), op0, op1);
} }
case NOP_EXPR: CASE_CONVERT:
{ {
tree op = initialize_matrix_A (A, TREE_OPERAND (chrec, 0), index, mult); tree op = initialize_matrix_A (A, TREE_OPERAND (chrec, 0), index, mult);
return chrec_convert (chrec_type (chrec), op, NULL); return chrec_convert (chrec_type (chrec), op, NULL);

View File

@ -1686,7 +1686,7 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale,
/* With return slot optimization we can end up with /* With return slot optimization we can end up with
non-gimple (foo *)&this->m, fix that here. */ non-gimple (foo *)&this->m, fix that here. */
if (is_gimple_assign (stmt) if (is_gimple_assign (stmt)
&& gimple_assign_rhs_code (stmt) == NOP_EXPR && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
&& !is_gimple_val (gimple_assign_rhs1 (stmt))) && !is_gimple_val (gimple_assign_rhs1 (stmt)))
{ {
tree new_rhs; tree new_rhs;

View File

@ -225,7 +225,7 @@ dump_decl_name (pretty_printer *buffer, tree node, int flags)
static void static void
dump_function_name (pretty_printer *buffer, tree node, int flags) dump_function_name (pretty_printer *buffer, tree node, int flags)
{ {
if (TREE_CODE (node) == NOP_EXPR) if (CONVERT_EXPR_P (node))
node = TREE_OPERAND (node, 0); node = TREE_OPERAND (node, 0);
if (DECL_NAME (node) && (flags & TDF_ASMNAME) == 0) if (DECL_NAME (node) && (flags & TDF_ASMNAME) == 0)
pp_string (buffer, lang_hooks.decl_printable_name (node, 1)); pp_string (buffer, lang_hooks.decl_printable_name (node, 1));
@ -3266,7 +3266,7 @@ print_call_name (pretty_printer *buffer, tree node, int flags)
case ADDR_EXPR: case ADDR_EXPR:
case INDIRECT_REF: case INDIRECT_REF:
case NOP_EXPR: CASE_CONVERT:
op0 = TREE_OPERAND (op0, 0); op0 = TREE_OPERAND (op0, 0);
goto again; goto again;

View File

@ -306,7 +306,7 @@ initialize_hash_element (gimple stmt, tree lhs,
expr->kind = EXPR_UNARY; expr->kind = EXPR_UNARY;
expr->type = TREE_TYPE (gimple_assign_lhs (stmt)); expr->type = TREE_TYPE (gimple_assign_lhs (stmt));
if (CONVERT_EXPR_CODE_P (subcode)) if (CONVERT_EXPR_CODE_P (subcode))
subcode = CONVERT_EXPR; subcode = NOP_EXPR;
expr->ops.unary.op = subcode; expr->ops.unary.op = subcode;
expr->ops.unary.opnd = gimple_assign_rhs1 (stmt); expr->ops.unary.opnd = gimple_assign_rhs1 (stmt);
break; break;

View File

@ -1487,7 +1487,7 @@ constant_pointer_difference (tree p1, tree p2)
off = size_binop (PLUS_EXPR, off, gimple_assign_rhs2 (stmt)); off = size_binop (PLUS_EXPR, off, gimple_assign_rhs2 (stmt));
p = gimple_assign_rhs1 (stmt); p = gimple_assign_rhs1 (stmt);
} }
else if (code == ADDR_EXPR || code == NOP_EXPR) else if (code == ADDR_EXPR || CONVERT_EXPR_CODE_P (code))
p = gimple_assign_rhs1 (stmt); p = gimple_assign_rhs1 (stmt);
else else
break; break;

View File

@ -1867,8 +1867,7 @@ find_bswap_or_nop_1 (gimple stmt, struct symbolic_number *n, int limit)
&& code != RSHIFT_EXPR && code != RSHIFT_EXPR
&& code != LROTATE_EXPR && code != LROTATE_EXPR
&& code != RROTATE_EXPR && code != RROTATE_EXPR
&& code != NOP_EXPR && !CONVERT_EXPR_CODE_P (code))
&& code != CONVERT_EXPR)
return NULL; return NULL;
source_stmt1 = find_bswap_or_nop_1 (rhs1_stmt, n, limit - 1); source_stmt1 = find_bswap_or_nop_1 (rhs1_stmt, n, limit - 1);

View File

@ -1449,14 +1449,12 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
if (TREE_CODE (type) != VECTOR_TYPE) if (TREE_CODE (type) != VECTOR_TYPE)
return; return;
if (code == NOP_EXPR if (CONVERT_EXPR_CODE_P (code)
|| code == FLOAT_EXPR || code == FLOAT_EXPR
|| code == FIX_TRUNC_EXPR || code == FIX_TRUNC_EXPR
|| code == VIEW_CONVERT_EXPR) || code == VIEW_CONVERT_EXPR)
return; return;
gcc_assert (code != CONVERT_EXPR);
/* The signedness is determined from input argument. */ /* The signedness is determined from input argument. */
if (code == VEC_UNPACK_FLOAT_HI_EXPR if (code == VEC_UNPACK_FLOAT_HI_EXPR
|| code == VEC_UNPACK_FLOAT_LO_EXPR) || code == VEC_UNPACK_FLOAT_LO_EXPR)

View File

@ -747,7 +747,7 @@ vect_handle_widen_op_by_const (gimple stmt, enum tree_code code,
new_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt)); new_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt));
/* Check if the already created pattern stmt is what we need. */ /* Check if the already created pattern stmt is what we need. */
if (!is_gimple_assign (new_stmt) if (!is_gimple_assign (new_stmt)
|| gimple_assign_rhs_code (new_stmt) != NOP_EXPR || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (new_stmt))
|| TREE_TYPE (gimple_assign_lhs (new_stmt)) != new_type) || TREE_TYPE (gimple_assign_lhs (new_stmt)) != new_type)
return false; return false;
@ -952,7 +952,7 @@ vect_recog_widen_mult_pattern (vec<gimple> *stmts,
use_stmt = vect_single_imm_use (last_stmt); use_stmt = vect_single_imm_use (last_stmt);
if (!use_stmt || !is_gimple_assign (use_stmt) if (!use_stmt || !is_gimple_assign (use_stmt)
|| gimple_assign_rhs_code (use_stmt) != NOP_EXPR) || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_stmt)))
return NULL; return NULL;
use_lhs = gimple_assign_lhs (use_stmt); use_lhs = gimple_assign_lhs (use_stmt);
@ -1429,7 +1429,7 @@ vect_operation_fits_smaller_type (gimple stmt, tree def, tree *new_type,
new_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt)); new_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt));
/* Check if the already created pattern stmt is what we need. */ /* Check if the already created pattern stmt is what we need. */
if (!is_gimple_assign (new_stmt) if (!is_gimple_assign (new_stmt)
|| gimple_assign_rhs_code (new_stmt) != NOP_EXPR || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (new_stmt))
|| TREE_TYPE (gimple_assign_lhs (new_stmt)) != interm_type) || TREE_TYPE (gimple_assign_lhs (new_stmt)) != interm_type)
return false; return false;

View File

@ -6004,7 +6004,8 @@ find_assert_locations_1 (basic_block bb, sbitmap live)
gimple def_stmt = SSA_NAME_DEF_STMT (t); gimple def_stmt = SSA_NAME_DEF_STMT (t);
while (is_gimple_assign (def_stmt) while (is_gimple_assign (def_stmt)
&& gimple_assign_rhs_code (def_stmt) == NOP_EXPR && CONVERT_EXPR_CODE_P
(gimple_assign_rhs_code (def_stmt))
&& TREE_CODE && TREE_CODE
(gimple_assign_rhs1 (def_stmt)) == SSA_NAME (gimple_assign_rhs1 (def_stmt)) == SSA_NAME
&& POINTER_TYPE_P && POINTER_TYPE_P