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>
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>
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)
link->lacc = lacc;
link->racc = racc;
add_link_to_rhs (racc, link);
add_access_to_work_queue (racc);
/* 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
from elsewhere. */
......@@ -2118,7 +2120,6 @@ sort_and_splice_var_accesses (tree var)
access->grp_total_scalarization = total_scalarization;
access->grp_partial_lhs = grp_partial_lhs;
access->grp_unscalarizable_region = unscalarizable_region;
add_access_to_work_queue (access);
*prev_acc_ptr = access;
prev_acc_ptr = &access->next_grp;
......@@ -2712,6 +2713,8 @@ propagate_all_subaccesses (void)
struct access *racc = pop_access_from_work_queue ();
struct assign_link *link;
if (racc->group_representative)
racc= racc->group_representative;
gcc_assert (racc->first_link);
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