Avoid computing RPO for update_ssa
At some point when domwalk got the ability to use RPO for ordering dominator children we carefully avoided update_ssa eating the cost of RPO compute. Unfortunately some later consolidation of CTORs lost this again so the following makes this explicit via a special value to the bb_index_to_rpo argument of domwalk, speeding up update_ssa again. * domwalk.h (dom_walker::dom_walker): Update comment to reflect reality and new special argument value for bb_index_to_rpo. * domwalk.cc (dom_walker::dom_walker): Recognize -1 bb_index_to_rpo. * tree-into-ssa.cc (rewrite_update_dom_walker::rewrite_update_dom_walker): Tell dom_walker to not use RPO.
This commit is contained in:
parent
721aa2cc44
commit
aea329432b
|
@ -191,7 +191,8 @@ dom_walker::dom_walker (cdi_direction direction,
|
|||
m_reachability (reachability),
|
||||
m_user_bb_to_rpo (bb_index_to_rpo != NULL),
|
||||
m_unreachable_dom (NULL),
|
||||
m_bb_to_rpo (bb_index_to_rpo)
|
||||
m_bb_to_rpo (bb_index_to_rpo == (int *)(uintptr_t)-1
|
||||
? NULL : bb_index_to_rpo)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -272,7 +273,8 @@ void
|
|||
dom_walker::walk (basic_block bb)
|
||||
{
|
||||
/* Compute the basic-block index to RPO mapping lazily. */
|
||||
if (!m_bb_to_rpo
|
||||
if (!m_user_bb_to_rpo
|
||||
&& !m_bb_to_rpo
|
||||
&& m_dom_direction == CDI_DOMINATORS)
|
||||
{
|
||||
int *postorder = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
|
||||
|
|
|
@ -62,8 +62,9 @@ public:
|
|||
|
||||
/* You can provide a mapping of basic-block index to RPO if you
|
||||
have that readily available or you do multiple walks. If you
|
||||
specify NULL as BB_INDEX_TO_RPO dominator children will not be
|
||||
walked in RPO order. */
|
||||
specify NULL as BB_INDEX_TO_RPO this mapping will be computed
|
||||
lazily at walk time. If you specify -1 dominator children will
|
||||
not be walked in RPO order. */
|
||||
dom_walker (cdi_direction direction, enum reachability = ALL_BLOCKS,
|
||||
int *bb_index_to_rpo = NULL);
|
||||
|
||||
|
|
|
@ -2146,7 +2146,7 @@ class rewrite_update_dom_walker : public dom_walker
|
|||
{
|
||||
public:
|
||||
rewrite_update_dom_walker (cdi_direction direction)
|
||||
: dom_walker (direction, ALL_BLOCKS, NULL) {}
|
||||
: dom_walker (direction, ALL_BLOCKS, (int *)(uintptr_t)-1) {}
|
||||
|
||||
edge before_dom_children (basic_block) final override;
|
||||
void after_dom_children (basic_block) final override;
|
||||
|
|
Loading…
Reference in New Issue