tree-cfgcleanup.c (cleanup_tree_cfg_1): Fold into...
2018-06-04 Richard Biener <rguenther@suse.de> * tree-cfgcleanup.c (cleanup_tree_cfg_1): Fold into... (cleanup_tree_cfg_noloop): ... single caller. Do start_recording_case_labels later. From-SVN: r261145
This commit is contained in:
parent
5a6e3d7925
commit
1ccaa21f0c
@ -1,3 +1,9 @@
|
||||
2018-06-04 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-cfgcleanup.c (cleanup_tree_cfg_1): Fold into...
|
||||
(cleanup_tree_cfg_noloop): ... single caller. Do
|
||||
start_recording_case_labels later.
|
||||
|
||||
2018-06-04 Sebastian Peryt <sebastian.peryt@intel.com>
|
||||
|
||||
* config/i386/cldemoteintrin.h: Change define from _X86INTRIN_H_INCLUDED
|
||||
|
@ -757,66 +757,6 @@ cleanup_control_flow_pre ()
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Iterate the cfg cleanups, while anything changes. */
|
||||
|
||||
static bool
|
||||
cleanup_tree_cfg_1 (void)
|
||||
{
|
||||
bool retval = false;
|
||||
basic_block bb;
|
||||
unsigned i, n;
|
||||
|
||||
/* Prepare the worklists of altered blocks. */
|
||||
cfgcleanup_altered_bbs = BITMAP_ALLOC (NULL);
|
||||
|
||||
/* During forwarder block cleanup, we may redirect edges out of
|
||||
SWITCH_EXPRs, which can get expensive. So we want to enable
|
||||
recording of edge to CASE_LABEL_EXPR. */
|
||||
start_recording_case_labels ();
|
||||
|
||||
/* We cannot use FOR_EACH_BB_FN for the BB iterations below
|
||||
since the basic blocks may get removed. */
|
||||
|
||||
/* Start by iterating over all basic blocks in PRE order looking for
|
||||
edge removal opportunities. Do this first because incoming SSA form
|
||||
may be invalid and we want to avoid performing SSA related tasks such
|
||||
as propgating out a PHI node during BB merging in that state. */
|
||||
retval |= cleanup_control_flow_pre ();
|
||||
|
||||
/* After doing the above SSA form should be valid (or an update SSA
|
||||
should be required). */
|
||||
|
||||
/* Continue by iterating over all basic blocks looking for BB merging
|
||||
opportunities. */
|
||||
n = last_basic_block_for_fn (cfun);
|
||||
for (i = NUM_FIXED_BLOCKS; i < n; i++)
|
||||
{
|
||||
bb = BASIC_BLOCK_FOR_FN (cfun, i);
|
||||
if (bb)
|
||||
retval |= cleanup_tree_cfg_bb (bb);
|
||||
}
|
||||
|
||||
/* Now process the altered blocks, as long as any are available. */
|
||||
while (!bitmap_empty_p (cfgcleanup_altered_bbs))
|
||||
{
|
||||
i = bitmap_first_set_bit (cfgcleanup_altered_bbs);
|
||||
bitmap_clear_bit (cfgcleanup_altered_bbs, i);
|
||||
if (i < NUM_FIXED_BLOCKS)
|
||||
continue;
|
||||
|
||||
bb = BASIC_BLOCK_FOR_FN (cfun, i);
|
||||
if (!bb)
|
||||
continue;
|
||||
|
||||
retval |= cleanup_control_flow_bb (bb);
|
||||
retval |= cleanup_tree_cfg_bb (bb);
|
||||
}
|
||||
|
||||
end_recording_case_labels ();
|
||||
BITMAP_FREE (cfgcleanup_altered_bbs);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static bool
|
||||
mfb_keep_latches (edge e)
|
||||
{
|
||||
@ -833,10 +773,7 @@ cleanup_tree_cfg_noloop (void)
|
||||
|
||||
timevar_push (TV_TREE_CLEANUP_CFG);
|
||||
|
||||
/* Iterate until there are no more cleanups left to do. If any
|
||||
iteration changed the flowgraph, set CHANGED to true.
|
||||
|
||||
If dominance information is available, there cannot be any unreachable
|
||||
/* If dominance information is available, there cannot be any unreachable
|
||||
blocks. */
|
||||
if (!dom_info_available_p (CDI_DOMINATORS))
|
||||
{
|
||||
@ -907,7 +844,52 @@ cleanup_tree_cfg_noloop (void)
|
||||
}
|
||||
}
|
||||
|
||||
changed |= cleanup_tree_cfg_1 ();
|
||||
/* Prepare the worklists of altered blocks. */
|
||||
cfgcleanup_altered_bbs = BITMAP_ALLOC (NULL);
|
||||
|
||||
/* Start by iterating over all basic blocks in PRE order looking for
|
||||
edge removal opportunities. Do this first because incoming SSA form
|
||||
may be invalid and we want to avoid performing SSA related tasks such
|
||||
as propgating out a PHI node during BB merging in that state. */
|
||||
changed |= cleanup_control_flow_pre ();
|
||||
|
||||
/* After doing the above SSA form should be valid (or an update SSA
|
||||
should be required). */
|
||||
|
||||
/* During forwarder block cleanup, we may redirect edges out of
|
||||
SWITCH_EXPRs, which can get expensive. So we want to enable
|
||||
recording of edge to CASE_LABEL_EXPR. */
|
||||
start_recording_case_labels ();
|
||||
|
||||
/* Continue by iterating over all basic blocks looking for BB merging
|
||||
opportunities. We cannot use FOR_EACH_BB_FN for the BB iteration
|
||||
since the basic blocks may get removed. */
|
||||
unsigned n = last_basic_block_for_fn (cfun);
|
||||
for (unsigned i = NUM_FIXED_BLOCKS; i < n; i++)
|
||||
{
|
||||
basic_block bb = BASIC_BLOCK_FOR_FN (cfun, i);
|
||||
if (bb)
|
||||
changed |= cleanup_tree_cfg_bb (bb);
|
||||
}
|
||||
|
||||
/* Now process the altered blocks, as long as any are available. */
|
||||
while (!bitmap_empty_p (cfgcleanup_altered_bbs))
|
||||
{
|
||||
unsigned i = bitmap_first_set_bit (cfgcleanup_altered_bbs);
|
||||
bitmap_clear_bit (cfgcleanup_altered_bbs, i);
|
||||
if (i < NUM_FIXED_BLOCKS)
|
||||
continue;
|
||||
|
||||
basic_block bb = BASIC_BLOCK_FOR_FN (cfun, i);
|
||||
if (!bb)
|
||||
continue;
|
||||
|
||||
changed |= cleanup_control_flow_bb (bb);
|
||||
changed |= cleanup_tree_cfg_bb (bb);
|
||||
}
|
||||
|
||||
end_recording_case_labels ();
|
||||
BITMAP_FREE (cfgcleanup_altered_bbs);
|
||||
|
||||
gcc_assert (dom_info_available_p (CDI_DOMINATORS));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user