Commit 9beb7d20 by Richard Henderson Committed by Richard Henderson

cse.c (cse_insn): Avoid subreg games if the equivalence is already in the proper mode.

        * cse.c (cse_insn): Avoid subreg games if the equivalence
        is already in the proper mode.

From-SVN: r56819
parent a038cc83
2002-09-04 Richard Henderson <rth@redhat.com>
* cse.c (cse_insn): Avoid subreg games if the equivalence
is already in the proper mode.
2002-09-04 Eric Botcazou <ebotcazou@multimania.com>
PR c/7102
......
......@@ -6203,14 +6203,23 @@ cse_insn (insn, libcall_insn)
&& ! exp_equiv_p (elt->exp, elt->exp, 1, 0))
continue;
/* Calculate big endian correction for the SUBREG_BYTE
(or equivalent). We have already checked that M1
( GET_MODE (dest) ) is not narrower than M2 (new_mode). */
if (BYTES_BIG_ENDIAN)
byte = (GET_MODE_SIZE (GET_MODE (dest))
- GET_MODE_SIZE (new_mode));
new_src = simplify_gen_subreg (new_mode, elt->exp,
GET_MODE (dest), byte);
/* We may have already been playing subreg games. If the
mode is already correct for the destination, use it. */
if (GET_MODE (elt->exp) == new_mode)
new_src = elt->exp;
else
{
/* Calculate big endian correction for the SUBREG_BYTE.
We have already checked that M1 (GET_MODE (dest))
is not narrower than M2 (new_mode). */
if (BYTES_BIG_ENDIAN)
byte = (GET_MODE_SIZE (GET_MODE (dest))
- GET_MODE_SIZE (new_mode));
new_src = simplify_gen_subreg (new_mode, elt->exp,
GET_MODE (dest), byte);
}
/* The call to simplify_gen_subreg fails if the value
is VOIDmode, yet we can't do any simplification, e.g.
for EXPR_LISTs denoting function call results.
......
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