jump.c (jump_optimize): Initialize mappings from INSN_UID to EH region if...
* jump.c (jump_optimize): Initialize mappings from INSN_UID to EH region if exceptions are enabled and we're performing cross jump optimizations. (find_cross_jump): Exit loop if the insns are in different EH regions. From-SVN: r23475
This commit is contained in:
parent
21af493bcd
commit
18f3f864d3
@ -1,3 +1,10 @@
|
||||
Sat Oct 31 12:30:02 1998 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* jump.c (jump_optimize): Initialize mappings from INSN_UID to
|
||||
EH region if exceptions are enabled and we're performing cross
|
||||
jump optimizations.
|
||||
(find_cross_jump): Exit loop if the insns are in different EH regions.
|
||||
|
||||
Sat Oct 31 10:02:48 1998 Mark Mitchell <mark@markmitchell.com>
|
||||
|
||||
* dwarf2out.c (output_call_frame_info): Use
|
||||
|
13
gcc/jump.c
13
gcc/jump.c
@ -182,6 +182,12 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
|
||||
|
||||
max_uid++;
|
||||
|
||||
/* If we are performing cross jump optimizations, then initialize
|
||||
tables mapping UIDs to EH regions to avoid incorrect movement
|
||||
of insns from one EH region to another. */
|
||||
if (flag_exceptions && cross_jump)
|
||||
init_insn_eh_region (f, max_uid);
|
||||
|
||||
/* Delete insns following barriers, up to next label. */
|
||||
|
||||
for (insn = f; insn;)
|
||||
@ -2715,6 +2721,13 @@ find_cross_jump (e1, e2, minimum, f1, f2)
|
||||
if (i2 == 0 || GET_CODE (i1) != GET_CODE (i2))
|
||||
break;
|
||||
|
||||
/* Avoid moving insns across EH regions if either of the insns
|
||||
can throw. */
|
||||
if (flag_exceptions
|
||||
&& (asynchronous_exceptions || GET_CODE (i1) == CALL_INSN)
|
||||
&& !in_same_eh_region (i1, i2))
|
||||
break;
|
||||
|
||||
p1 = PATTERN (i1);
|
||||
p2 = PATTERN (i2);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user