Commit 9e525635 by Richard Henderson Committed by Richard Henderson

* loop.c (emit_iv_add_mult): Revert last change.

From-SVN: r33302
parent c52fbf0f
2000-04-20 Richard Henderson <rth@cygnus.com>
* loop.c (emit_iv_add_mult): Revert last change.
2000-04-20 Zack Weinberg <zack@wolery.cumb.org>
* cpplib.h (enum cpp_ttype): Add token types for all
......
......@@ -7640,24 +7640,11 @@ emit_iv_add_mult (b, m, a, reg, insert_before)
{
rtx seq;
rtx result;
rtx last;
rtx set;
rtx exp;
enum machine_mode mode = GET_MODE (reg);
/* Prevent unexpected sharing of these rtx. */
a = copy_rtx (a);
b = copy_rtx (b);
/* We may be faced to (plus (symbol_ref) (const_int)). We want to simplify
this to CONST rtx. */
exp = simplify_rtx (a);
if (exp)
a = exp;
exp = simplify_rtx (b);
if (exp)
b = exp;
/* Increase the lifetime of any invariants moved further in code. */
update_reg_last_use (a, insert_before);
update_reg_last_use (b, insert_before);
......@@ -7670,7 +7657,7 @@ emit_iv_add_mult (b, m, a, reg, insert_before)
seq = gen_sequence ();
end_sequence ();
last = emit_insn_before (seq, insert_before);
emit_insn_before (seq, insert_before);
/* It is entirely possible that the expansion created lots of new
registers. Iterate over the sequence we just created and
......@@ -7681,47 +7668,14 @@ emit_iv_add_mult (b, m, a, reg, insert_before)
int i;
for (i = 0; i < XVECLEN (seq, 0); ++i)
{
set = single_set (XVECEXP (seq, 0, i));
rtx set = single_set (XVECEXP (seq, 0, i));
if (set && GET_CODE (SET_DEST (set)) == REG)
record_base_value (REGNO (SET_DEST (set)), SET_SRC (set), 0);
}
last = XVECEXP (seq, 0, i - 1);
}
else
{
set = single_set (last);
if (set && GET_CODE (SET_DEST (set)) == REG)
record_base_value (REGNO (SET_DEST (set)), SET_SRC (set), 0);
}
if (!last)
return;
/* Sequence really ought to end by set storing final value to the register.
Attach note indicating expression we've just calculated to it. This is
important for second run of loop optimizer to understand strength reduced
givs from the first run. */
if (GET_CODE (last) != INSN)
abort();
set = single_set (last);
if (!set)
return;
if (SET_DEST (set) != reg)
abort();
/* In case we start to emit some usefull notes to these insns, get abort
here, since we need to decide what information is more important. */
if (find_reg_note (last, REG_EQUIV, NULL_RTX)
|| find_reg_note (last, REG_EQUAL, NULL_RTX))
abort();
/* Expression we've just caluclated. */
exp = simplify_gen_binary (PLUS, mode,
simplify_gen_binary (MULT, mode, b, m),
a);
REG_NOTES (last)
= gen_rtx_EXPR_LIST (REG_EQUAL,
exp,
REG_NOTES (last));
else if (GET_CODE (seq) == SET
&& GET_CODE (SET_DEST (seq)) == REG)
record_base_value (REGNO (SET_DEST (seq)), SET_SRC (seq), 0);
}
/* Test whether A * B can be computed without
......
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