Commit e9982c6a by Martin Jambor Committed by Martin Jambor

Enqueue all SRA links for write flag propagation

2017-09-06  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/82078
gcc/
	* tree-sra.c (sort_and_splice_var_accesses): Move call to
	add_access_to_work_queue...
	(build_accesses_from_assign): ...here.
	(propagate_all_subaccesses): Make sure racc is the group
	representative, if there is one.

gcc/testsuite/
	* gcc.dg/tree-ssa/pr82078.c: New test.

From-SVN: r251756
parent c7a494c9
2017-09-06 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/82078
* tree-sra.c (sort_and_splice_var_accesses): Move call to
add_access_to_work_queue...
(build_accesses_from_assign): ...here.
(propagate_all_subaccesses): Make sure racc is the group
representative, if there is one.
2017-09-06 Jakub Jelinek <jakub@redhat.com> 2017-09-06 Jakub Jelinek <jakub@redhat.com>
PR middle-end/82095 PR middle-end/82095
......
2017-09-06 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/82078
* gcc.dg/tree-ssa/pr82078.c: New test.
2017-09-06 Jakub Jelinek <jakub@redhat.com> 2017-09-06 Jakub Jelinek <jakub@redhat.com>
PR middle-end/82095 PR middle-end/82095
......
/* { dg-do run } */
/* { dg-options "-O" } */
struct S0 {
signed f4;
signed f9 : 5;
} a[6][5], b = {2}
;
int c, d;
int fn1() {
struct S0 e[5][6];
struct S0 f;
b = f = e[2][5] = a[5][0];
if (d)
;
else
return f.f9;
e[c][45] = a[4][4];
}
int main() {
fn1();
if (b.f4 != 0)
__builtin_abort ();
return 0;
}
...@@ -1359,6 +1359,8 @@ build_accesses_from_assign (gimple *stmt) ...@@ -1359,6 +1359,8 @@ build_accesses_from_assign (gimple *stmt)
link->lacc = lacc; link->lacc = lacc;
link->racc = racc; link->racc = racc;
add_link_to_rhs (racc, link); add_link_to_rhs (racc, link);
add_access_to_work_queue (racc);
/* Let's delay marking the areas as written until propagation of accesses /* Let's delay marking the areas as written until propagation of accesses
across link, unless the nature of rhs tells us that its data comes across link, unless the nature of rhs tells us that its data comes
from elsewhere. */ from elsewhere. */
...@@ -2118,7 +2120,6 @@ sort_and_splice_var_accesses (tree var) ...@@ -2118,7 +2120,6 @@ sort_and_splice_var_accesses (tree var)
access->grp_total_scalarization = total_scalarization; access->grp_total_scalarization = total_scalarization;
access->grp_partial_lhs = grp_partial_lhs; access->grp_partial_lhs = grp_partial_lhs;
access->grp_unscalarizable_region = unscalarizable_region; access->grp_unscalarizable_region = unscalarizable_region;
add_access_to_work_queue (access);
*prev_acc_ptr = access; *prev_acc_ptr = access;
prev_acc_ptr = &access->next_grp; prev_acc_ptr = &access->next_grp;
...@@ -2712,6 +2713,8 @@ propagate_all_subaccesses (void) ...@@ -2712,6 +2713,8 @@ propagate_all_subaccesses (void)
struct access *racc = pop_access_from_work_queue (); struct access *racc = pop_access_from_work_queue ();
struct assign_link *link; struct assign_link *link;
if (racc->group_representative)
racc= racc->group_representative;
gcc_assert (racc->first_link); gcc_assert (racc->first_link);
for (link = racc->first_link; link; link = link->next) for (link = racc->first_link; link; link = link->next)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment