From: rguenth Date: Tue, 17 Oct 2017 13:19:51 +0000 (+0000) Subject: 2017-10-17 Richard Biener X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=44e2f3328119c41881ec98107c9802d74bc58497;p=thirdparty%2Fgcc.git 2017-10-17 Richard Biener * graphite-scop-detection.c (scop_detection::stmt_has_simple_data_refs_p): Always use the full nest as region. (try_generate_gimple_bb): Likewise. * sese.c (scalar_evolution_in_region): Simplify now that SCEV can handle instantiation in regions. * tree-scalar-evolution.c (instantiate_scev_name): Also instantiate in the non-loop part of a function if requested. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253811 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 410755752728..52ffae41945a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2017-10-17 Richard Biener + + * graphite-scop-detection.c + (scop_detection::stmt_has_simple_data_refs_p): Always use + the full nest as region. + (try_generate_gimple_bb): Likewise. + * sese.c (scalar_evolution_in_region): Simplify now that + SCEV can handle instantiation in regions. + * tree-scalar-evolution.c (instantiate_scev_name): Also instantiate + in the non-loop part of a function if requested. + 2017-10-17 Richard Biener PR tree-optimization/82563 diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index ce6ab9545275..a8963e1dd817 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -1005,15 +1005,10 @@ scop_detection::graphite_can_represent_expr (sese_l scop, loop_p loop, bool scop_detection::stmt_has_simple_data_refs_p (sese_l scop, gimple *stmt) { - edge nest; + edge nest = scop.entry;; loop_p loop = loop_containing_stmt (stmt); if (!loop_in_sese_p (loop, scop)) - { - nest = scop.entry; - loop = NULL; - } - else - nest = loop_preheader_edge (outermost_loop_in_sese (scop, gimple_bb (stmt))); + loop = NULL; auto_vec drs; if (! graphite_find_data_references_in_stmt (nest, loop, stmt, &drs)) @@ -1381,15 +1376,10 @@ try_generate_gimple_bb (scop_p scop, basic_block bb) vec reads = vNULL; sese_l region = scop->scop_info->region; - edge nest; + edge nest = region.entry; loop_p loop = bb->loop_father; if (!loop_in_sese_p (loop, region)) - { - nest = region.entry; - loop = NULL; - } - else - nest = loop_preheader_edge (outermost_loop_in_sese (region, bb)); + loop = NULL; for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) diff --git a/gcc/sese.c b/gcc/sese.c index 8aa8015290dd..7fcda75a028c 100644 --- a/gcc/sese.c +++ b/gcc/sese.c @@ -459,41 +459,16 @@ scev_analyzable_p (tree def, sese_l ®ion) tree scalar_evolution_in_region (const sese_l ®ion, loop_p loop, tree t) { - gimple *def; - struct loop *def_loop; - /* SCOP parameters. */ if (TREE_CODE (t) == SSA_NAME && !defined_in_sese_p (t, region)) return t; - if (TREE_CODE (t) != SSA_NAME - || loop_in_sese_p (loop, region)) - /* FIXME: we would need instantiate SCEV to work on a region, and be more - flexible wrt. memory loads that may be invariant in the region. */ - return instantiate_scev (region.entry, loop, - analyze_scalar_evolution (loop, t)); - - def = SSA_NAME_DEF_STMT (t); - def_loop = loop_containing_stmt (def); - - if (loop_in_sese_p (def_loop, region)) - { - t = analyze_scalar_evolution (def_loop, t); - def_loop = superloop_at_depth (def_loop, loop_depth (loop) + 1); - t = compute_overall_effect_of_inner_loop (def_loop, t); - return t; - } - - bool has_vdefs = false; - if (invariant_in_sese_p_rec (t, region, &has_vdefs)) - return t; - - /* T variates in REGION. */ - if (has_vdefs) - return chrec_dont_know; + if (!loop_in_sese_p (loop, region)) + loop = NULL; - return instantiate_scev (region.entry, loop, t); + return instantiate_scev (region.entry, loop, + analyze_scalar_evolution (loop, t)); } /* Return true if BB is empty, contains only DEBUG_INSNs. */ diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index b6c1fcef6a18..b47b4ed77209 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -2358,11 +2358,9 @@ instantiate_scev_name (edge instantiate_below, struct loop *def_loop; basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (chrec)); - /* A parameter (or loop invariant and we do not want to include - evolutions in outer loops), nothing to do. */ + /* A parameter, nothing to do. */ if (!def_bb - || loop_depth (def_bb->loop_father) == 0 - || ! dominated_by_p (CDI_DOMINATORS, def_bb, instantiate_below->dest)) + || !dominated_by_p (CDI_DOMINATORS, def_bb, instantiate_below->dest)) return chrec; /* We cache the value of instantiated variable to avoid exponential