Commit 997e5af8 by Kazu Hirata Committed by Jeff Law

h8300.c (two_insn_adds_subs_operand): Improve code for detecting profitable adds/subs sequences.

        * h8300.c (two_insn_adds_subs_operand): Improve code for detecting
        profitable adds/subs sequences.

From-SVN: r35081
parent 3b15076f
......@@ -29,6 +29,9 @@ Mon Jul 17 02:37:06 2000 Marc Espie <espie@openbsd.org>
2000-07-17 Kazu Hirata <kazu@hxi.com>
* h8300.c (two_insn_adds_subs_operand): Improve code for detecting
profitable adds/subs sequences.
* fold-const.c: Fix comment typos.
2000-07-16 Laurynas Biveinis <lauras@softhome.net>
......
......@@ -626,25 +626,46 @@ call_insn_operand (op, mode)
return 0;
}
/* Return 1 if a addition/subtraction of a constant integer can be
transformed into two consecutive adds/subs that are faster than the
straightforward way. Otherwise, return 0. */
int
two_insn_adds_subs_operand (op, mode)
rtx op;
enum machine_mode mode ATTRIBUTE_UNUSED;
enum machine_mode mode;
{
if (GET_CODE (op) == CONST_INT)
{
HOST_WIDE_INT value = INTVAL (op);
/* Force VALUE to be positive so that we do not have to consider
the negative case. */
if (value < 0)
value = -value;
if (TARGET_H8300H || TARGET_H8300S)
{
if (value >= -8 && value < -4 && value != -7)
return 1;
if (value > 4 && value <= 8 && value != 7)
return 1;
/* A constant addition/subtraction takes 2 states in QImode,
4 states in HImode, and 6 states in SImode. Thus, the
only case we can win is when SImode is used, in which
case, two adds/subs is used, taking 4 states. */
if (mode == SImode
&& (value == 2 + 1
|| value == 4 + 1
|| value == 4 + 2
|| value == 4 + 4))
return 1;
}
else
{
if (value == -4 || value == -3 || value == 3 || value == 4)
/* A constant addition/subtraction takes 2 states in
QImode. It takes 6 states in HImode, requiring the
constant to be loaded to a register first, and a lot more
in SImode. Thus the only case we can win is when either
HImode or SImode is used. */
if (mode != QImode
&& (value == 2 + 1
|| value == 2 + 2))
return 1;
}
}
......
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