tree-optimization/93439 move clique bookkeeping to OMP expansion

Autopar was doing clique bookkeeping too early when creating destination
functions but then later introducing new cliques via versioning loops.
The following moves the bookkeeping to the actual outlining process.

2020-02-14  Richard Biener  <rguenther@suse.de>

	Backport from mainline
	2020-01-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/93439
	* tree-parloops.c (create_loop_fn): Move clique bookkeeping...
	* tree-cfg.c (move_sese_region_to_fn): ... here.
	(verify_types_in_gimple_reference): Verify used cliques are
	tracked.

	* gfortran.dg/graphite/pr93439.f90: New testcase.
This commit is contained in:
Richard Biener
2020-02-14 09:23:06 +01:00
parent 3bcda566d6
commit 03d2b1d797
5 changed files with 57 additions and 1 deletions

View File

@@ -1,3 +1,14 @@
2020-02-14 Richard Biener <rguenther@suse.de>
Backport from mainline
2020-01-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/93439
* tree-parloops.c (create_loop_fn): Move clique bookkeeping...
* tree-cfg.c (move_sese_region_to_fn): ... here.
(verify_types_in_gimple_reference): Verify used cliques are
tracked.
2020-02-14 Richard Biener <rguenther@suse.de>
Backport from mainline

View File

@@ -1,3 +1,11 @@
2020-02-14 Richard Biener <rguenther@suse.de>
Backport from mainline
2020-01-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/93439
* gfortran.dg/graphite/pr93439.f90: New testcase.
2020-02-14 Richard Biener <rguenther@suse.de>
Backport from mainline

View File

@@ -0,0 +1,21 @@
! { dg-additional-options "-O2 -floop-parallelize-all -floop-unroll-and-jam -ftree-parallelize-loops=2" }
module ai
integer, parameter :: dp = 8
contains
subroutine qu(ja, nq, en, p5)
real(kind = dp) :: nq(ja), en(ja), p5(ja)
call tl(ja, nq, en, p5)
end subroutine qu
subroutine tl(ja, nq, en, p5)
real(kind = dp) :: nq(9), en(9 * ja), p5(3 * ja)
do mc = 1, ja
do mb = 1, 9
do ma = 1, 3
p5((mc - 1) * 3 + ma) = p5((mc - 1) * 3 + ma) - 1
end do
end do
end do
end subroutine tl
end module ai

View File

@@ -3215,6 +3215,13 @@ verify_types_in_gimple_reference (tree expr, bool require_lvalue)
debug_generic_stmt (expr);
return true;
}
if (MR_DEPENDENCE_CLIQUE (expr) != 0
&& MR_DEPENDENCE_CLIQUE (expr) > cfun->last_clique)
{
error ("invalid clique in MEM_REF");
debug_generic_stmt (expr);
return true;
}
}
else if (TREE_CODE (expr) == TARGET_MEM_REF)
{
@@ -3234,6 +3241,13 @@ verify_types_in_gimple_reference (tree expr, bool require_lvalue)
debug_generic_stmt (expr);
return true;
}
if (MR_DEPENDENCE_CLIQUE (expr) != 0
&& MR_DEPENDENCE_CLIQUE (expr) > cfun->last_clique)
{
error ("invalid clique in TARGET_MEM_REF");
debug_generic_stmt (expr);
return true;
}
}
else if (TREE_CODE (expr) == INDIRECT_REF)
{
@@ -7677,6 +7691,9 @@ move_sese_region_to_fn (struct function *dest_cfun, basic_block entry_bb,
after = bb;
}
/* Adjust the maximum clique used. */
dest_cfun->last_clique = saved_cfun->last_clique;
loop->aux = NULL;
loop0->aux = NULL;
/* Loop sizes are no longer correct, fix them up. */

View File

@@ -1498,7 +1498,6 @@ create_loop_fn (location_t loc)
DECL_ARGUMENTS (decl) = t;
allocate_struct_function (decl, false);
DECL_STRUCT_FUNCTION (decl)->last_clique = act_cfun->last_clique;
/* The call to allocate_struct_function clobbers CFUN, so we need to restore
it. */