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