PATCH to squeeze_notes
Jason Merrill
jason_merrill@redhat.com
Wed Aug 22 07:51:00 GMT 2001
g++.law/cvt7.C was failing with -g -O2 due to block note nesting problems.
I eventually tracked this down to a problem with squeeze_notes being called
with a block note as the END parm, which it does not claim to handle. This
was due to tidy_fallthru_edge removing some interesting insns at the end of
a block, leaving the block note exposed. I tried fixing that and adding an
abort to enforce the rule about END not being a squeezable note, but that
broke dead_or_predicable, which tries to handle that situation itself.
It seems to me that the right answer is just to fix squeeze_notes to handle
END being a squeezable note, changing start and end to pass by reference.
At the same time, I've changed merge_blocks_move_predecessor_* to actually
update the start (and now end) pointers in the basic block info, not just
local copies; when we actually go to merge the blocks, we need those
pointers to be correct. I assume it used to work by accident--it broke
with my initial patch.
Booted and tested i686-pc-linux-gnu.
2001-08-22 Jason Merrill <jason_merrill@redhat.com>
* jump.c (squeeze_notes): Take parms by reference. Handle END being
a squeezable note.
* rtl.h: Adjust.
* ifcvt.c (dead_or_predicable): Adjust.
* loop.c (find_and_verify_loops): Adjust.
* stmt.c (expand_end_case): Adjust.
* flow.c (merge_blocks_move_successor_nojumps): Adjust. Modify the
head and end insn pointers in the basic block, not just local copies.
(merge_blocks_move_predecessor_nojumps): Likewise.
More information about the Gcc-patches
mailing list