Commit b5832b43 by Jan Hubicka Committed by Jan Hubicka

Suggested by Richard Henderson and Richard Kenner:

	* combine.c (recog_for_combine): Use the fake recog
	only if instruction does not match.
	* rtl.h (NOOP_MOVE_INSN_CODE): New.
	* rtlanal.c (noop_move_p): Always return 1 for NOOP_MOVE_INSN_CODE.

	* combine.c (try_combine): Discover noop jump as direct jump.

From-SVN: r44464
parent 12285d9d
Sun Jul 29 21:38:45 CEST 2001 Jan Hubicka <jh@suse.cz>
Suggested by Richard Henderson and Richard Kenner:
* combine.c (recog_for_combine): Use the fake recog
only if instruction does not match.
* rtl.h (NOOP_MOVE_INSN_CODE): New.
* rtlanal.c (noop_move_p): Always return 1 for NOOP_MOVE_INSN_CODE.
* combine.c (try_combine): Discover noop jump as direct jump.
2001-07-29 Daniel Berlin <dan@cgsoftware.com> 2001-07-29 Daniel Berlin <dan@cgsoftware.com>
* df.c (df_rd_global_compute): Add successors to worklist, not * df.c (df_rd_global_compute): Add successors to worklist, not
......
...@@ -2763,7 +2763,10 @@ try_combine (i3, i2, i1, new_direct_jump_p) ...@@ -2763,7 +2763,10 @@ try_combine (i3, i2, i1, new_direct_jump_p)
BARRIER following it since it may have initially been a BARRIER following it since it may have initially been a
conditional jump. It may also be the last nonnote insn. */ conditional jump. It may also be the last nonnote insn. */
if (GET_CODE (newpat) == RETURN || any_uncondjump_p (i3)) if (GET_CODE (newpat) == RETURN || any_uncondjump_p (i3)
|| (GET_CODE (newpat) == SET
&& SET_SRC (newpat) == pc_rtx
&& SET_DEST (newpat) == pc_rtx))
{ {
*new_direct_jump_p = 1; *new_direct_jump_p = 1;
...@@ -9600,12 +9603,7 @@ recog_for_combine (pnewpat, insn, pnotes) ...@@ -9600,12 +9603,7 @@ recog_for_combine (pnewpat, insn, pnotes)
old_notes = REG_NOTES (insn); old_notes = REG_NOTES (insn);
REG_NOTES (insn) = 0; REG_NOTES (insn) = 0;
/* Is the result of combination a valid instruction? insn_code_number = recog (pat, insn, &num_clobbers_to_add);
Recognize all noop sets, these will be killed by followup pass. */
if (GET_CODE (pat) == SET && set_noop_p (pat))
insn_code_number = INT_MAX;
else
insn_code_number = recog (pat, insn, &num_clobbers_to_add);
/* If it isn't, there is the possibility that we previously had an insn /* If it isn't, there is the possibility that we previously had an insn
that clobbered some register as a side effect, but the combined that clobbered some register as a side effect, but the combined
...@@ -9630,13 +9628,13 @@ recog_for_combine (pnewpat, insn, pnotes) ...@@ -9630,13 +9628,13 @@ recog_for_combine (pnewpat, insn, pnotes)
if (pos == 1) if (pos == 1)
pat = XVECEXP (pat, 0, 0); pat = XVECEXP (pat, 0, 0);
/* Recognize all noop sets, these will be killed by followup pass. */ insn_code_number = recog (pat, insn, &num_clobbers_to_add);
if (GET_CODE (pat) == SET && set_noop_p (pat))
insn_code_number = INT_MAX;
else
insn_code_number = recog (pat, insn, &num_clobbers_to_add);
} }
/* Recognize all noop sets, these will be killed by followup pass. */
if (insn_code_number < 0 && GET_CODE (pat) == SET && set_noop_p (pat))
insn_code_number = NOOP_MOVE_INSN_CODE, num_clobbers_to_add = 0;
REG_NOTES (insn) = old_notes; REG_NOTES (insn) = old_notes;
/* If we had any clobbers to add, make a new pattern than contains /* If we had any clobbers to add, make a new pattern than contains
......
...@@ -35,6 +35,10 @@ struct function; ...@@ -35,6 +35,10 @@ struct function;
union tree_node; union tree_node;
#endif #endif
/* Value used by some passes to "recognize" noop moves as valid instructions.
*/
#define NOOP_MOVE_INSN_CODE INT_MAX
/* Register Transfer Language EXPRESSIONS CODES */ /* Register Transfer Language EXPRESSIONS CODES */
#define RTX_CODE enum rtx_code #define RTX_CODE enum rtx_code
......
...@@ -1030,6 +1030,9 @@ noop_move_p (insn) ...@@ -1030,6 +1030,9 @@ noop_move_p (insn)
{ {
rtx pat = PATTERN (insn); rtx pat = PATTERN (insn);
if (INSN_CODE (insn) == NOOP_MOVE_INSN_CODE)
return 1;
/* Insns carrying these notes are useful later on. */ /* Insns carrying these notes are useful later on. */
if (find_reg_note (insn, REG_EQUAL, NULL_RTX)) if (find_reg_note (insn, REG_EQUAL, NULL_RTX))
return 0; return 0;
......
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