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:
parent
9ce3692aeb
commit
846b158cd9
4 changed files with 46 additions and 0 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
18
gcc/testsuite/gcc.dg/pr54782.c
Normal file
18
gcc/testsuite/gcc.dg/pr54782.c
Normal 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;
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue