diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a000e5f31f..ed3db3e003e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2020-01-28 Richard Biener + + 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-01-28 H.J. Lu PR target/91399 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c08bc22b5a0..dfb7a0fb5b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-01-28 Richard Biener + + PR tree-optimization/93439 + * gfortran.dg/graphite/pr93439.f90: New testcase. + 2020-01-28 Sahahb Vahedi * gcc.target/arc/code-density-flag.c: New test diff --git a/gcc/testsuite/gfortran.dg/graphite/pr93439.f90 b/gcc/testsuite/gfortran.dg/graphite/pr93439.f90 new file mode 100644 index 00000000000..e815ab929e1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/graphite/pr93439.f90 @@ -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 diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index fd69b366bf4..f7b817d94e6 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3226,6 +3226,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 %qs", code_name); + debug_generic_stmt (expr); + return true; + } } else if (TREE_CODE (expr) == TARGET_MEM_REF) { @@ -3245,6 +3252,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 %qs", code_name); + debug_generic_stmt (expr); + return true; + } } else if (TREE_CODE (expr) == INDIRECT_REF) { @@ -7744,6 +7758,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. */ diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index d315b797a66..d9250d36c72 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -2202,7 +2202,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. */