mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-11 15:31:06 +08:00
Handle 2 preds for fin_bb in expand_omp_for_static_chunk
2015-09-03 Tom de Vries <tom@codesourcery.com> PR tree-optimization/65637 * omp-low.c (expand_omp_for_static_chunk): Handle case that fin_bb has 2 predecessors. * gcc.dg/autopar/reduc-4.c: New test. From-SVN: r227438
This commit is contained in:
parent
1b96e9a4bf
commit
17720e84bf
@ -1,3 +1,9 @@
|
||||
2015-09-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/65637
|
||||
* omp-low.c (expand_omp_for_static_chunk): Handle case that fin_bb has 2
|
||||
predecessors.
|
||||
|
||||
2015-09-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/65637
|
||||
|
@ -7035,7 +7035,7 @@ expand_omp_for_static_chunk (struct omp_region *region,
|
||||
se->probability = REG_BR_PROB_BASE / 2000 - 1;
|
||||
if (gimple_in_ssa_p (cfun))
|
||||
{
|
||||
int dest_idx = find_edge (entry_bb, fin_bb)->dest_idx;
|
||||
int dest_idx = find_edge (iter_part_bb, fin_bb)->dest_idx;
|
||||
for (gphi_iterator gpi = gsi_start_phis (fin_bb);
|
||||
!gsi_end_p (gpi); gsi_next (&gpi))
|
||||
{
|
||||
@ -7316,7 +7316,7 @@ expand_omp_for_static_chunk (struct omp_region *region,
|
||||
/* When we redirect the edge from trip_update_bb to iter_part_bb, we
|
||||
remove arguments of the phi nodes in fin_bb. We need to create
|
||||
appropriate phi nodes in iter_part_bb instead. */
|
||||
se = single_pred_edge (fin_bb);
|
||||
se = find_edge (iter_part_bb, fin_bb);
|
||||
re = single_succ_edge (trip_update_bb);
|
||||
vec<edge_var_map> *head = redirect_edge_var_map_vector (re);
|
||||
ene = single_succ_edge (entry_bb);
|
||||
@ -7331,6 +7331,10 @@ expand_omp_for_static_chunk (struct omp_region *region,
|
||||
phi = psi.phi ();
|
||||
t = gimple_phi_result (phi);
|
||||
gcc_assert (t == redirect_edge_var_map_result (vm));
|
||||
|
||||
if (!single_pred_p (fin_bb))
|
||||
t = copy_ssa_name (t, phi);
|
||||
|
||||
nphi = create_phi_node (t, iter_part_bb);
|
||||
|
||||
t = PHI_ARG_DEF_FROM_EDGE (phi, se);
|
||||
@ -7355,16 +7359,20 @@ expand_omp_for_static_chunk (struct omp_region *region,
|
||||
gcc_assert (inner_loop_phi != NULL);
|
||||
add_phi_arg (inner_loop_phi, gimple_phi_result (nphi),
|
||||
find_edge (seq_start_bb, body_bb), locus);
|
||||
|
||||
if (!single_pred_p (fin_bb))
|
||||
add_phi_arg (phi, gimple_phi_result (nphi), se, locus);
|
||||
}
|
||||
gcc_assert (gsi_end_p (psi) && (head == NULL || i == head->length ()));
|
||||
redirect_edge_var_map_clear (re);
|
||||
while (1)
|
||||
{
|
||||
psi = gsi_start_phis (fin_bb);
|
||||
if (gsi_end_p (psi))
|
||||
break;
|
||||
remove_phi_node (&psi, false);
|
||||
}
|
||||
if (single_pred_p (fin_bb))
|
||||
while (1)
|
||||
{
|
||||
psi = gsi_start_phis (fin_bb);
|
||||
if (gsi_end_p (psi))
|
||||
break;
|
||||
remove_phi_node (&psi, false);
|
||||
}
|
||||
|
||||
/* Make phi node for trip. */
|
||||
phi = create_phi_node (trip_main, iter_part_bb);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-09-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/65637
|
||||
* gcc.dg/autopar/reduc-4.c: New test.
|
||||
|
||||
2015-09-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/65637
|
||||
|
4
gcc/testsuite/gcc.dg/autopar/reduc-4.c
Normal file
4
gcc/testsuite/gcc.dg/autopar/reduc-4.c
Normal file
@ -0,0 +1,4 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized --param parloops-chunk-size=100" } */
|
||||
|
||||
#include "reduc-3.c"
|
Loading…
x
Reference in New Issue
Block a user