diff options
author | Aditya Kumar <hiraditya@msn.com> | 2015-10-06 15:56:09 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2015-10-06 15:56:09 +0000 |
commit | 216cc294ef714ffc4634e7ac6139550515acae3a (patch) | |
tree | 821a193faee8968c0ce737e35bd1e68ee7355f15 /gcc/sese.c | |
parent | 8e4dc590c8878aaae1cdf5db6cbf84f8546b6511 (diff) | |
download | gcc-216cc294ef714ffc4634e7ac6139550515acae3a.zip gcc-216cc294ef714ffc4634e7ac6139550515acae3a.tar.gz gcc-216cc294ef714ffc4634e7ac6139550515acae3a.tar.bz2 |
Early exit to avoid redundant computations
Analyze only those bbs which are outside the region for uses which might be
defined inside the region. This is intended to improve the compile time. This
algorithm may be further improved by only looking at the successors of region as
these regions are sese. Added FIXMEs to make this improvement in future.
Passes regtest and bootstrap on x86_64.
gcc/ChangeLog:
2015-10-05 Aditya Kumar <hiraditya@msn.com>
* graphite-sese-to-poly.c (build_loop_iteration_domains): Only loops
which are in this region are passed so gcc_assert and remove redundant
computation.
* sese.c (sese_build_liveouts): Pass only those bbs which are not in region.
(sese_bad_liveouts_use): Only BBs which are not in region are passed so
gcc_assert on that and remove unnecessary computation.
(sese_build_liveouts_use): Same.
From-SVN: r228529
Diffstat (limited to 'gcc/sese.c')
-rw-r--r-- | gcc/sese.c | 32 |
1 files changed, 15 insertions, 17 deletions
@@ -134,20 +134,16 @@ static void sese_build_liveouts_use (sese region, bitmap liveouts, basic_block bb, tree use) { - unsigned ver; - basic_block def_bb; - + gcc_assert (!bb_in_sese_p (bb, region)); if (TREE_CODE (use) != SSA_NAME) return; - ver = SSA_NAME_VERSION (use); - def_bb = gimple_bb (SSA_NAME_DEF_STMT (use)); + basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (use)); - if (!def_bb - || !bb_in_sese_p (def_bb, region) - || bb_in_sese_p (bb, region)) + if (!def_bb || !bb_in_sese_p (def_bb, region)) return; + unsigned ver = SSA_NAME_VERSION (use); bitmap_set_bit (liveouts, ver); } @@ -188,24 +184,21 @@ static bool sese_bad_liveouts_use (sese region, bitmap liveouts, basic_block bb, tree use) { - unsigned ver; - basic_block def_bb; + gcc_assert (!bb_in_sese_p (bb, region)); if (TREE_CODE (use) != SSA_NAME) return false; - ver = SSA_NAME_VERSION (use); + unsigned ver = SSA_NAME_VERSION (use); /* If it's in liveouts, the variable will get a new PHI node, and the debug use will be properly adjusted. */ if (bitmap_bit_p (liveouts, ver)) return false; - def_bb = gimple_bb (SSA_NAME_DEF_STMT (use)); + basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (use)); - if (!def_bb - || !bb_in_sese_p (def_bb, region) - || bb_in_sese_p (bb, region)) + if (!def_bb || !bb_in_sese_p (def_bb, region)) return false; return true; @@ -247,11 +240,16 @@ sese_build_liveouts (sese region, bitmap liveouts) { basic_block bb; + /* FIXME: We could start iterating form the successor of sese. */ FOR_EACH_BB_FN (bb, cfun) - sese_build_liveouts_bb (region, liveouts, bb); + if (!bb_in_sese_p (bb, region)) + sese_build_liveouts_bb (region, liveouts, bb); + + /* FIXME: We could start iterating form the successor of sese. */ if (MAY_HAVE_DEBUG_STMTS) FOR_EACH_BB_FN (bb, cfun) - sese_reset_debug_liveouts_bb (region, liveouts, bb); + if (!bb_in_sese_p (bb, region)) + sese_reset_debug_liveouts_bb (region, liveouts, bb); } /* Builds a new SESE region from edges ENTRY and EXIT. */ |