Commit 6b132673 by Richard Henderson Committed by Richard Henderson

optabs.c (lowpart_subreg_maybe_copy): New.

        * optabs.c (lowpart_subreg_maybe_copy): New.
        (expand_unop, expand_abs_nojump): Use it.

From-SVN: r91650
parent dea1c1c5
2004-12-02 Richard Henderson <rth@redhat.com>
* optabs.c (lowpart_subreg_maybe_copy): New.
(expand_unop, expand_abs_nojump): Use it.
2004-12-02 J"orn Rennecke <joern.rennecke@st.com>
* sh.md (extv, extzv): Add pattern predicate.
......
......@@ -2131,6 +2131,26 @@ expand_parity (enum machine_mode mode, rtx op0, rtx target)
return 0;
}
/* Extract the OMODE lowpart from VAL, which has IMODE. Under certain
conditions, VAL may already be a SUBREG against which we cannot generate
a further SUBREG. In this case, we expect forcing the value into a
register will work around the situation. */
static rtx
lowpart_subreg_maybe_copy (enum machine_mode omode, rtx val,
enum machine_mode imode)
{
rtx ret;
ret = lowpart_subreg (omode, val, imode);
if (ret == NULL)
{
val = force_reg (imode, val);
ret = lowpart_subreg (omode, val, imode);
gcc_assert (ret != NULL);
}
return ret;
}
/* Generate code to perform an operation specified by UNOPTAB
on operand OP0, with result having machine-mode MODE.
......@@ -2322,7 +2342,8 @@ expand_unop (enum machine_mode mode, optab unoptab, rtx op0, rtx target,
rtx insn;
if (target == 0)
target = gen_reg_rtx (mode);
insn = emit_move_insn (target, gen_lowpart (mode, temp));
temp = lowpart_subreg_maybe_copy (mode, temp, imode);
insn = emit_move_insn (target, temp);
set_unique_reg_note (insn, REG_EQUAL,
gen_rtx_fmt_e (NEG, mode,
copy_rtx (op0)));
......@@ -2513,7 +2534,8 @@ expand_abs_nojump (enum machine_mode mode, rtx op0, rtx target,
rtx insn;
if (target == 0)
target = gen_reg_rtx (mode);
insn = emit_move_insn (target, gen_lowpart (mode, temp));
temp = lowpart_subreg_maybe_copy (mode, temp, imode);
insn = emit_move_insn (target, temp);
set_unique_reg_note (insn, REG_EQUAL,
gen_rtx_fmt_e (ABS, mode,
copy_rtx (op0)));
......
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