cse.c (cse_altered): Remove.
* cse.c (cse_altered): Remove. (record_jump_equiv): Make true/false argument a bool instead of an int. (cse_insn): Don't set cse_altered. Use delete_insn_and_edges where appropriate. Emit a new jump before the existing one instead of after so that delete_insn_and_edges removes the dead edges properly. Check any_condjump_p before calling record_jump_equiv. (cse_basic_block): Check any_condjump_p before calling record_jump_equiv. (cse_main): Don't set/check cse_altered. Remove USE_C_ALLOCA. From-SVN: r119209
This commit is contained in:
parent
bbe7da4a15
commit
0129d079d0
@ -1,3 +1,17 @@
|
||||
2006-11-25 Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
* cse.c (cse_altered): Remove.
|
||||
(record_jump_equiv): Make true/false argument a bool instead
|
||||
of an int.
|
||||
(cse_insn): Don't set cse_altered. Use delete_insn_and_edges
|
||||
where appropriate. Emit a new jump before the existing one
|
||||
instead of after so that delete_insn_and_edges removes the
|
||||
dead edges properly. Check any_condjump_p before calling
|
||||
record_jump_equiv.
|
||||
(cse_basic_block): Check any_condjump_p before calling
|
||||
record_jump_equiv.
|
||||
(cse_main): Don't set/check cse_altered. Remove USE_C_ALLOCA.
|
||||
|
||||
2006-11-25 Brooks Moses <brooks.moses@codesourcery.com>
|
||||
|
||||
* c.opt: Remove -ffixed-form, -ffixed-line-length-none, and
|
||||
|
43
gcc/cse.c
43
gcc/cse.c
@ -371,11 +371,6 @@ static int max_uid;
|
||||
|
||||
#define INSN_CUID(INSN) (uid_cuid[INSN_UID (INSN)])
|
||||
|
||||
/* Nonzero if this pass has made changes, and therefore it's
|
||||
worthwhile to run the garbage collector. */
|
||||
|
||||
static int cse_altered;
|
||||
|
||||
/* Nonzero if cse has altered conditional jump insns
|
||||
in such a way that jump optimization should be redone. */
|
||||
|
||||
@ -603,7 +598,7 @@ static enum rtx_code find_comparison_args (enum rtx_code, rtx *, rtx *,
|
||||
enum machine_mode *);
|
||||
static rtx fold_rtx (rtx, rtx);
|
||||
static rtx equiv_constant (rtx);
|
||||
static void record_jump_equiv (rtx, int);
|
||||
static void record_jump_equiv (rtx, bool);
|
||||
static void record_jump_cond (enum rtx_code, enum machine_mode, rtx, rtx,
|
||||
int);
|
||||
static void cse_insn (rtx, rtx);
|
||||
@ -3694,8 +3689,8 @@ equiv_constant (rtx x)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Given INSN, a jump insn, PATH_TAKEN indicates if we are following the "taken"
|
||||
branch. It will be zero if not.
|
||||
/* Given INSN, a jump insn, TAKEN indicates if we are following the
|
||||
"taken" branch.
|
||||
|
||||
In certain cases, this can cause us to add an equivalence. For example,
|
||||
if we are following the taken case of
|
||||
@ -3706,7 +3701,7 @@ equiv_constant (rtx x)
|
||||
comparison is seen later, we will know its value. */
|
||||
|
||||
static void
|
||||
record_jump_equiv (rtx insn, int taken)
|
||||
record_jump_equiv (rtx insn, bool taken)
|
||||
{
|
||||
int cond_known_true;
|
||||
rtx op0, op1;
|
||||
@ -3716,8 +3711,8 @@ record_jump_equiv (rtx insn, int taken)
|
||||
enum rtx_code code;
|
||||
|
||||
/* Ensure this is the right kind of insn. */
|
||||
if (! any_condjump_p (insn))
|
||||
return;
|
||||
gcc_assert (any_condjump_p (insn));
|
||||
|
||||
set = pc_set (insn);
|
||||
|
||||
/* See if this jump condition is known true or false. */
|
||||
@ -4942,7 +4937,6 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
/* If we made a change, recompute SRC values. */
|
||||
if (src != sets[i].src)
|
||||
{
|
||||
cse_altered = 1;
|
||||
do_not_record = 0;
|
||||
hash_arg_in_memory = 0;
|
||||
sets[i].src = src;
|
||||
@ -5044,7 +5038,7 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
else if (n_sets == 1 && dest == pc_rtx && src == pc_rtx)
|
||||
{
|
||||
/* One less use of the label this insn used to jump to. */
|
||||
delete_insn (insn);
|
||||
delete_insn_and_edges (insn);
|
||||
cse_jumps_altered = 1;
|
||||
/* No more processing for this set. */
|
||||
sets[i].rtl = 0;
|
||||
@ -5071,7 +5065,7 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
{
|
||||
rtx new, note;
|
||||
|
||||
new = emit_jump_insn_after (gen_jump (XEXP (src, 0)), insn);
|
||||
new = emit_jump_insn_before (gen_jump (XEXP (src, 0)), insn);
|
||||
JUMP_LABEL (new) = XEXP (src, 0);
|
||||
LABEL_NUSES (XEXP (src, 0))++;
|
||||
|
||||
@ -5083,7 +5077,7 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
REG_NOTES (new) = note;
|
||||
}
|
||||
|
||||
delete_insn (insn);
|
||||
delete_insn_and_edges (insn);
|
||||
insn = new;
|
||||
|
||||
/* Now emit a BARRIER after the unconditional jump. */
|
||||
@ -5636,10 +5630,8 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
/* If this is a conditional jump insn, record any known equivalences due to
|
||||
the condition being tested. */
|
||||
|
||||
if (JUMP_P (insn)
|
||||
&& n_sets == 1 && GET_CODE (x) == SET
|
||||
&& GET_CODE (SET_SRC (x)) == IF_THEN_ELSE)
|
||||
record_jump_equiv (insn, 0);
|
||||
if (n_sets == 1 && any_condjump_p (insn))
|
||||
record_jump_equiv (insn, false);
|
||||
|
||||
#ifdef HAVE_cc0
|
||||
/* If the previous insn set CC0 and this insn no longer references CC0,
|
||||
@ -5649,7 +5641,7 @@ cse_insn (rtx insn, rtx libcall_insn)
|
||||
&& (tem = single_set (prev_insn)) != 0
|
||||
&& SET_DEST (tem) == cc0_rtx
|
||||
&& ! reg_mentioned_p (cc0_rtx, x))
|
||||
delete_insn (prev_insn);
|
||||
delete_insn_and_edges (prev_insn);
|
||||
|
||||
prev_insn_cc0 = this_insn_cc0;
|
||||
prev_insn_cc0_mode = this_insn_cc0_mode;
|
||||
@ -6016,7 +6008,6 @@ cse_main (rtx f, int nregs)
|
||||
insn = f;
|
||||
while (insn)
|
||||
{
|
||||
cse_altered = 0;
|
||||
cse_end_of_basic_block (insn, &val, flag_cse_follow_jumps);
|
||||
|
||||
/* If this basic block was already processed or has no sets, skip it. */
|
||||
@ -6062,13 +6053,6 @@ cse_main (rtx f, int nregs)
|
||||
|
||||
cse_jumps_altered |= old_cse_jumps_altered;
|
||||
}
|
||||
|
||||
if (cse_altered)
|
||||
ggc_collect ();
|
||||
|
||||
#ifdef USE_C_ALLOCA
|
||||
alloca (0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Clean up. */
|
||||
@ -6130,7 +6114,8 @@ cse_basic_block (rtx from, rtx to, struct branch_path *next_branch)
|
||||
if (status != PATH_NOT_TAKEN)
|
||||
{
|
||||
gcc_assert (status == PATH_TAKEN);
|
||||
record_jump_equiv (insn, 1);
|
||||
if (any_condjump_p (insn))
|
||||
record_jump_equiv (insn, true);
|
||||
|
||||
/* Set the last insn as the jump insn; it doesn't affect cc0.
|
||||
Then follow this branch. */
|
||||
|
Loading…
Reference in New Issue
Block a user