Richard,
I have a fix for PR50878.
A simplified form of the problem from the test-case of the PR is shown in this
cfg. Block 12 has as direct dominator block 5.
5
/ \
/ \
* *
6 7
| |
| |
* *
8 9
\ /
\ /
*
12
tail_merge_optimize finds that blocks 6 and 7 are duplicates. After replacing
block 7 by block 6, the cfg looks like this:
5
|
|
*
6
/ \
/ \
* *
8 9
\ /
\ /
*
12
The new direct dominator of block 12 is block 6, but the current algorithm only
recalculates dominator info for blocks 6, 8 and 9.
The patch fixes this by additionally recalculating the dominator info for blocks
immediately dominated by bb2 (block 6 in the example), if bb2 has a single
predecessor after replacement.
Bootstapped and reg-tested on x86_64 and i686. Build and reg-tested on MIPS and
ARM.
Ok for trunk?
Thanks,
- Tom
2011-10-30 Tom de Vries <[email protected]>
PR tree-optimization/50878
* tree-ssa-tail-merge.c (replace_block_by): Recalculate dominator info
for blocks immediately dominated by bb2, if bb2 has a single predecessor
after replacement.