From patchwork Mon Aug 23 18:50:53 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Speed-up loop blocking: strip-mining is always legal. From: Sebastian Pop X-Patchwork-Id: 62504 Message-Id: <1282589453-18405-2-git-send-email-sebpop@gmail.com> To: gcc-patches@gcc.gnu.org Cc: gcc-graphite@googlegroups.com, Sebastian Pop Date: Mon, 23 Aug 2010 13:50:53 -0500 2010-08-23 Sebastian Pop * graphite-blocking.c (scop_do_strip_mine): Do not call graphite_legal_transform. (scop_do_block): Same. --- gcc/ChangeLog.graphite | 6 ++++++ gcc/graphite-blocking.c | 29 +++++++---------------------- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index e351bbf..4d03474 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,9 @@ +2010-08-23 Sebastian Pop + + * graphite-blocking.c (scop_do_strip_mine): Do not call + graphite_legal_transform. + (scop_do_block): Same. + 2010-08-20 Vladimir Kargov * graphite-scop-detection.c (graphite_can_represent_loop): Correct the diff --git a/gcc/graphite-blocking.c b/gcc/graphite-blocking.c index deb25ec..6a8b88a 100644 --- a/gcc/graphite-blocking.c +++ b/gcc/graphite-blocking.c @@ -254,28 +254,13 @@ lst_do_strip_mine (lst_p lst) return res; } -/* Strip mines all the loops in SCOP. Nothing profitable in all this: - this is just a driver function. */ +/* Strip mines all the loops in SCOP. Returns true when some loops + have been strip-mined. */ bool scop_do_strip_mine (scop_p scop) { - bool transform_done = false; - - store_scattering (scop); - - transform_done = lst_do_strip_mine (SCOP_TRANSFORMED_SCHEDULE (scop)); - - if (!transform_done) - return false; - - if (!graphite_legal_transform (scop)) - { - restore_scattering (scop); - return false; - } - - return transform_done; + return lst_do_strip_mine (SCOP_TRANSFORMED_SCHEDULE (scop)); } /* Loop blocks all the loops in SCOP. Returns true when we manage to @@ -292,10 +277,10 @@ scop_do_block (scop_p scop) strip_mined = lst_do_strip_mine (SCOP_TRANSFORMED_SCHEDULE (scop)); interchanged = scop_do_interchange (scop); - /* If we don't interchange loops, then the strip mine is not - profitable, and the transform is not a loop blocking. */ - if (!interchanged - || !graphite_legal_transform (scop)) + /* If we don't interchange loops, the strip mine alone will not be + profitable, and the transform is not a loop blocking: so revert + the transform. */ + if (!interchanged) { restore_scattering (scop); return false;