Fix PR45297: handle ADDR_EXPR in interpret_rhs_expr as in follow_ssa_edge_expr.

2010-12-01  Sebastian Pop  <sebastian.pop@amd.com>

	PR middle-end/45297
	* tree-scalar-evolution.c (interpret_rhs_expr): Handle ADDR_EXPR
	with MEM_REFs as POINTER_PLUS_EXPR.

From-SVN: r167390
This commit is contained in:
Sebastian Pop 2010-12-02 20:13:11 +00:00 committed by Sebastian Pop
parent 35caf1bdab
commit 6a02a719ac
2 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2010-12-02 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/45297
* tree-scalar-evolution.c (interpret_rhs_expr): Handle ADDR_EXPR
with MEM_REFs as POINTER_PLUS_EXPR.
2010-12-02 Joseph Myers <joseph@codesourcery.com>
* config/i386/linux.h, config/m32r/linux.h, config/m68k/linux.h,

View File

@ -1715,12 +1715,22 @@ interpret_rhs_expr (struct loop *loop, gimple at_stmt,
return chrec_convert (type, analyze_scalar_evolution (loop, rhs1),
at_stmt);
}
return chrec_dont_know;
}
switch (code)
{
case ADDR_EXPR:
/* Handle &MEM[ptr + CST] which is equivalent to POINTER_PLUS_EXPR. */
if (TREE_CODE (TREE_OPERAND (rhs1, 0)) != MEM_REF)
{
res = chrec_dont_know;
break;
}
rhs2 = TREE_OPERAND (TREE_OPERAND (rhs1, 0), 1);
rhs1 = TREE_OPERAND (TREE_OPERAND (rhs1, 0), 0);
/* Fall through. */
case POINTER_PLUS_EXPR:
chrec1 = analyze_scalar_evolution (loop, rhs1);
chrec2 = analyze_scalar_evolution (loop, rhs2);