re PR tree-optimization/55350 (verify_gimple failed with invalid (pointer) operands to plus/minus)

PR tree-optimization/55350
	* gimple-ssa-strength-reduction.c (replace_dependent): Handle
	POINTER_{PLUS,MINUS}_EXPR correctly.

From-SVN: r193672
This commit is contained in:
Aldy Hernandez 2012-11-20 18:28:09 +00:00 committed by Aldy Hernandez
parent 7100b5616c
commit 7139194bf9
3 changed files with 26 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2012-11-20 Aldy Hernandez <aldyh@redhat.com>
PR tree-optimization/55350
* gimple-ssa-strength-reduction.c (replace_dependent): Handle
POINTER_PLUS_EXPR correctly.
2012-11-20 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (fix_trunc<MODEF:mode><SWI48:mode>_sse): Macroize

View File

@ -1643,10 +1643,19 @@ replace_dependent (slsr_cand_t c, enum tree_code cand_code)
basis = lookup_cand (c->basis);
basis_name = gimple_assign_lhs (basis->cand_stmt);
incr_type = TREE_TYPE (gimple_assign_rhs1 (c->cand_stmt));
code = PLUS_EXPR;
if (cand_code == POINTER_PLUS_EXPR)
{
incr_type = sizetype;
code = cand_code;
}
else
{
incr_type = TREE_TYPE (gimple_assign_rhs1 (c->cand_stmt));
code = PLUS_EXPR;
}
if (bump.is_negative ())
if (bump.is_negative ()
&& cand_code != POINTER_PLUS_EXPR)
{
code = MINUS_EXPR;
bump = -bump;

View File

@ -0,0 +1,8 @@
void
foo (__INTPTR_TYPE__ x, __INTPTR_TYPE__ y)
{
int i;
void **a = (void *) (8UL * (x / 8UL));
for (i = 0; i < x; i++)
a[i] = (void *) y;
}