Commit 1b6763cf by Jan Hubicka Committed by Jan Hubicka

cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed jumps post reload.

	* cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
	jumps post reload.
	* toplev.c (rest_of_compilation): Revert Richard's patch.

From-SVN: r53052
parent 16034e4b
Thu May 2 19:50:04 CEST 2002 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
jumps post reload.
* toplev.c (rest_of_compilation): Revert Richard's patch.
2001-05-02 John David Anglin <dave@hiauly1.hia.nrc.ca> 2001-05-02 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa/x-ada (ADA_CFLAGS): Rename to X_ADA_CFLAGS. * pa/x-ada (ADA_CFLAGS): Rename to X_ADA_CFLAGS.
......
...@@ -713,7 +713,7 @@ try_redirect_by_replacing_jump (e, target) ...@@ -713,7 +713,7 @@ try_redirect_by_replacing_jump (e, target)
basic_block src = e->src; basic_block src = e->src;
rtx insn = src->end, kill_from; rtx insn = src->end, kill_from;
edge tmp; edge tmp;
rtx set; rtx set, table;
int fallthru = 0; int fallthru = 0;
/* Verify that all targets will be TARGET. */ /* Verify that all targets will be TARGET. */
...@@ -723,6 +723,12 @@ try_redirect_by_replacing_jump (e, target) ...@@ -723,6 +723,12 @@ try_redirect_by_replacing_jump (e, target)
if (tmp || !onlyjump_p (insn)) if (tmp || !onlyjump_p (insn))
return false; return false;
if (reload_completed && JUMP_LABEL (insn)
&& (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX
&& GET_CODE (table) == JUMP_INSN
&& (GET_CODE (PATTERN (table)) == ADDR_VEC
|| GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
return false;
/* Avoid removing branch with side effects. */ /* Avoid removing branch with side effects. */
set = single_set (insn); set = single_set (insn);
......
...@@ -3313,7 +3313,8 @@ rest_of_compilation (decl) ...@@ -3313,7 +3313,8 @@ rest_of_compilation (decl)
splitting possibly introduced more crossjumping oppurtuntities. splitting possibly introduced more crossjumping oppurtuntities.
Except that we can't actually run crossjumping without running Except that we can't actually run crossjumping without running
another DCE pass, which we can't do after reg-stack. */ another DCE pass, which we can't do after reg-stack. */
cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK); cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK
| (flag_crossjumping ? CLEANUP_CROSSJUMP : 0));
if (flag_reorder_blocks) if (flag_reorder_blocks)
{ {
reorder_basic_blocks (); reorder_basic_blocks ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment