Commit 2fa4a849 by Kazu Hirata Committed by Kazu Hirata

gcse.c (fis_get_condition): Make it a global function.

	* gcse.c (fis_get_condition): Make it a global function.
	* reload1.c (reload_cse_move2add): Detect implicit sets.
	* rtl.h: Add a prototype for fis_get_condition.

From-SVN: r67814
parent 58ac1d7f
2003-06-12 Kazu Hirata <kazu@cs.umass.edu>
* gcse.c (fis_get_condition): Make it a global function.
* reload1.c (reload_cse_move2add): Detect implicit sets.
* rtl.h: Add a prototype for fis_get_condition.
2003-06-11 Richard Henderson <rth@redhat.com>
* stmt.c (expand_asm_operands): Don't warn for memories with
......
......@@ -611,7 +611,6 @@ static int load_killed_in_block_p PARAMS ((basic_block, int, rtx, int));
static void canon_list_insert PARAMS ((rtx, rtx, void *));
static int cprop_insn PARAMS ((rtx, int));
static int cprop PARAMS ((int));
static rtx fis_get_condition PARAMS ((rtx));
static void find_implicit_sets PARAMS ((void));
static int one_cprop_pass PARAMS ((int, int, int));
static bool constprop_register PARAMS ((rtx, rtx, rtx, int));
......@@ -4610,7 +4609,7 @@ cprop (alter_jumps)
recording the value of *every* register scaned by canonicalize_condition,
but this would require some code reorganization. */
static rtx
rtx
fis_get_condition (jump)
rtx jump;
{
......
......@@ -9314,6 +9314,30 @@ reload_cse_move2add (first)
}
}
note_stores (PATTERN (insn), move2add_note_store, NULL);
/* If INSN is a conditional branch, we try to extract an
implicit set out of it. */
if (any_condjump_p (insn) && onlyjump_p (insn))
{
rtx cnd = fis_get_condition (insn);
if (cnd != NULL_RTX
&& GET_CODE (cnd) == NE
&& GET_CODE (XEXP (cnd, 0)) == REG
/* The following two checks, which are also in
move2add_note_store, are intended to reduce the
number of calls to gen_rtx_SET to avoid memory
allocation if possible. */
&& SCALAR_INT_MODE_P (GET_MODE (XEXP (cnd, 0)))
&& HARD_REGNO_NREGS (REGNO (XEXP (cnd, 0)), GET_MODE (XEXP (cnd, 0))) == 1
&& GET_CODE (XEXP (cnd, 1)) == CONST_INT)
{
rtx implicit_set =
gen_rtx_SET (VOIDmode, XEXP (cnd, 0), XEXP (cnd, 1));
move2add_note_store (SET_DEST (implicit_set), implicit_set, 0);
}
}
/* If this is a CALL_INSN, all call used registers are stored with
unknown values. */
if (GET_CODE (insn) == CALL_INSN)
......
......@@ -2168,6 +2168,7 @@ extern rtx expand_mult_highpart PARAMS ((enum machine_mode, rtx,
/* In gcse.c */
extern bool can_copy_p PARAMS ((enum machine_mode));
extern rtx fis_get_condition PARAMS ((rtx));
#ifdef BUFSIZ
extern int gcse_main PARAMS ((rtx, FILE *));
extern int bypass_jumps PARAMS ((FILE *));
......
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