tree-affine.c (tree_to_aff_combination): Remove unreachable MEM_REF case.

2018-12-10  Richard Biener  <rguenther@suse.de>

	* tree-affine.c (tree_to_aff_combination): Remove unreachable
	MEM_REF case.
	(aff_combination_expand): Cache on SSA names, not possibly
	on conversion trees.  Avoid expanding cases we do not handle.

From-SVN: r266956
This commit is contained in:
Richard Biener 2018-12-10 14:20:18 +00:00 committed by Richard Biener
parent dee75828b4
commit e5840e758d
2 changed files with 38 additions and 30 deletions

View File

@ -1,3 +1,10 @@
2018-12-10 Richard Biener <rguenther@suse.de>
* tree-affine.c (tree_to_aff_combination): Remove unreachable
MEM_REF case.
(aff_combination_expand): Cache on SSA names, not possibly
on conversion trees. Avoid expanding cases we do not handle.
2018-12-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/88427

View File

@ -350,25 +350,6 @@ tree_to_aff_combination (tree expr, tree type, aff_tree *comb)
}
return;
case MEM_REF:
if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
tree_to_aff_combination (TREE_OPERAND (TREE_OPERAND (expr, 0), 0),
type, comb);
else if (integer_zerop (TREE_OPERAND (expr, 1)))
{
aff_combination_elt (comb, type, expr);
return;
}
else
aff_combination_elt (comb, type,
build2 (MEM_REF, TREE_TYPE (expr),
TREE_OPERAND (expr, 0),
build_int_cst
(TREE_TYPE (TREE_OPERAND (expr, 1)), 0)));
tree_to_aff_combination (TREE_OPERAND (expr, 1), sizetype, &tmp);
aff_combination_add (comb, &tmp);
return;
CASE_CONVERT:
{
tree otype = TREE_TYPE (expr);
@ -721,21 +702,39 @@ aff_combination_expand (aff_tree *comb ATTRIBUTE_UNUSED,
if (TREE_CODE_CLASS (code) == tcc_reference)
continue;
if (!*cache)
*cache = new hash_map<tree, name_expansion *>;
name_expansion **slot = &(*cache)->get_or_insert (e);
exp = *slot;
name_expansion **slot = NULL;
if (*cache)
slot = (*cache)->get (name);
exp = slot ? *slot : NULL;
if (!exp)
{
/* Only bother to handle cases tree_to_aff_combination will. */
switch (code)
{
case POINTER_PLUS_EXPR:
case PLUS_EXPR:
case MINUS_EXPR:
case MULT_EXPR:
case NEGATE_EXPR:
case BIT_NOT_EXPR:
CASE_CONVERT:
rhs = gimple_assign_rhs_to_tree (def);
break;
case ADDR_EXPR:
case INTEGER_CST:
case POLY_INT_CST:
rhs = gimple_assign_rhs1 (def);
break;
default:
continue;
}
tree_to_aff_combination (rhs, TREE_TYPE (name), &current);
exp = XNEW (struct name_expansion);
exp->in_progress = 1;
*slot = exp;
rhs = gimple_assign_rhs_to_tree (def);
if (e != name)
rhs = fold_convert (type, rhs);
tree_to_aff_combination_expand (rhs, comb->type, &current, cache);
if (!*cache)
*cache = new hash_map<tree, name_expansion *>;
(*cache)->put (name, exp);
aff_combination_expand (&current, cache);
exp->expansion = current;
exp->in_progress = 0;
}
@ -746,6 +745,8 @@ aff_combination_expand (aff_tree *comb ATTRIBUTE_UNUSED,
gcc_assert (!exp->in_progress);
current = exp->expansion;
}
if (!useless_type_conversion_p (comb->type, current.type))
aff_combination_convert (&current, comb->type);
/* Accumulate the new terms to TO_ADD, so that we do not modify
COMB while traversing it; include the term -coef * E, to remove