re PR middle-end/54782 (ICE: in change_scope, at final.c:1543 with -O -ffast-math -ftree-parallelize-loops=2 -g)

2012-10-03  Dehao Chen  <dehao@google.com>

gcc:
	PR middle-end/54782
	* tree-cfg.c (move_block_to_fn): Update lexical block for phi_args.

testsuite:
	PR middle-end/54782
	* gcc.dg/pr54782.c: New test.

From-SVN: r192049
This commit is contained in:
Dehao Chen 2012-10-03 20:34:26 +00:00 committed by Dehao Chen
parent 9ce3692aeb
commit 846b158cd9
4 changed files with 46 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2012-10-03 Dehao Chen <dehao@google.com>
PR middle-end/54782
* tree-cfg.c (move_block_to_fn): Update lexical block for phi_args.
2012-10-03 Vladimir Makarov <vmakarov@redhat.com>
* reginfo.c (max_regno_since_last_resize): New.

View File

@ -1,3 +1,8 @@
2012-10-03 Dehao Chen <dehao@google.com>
PR middle-end/54782
* gcc.dg/pr54782.c: New test.
2012-10-03 Jakub Jelinek <jakub@redhat.com>
PR c++/54777

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
/* { dg-options "-O -ffast-math -ftree-parallelize-loops=2 -g" } */
struct S
{
int n;
float *a;
};
int
foo (struct S *s)
{
float sum = 0;
int i;
for (i = 0; i < s->n; i++)
sum += s->a[i];
return sum;
}

View File

@ -6322,6 +6322,7 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
use_operand_p use;
tree op = PHI_RESULT (phi);
ssa_op_iter oi;
unsigned i;
if (virtual_operand_p (op))
{
@ -6340,6 +6341,23 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
SET_USE (use, replace_ssa_name (op, d->vars_map, dest_cfun->decl));
}
for (i = 0; i < EDGE_COUNT (bb->preds); i++)
{
location_t locus = gimple_phi_arg_location (phi, i);
tree block = LOCATION_BLOCK (locus);
if (locus == UNKNOWN_LOCATION)
continue;
if (d->orig_block == NULL_TREE || block == d->orig_block)
{
if (d->new_block == NULL_TREE)
locus = LOCATION_LOCUS (locus);
else
locus = COMBINE_LOCATION_DATA (line_table, locus, d->new_block);
gimple_phi_arg_set_location (phi, i, locus);
}
}
gsi_next (&si);
}