diff options
author | Richard Biener <rguenther@suse.de> | 2017-09-27 11:09:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-09-27 11:09:41 +0000 |
commit | d2552094b8c0a8aaa92d831ee3de2a72cc20d642 (patch) | |
tree | 3e306d8393299ba97b86fc3fe866102ac26afda8 /gcc/graphite-scop-detection.c | |
parent | 04620f22b03308e89d0cc2ceefd8bc8eca19979d (diff) | |
download | gcc-d2552094b8c0a8aaa92d831ee3de2a72cc20d642.zip gcc-d2552094b8c0a8aaa92d831ee3de2a72cc20d642.tar.gz gcc-d2552094b8c0a8aaa92d831ee3de2a72cc20d642.tar.bz2 |
invoke.texi (graphite-max-bbs-per-function): Remove.
2017-09-27 Richard Biener <rguenther@suse.de>
* doc/invoke.texi (graphite-max-bbs-per-function): Remove.
(graphite-max-nb-scop-params): Document special value zero.
* domwalk.h (dom_walker::STOP): New symbolical constant.
(dom_walker::dom_walker): Add optional parameter for bb to
RPO mapping.
(dom_walker::~dom_walker): Declare.
(dom_walker::before_dom_children): Document STOP return value.
(dom_walker::m_user_bb_to_rpo): New member.
(dom_walker::m_bb_to_rpo): Likewise.
* domwalk.c (dom_walker::dom_walker): Compute bb to RPO
mapping here if not provided by the user.
(dom_walker::~dom_walker): Free bb to RPO mapping if not
provided by the user.
(dom_walker::STOP): Define.
(dom_walker::walk): Do not compute bb to RPO mapping here.
Support STOP return value from before_dom_children to stop
walking.
* graphite-optimize-isl.c (optimize_isl): If the schedule
is the same still generate code if -fgraphite-identity
or -floop-parallelize-all are given.
* graphite-scop-detection.c: Include cfganal.h.
(gather_bbs::gather_bbs): Get and pass through bb to RPO
mapping.
(gather_bbs::before_dom_children): Return STOP for BBs
not in the region.
(build_scops): Compute bb to RPO mapping and pass it to
the domwalk. Treat --param graphite-max-nb-scop-params=0
as not limiting the number of params.
* graphite.c (graphite_initialize): Remove limit on the
number of basic-blocks in a function.
* params.def (PARAM_GRAPHITE_MAX_BBS_PER_FUNCTION): Remove.
(PARAM_GRAPHITE_MAX_NB_SCOP_PARAMS): Adjust to documented
default value of 10.
From-SVN: r253226
Diffstat (limited to 'gcc/graphite-scop-detection.c')
-rw-r--r-- | gcc/graphite-scop-detection.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 90156bb..3b1492f 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-pass.h" #include "tree-ssa-propagate.h" #include "gimple-pretty-print.h" +#include "cfganal.h" #include "graphite.h" class debug_printer @@ -1544,7 +1545,7 @@ build_alias_set (scop_p scop) class gather_bbs : public dom_walker { public: - gather_bbs (cdi_direction, scop_p); + gather_bbs (cdi_direction, scop_p, int *); virtual edge before_dom_children (basic_block); virtual void after_dom_children (basic_block); @@ -1554,8 +1555,8 @@ private: scop_p scop; }; } -gather_bbs::gather_bbs (cdi_direction direction, scop_p scop) - : dom_walker (direction), scop (scop) +gather_bbs::gather_bbs (cdi_direction direction, scop_p scop, int *bb_to_rpo) + : dom_walker (direction, false, bb_to_rpo), scop (scop) { } @@ -1589,7 +1590,7 @@ gather_bbs::before_dom_children (basic_block bb) { sese_info_p region = scop->scop_info; if (!bb_in_sese_p (bb, region->region)) - return NULL; + return dom_walker::STOP; record_loop_in_sese (bb, region); @@ -1708,6 +1709,15 @@ build_scops (vec<scop_p> *scops) /* Now create scops from the lightweight SESEs. */ vec<sese_l> scops_l = sb.get_scops (); + + /* Domwalk needs a bb to RPO mapping. Compute it once here. */ + int *postorder = XNEWVEC (int, n_basic_blocks_for_fn (cfun)); + int postorder_num = pre_and_rev_post_order_compute (NULL, postorder, true); + int *bb_to_rpo = XNEWVEC (int, last_basic_block_for_fn (cfun)); + for (int i = 0; i < postorder_num; ++i) + bb_to_rpo[postorder[i]] = i; + free (postorder); + int i; sese_l *s; FOR_EACH_VEC_ELT (scops_l, i, s) @@ -1715,7 +1725,7 @@ build_scops (vec<scop_p> *scops) scop_p scop = new_scop (s->entry, s->exit); /* Record all basic blocks and their conditions in REGION. */ - gather_bbs (CDI_DOMINATORS, scop).walk (s->entry->dest); + gather_bbs (CDI_DOMINATORS, scop, bb_to_rpo).walk (s->entry->dest); /* domwalk does not fulfil our code-generations constraints on the order of pbb which is to produce sth like execution order, delaying @@ -1757,8 +1767,8 @@ build_scops (vec<scop_p> *scops) find_scop_parameters (scop); graphite_dim_t max_dim = PARAM_VALUE (PARAM_GRAPHITE_MAX_NB_SCOP_PARAMS); - - if (scop_nb_params (scop) > max_dim) + if (max_dim > 0 + && scop_nb_params (scop) > max_dim) { DEBUG_PRINT (dp << "[scop-detection-fail] too many parameters: " << scop_nb_params (scop) @@ -1771,6 +1781,7 @@ build_scops (vec<scop_p> *scops) scops->safe_push (scop); } + free (bb_to_rpo); DEBUG_PRINT (dp << "number of SCoPs: " << (scops ? scops->length () : 0);); } |