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