Try to update dominance info in tree-call-cdce.c

Richard Sandiford richard.sandiford@arm.com
Fri Oct 30 12:16:00 GMT 2015


Richard Biener <richard.guenther@gmail.com> writes:
> On Fri, Oct 30, 2015 at 12:18 PM, Richard Sandiford
> <richard.sandiford@arm.com> wrote:
>> The pass would free the dominance info after making a change, but it
>> should be pretty easy to keep the information up-to-date when the call
>> has no EH edges.  In a way the main hurdle was split_block, which seemed
>> to assume that the new block would postdominate the old one, and that
>> all blocks immediately dominated by the old block are now immediately
>> dominated by the new one.
>>
>> Tested on x86_64-linux-gnu, arm-linux-gnueabi and aarch64-linux-gnu.
>> OK to install?
>
> Hmm, I don't understand why split_block needs to be touched.  The
> operation itself correctly updates dominator info.  It is up to the
> pass to fix things up if it does further CFG modifications that make
> the new block no longer post-dominate the old one.
>
> So why do you need the split_block change?

The updates we'd need here would be:

    redirect_immediate_dominators (CDI_DOMINATORS, call, guard_bb);

which undoes the earlier:

    redirect_immediate_dominators (CDI_DOMINATORS, guard_bb, call);

that split_block did.  It just seemed wasteful to call
redirect_immediate_dominators twice to get a no-op.

In other words, there are going to be callers to split_block that
know the second block isn't going to postdominate the first and
where the calling;

    redirect_immediate_dominators (CDI_DOMINATORS, first_block,
                                   second_block);

is taking us further from where we want to be.

Thanks,
Richard



More information about the Gcc-patches mailing list