alpha.c (alpha_emit_conditional_move): Fail if we discover we need a pseudo and no_new_pseudos is true.

* config/alpha/alpha.c (alpha_emit_conditional_move): Fail
        if we discover we need a pseudo and no_new_pseudos is true.
        * config/alpha/alpha.md (ne:DI insn): New.
        (trunctfsf2, sne): Emit NE instead of non-canonical LTU.

From-SVN: r32998
This commit is contained in:
Richard Henderson 2000-04-07 02:53:18 -07:00 committed by Richard Henderson
parent 0c99ec5c42
commit 000ca3735d
3 changed files with 23 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2000-04-07 Richard Henderson <rth@cygnus.com>
* config/alpha/alpha.c (alpha_emit_conditional_move): Fail
if we discover we need a pseudo and no_new_pseudos is true.
* config/alpha/alpha.md (ne:DI insn): New.
(trunctfsf2, sne): Emit NE instead of non-canonical LTU.
2000-04-07 Richard Henderson <rth@cygnus.com>
* rtl.def (COND_EXEC): New.

View File

@ -1769,11 +1769,14 @@ alpha_emit_conditional_move (cmp, mode)
&& (op0 == CONST0_RTX (cmp_mode) || op1 == CONST0_RTX (cmp_mode)))
return gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
/* We can't put the comparison insides a conditional move;
/* We can't put the comparison inside the conditional move;
emit a compare instruction and put that inside the
conditional move. Make sure we emit only comparisons we have;
swap or reverse as necessary. */
if (no_new_pseudos)
return NULL_RTX;
switch (code)
{
case EQ: case LE: case LT: case LEU: case LTU:

View File

@ -2240,7 +2240,7 @@
which prevents rounding error in the final conversion to SFmode. */
emit_insn (gen_rtx_SET (VOIDmode, sticky,
gen_rtx_LTU (DImode, const0_rtx, lo)));
gen_rtx_NE (DImode, lo, const0_rtx)));
emit_insn (gen_iordi3 (hi, hi, sticky));
emit_insn (gen_trunctfdf2 (tmpf, arg));
emit_insn (gen_truncdfsf2 (operands[0], tmpf));
@ -2495,6 +2495,14 @@
;; Next are all the integer comparisons, and conditional moves and branches
;; and some of the related define_expand's and define_split's.
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r")
(ne:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")
(const_int 0)))]
""
"cmpult $31,%1,%0"
[(set_attr "type" "icmp")])
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r")
(match_operator:DI 1 "alpha_comparison_operator"
@ -3314,7 +3322,9 @@
if (alpha_compare.op1 == const0_rtx)
{
emit_insn (gen_sgtu (operands[0]));
operands[1] = gen_rtx_NE (DImode, alpha_compare.op0, alpha_compare.op1);
alpha_compare.op0 = alpha_compare.op1 = NULL_RTX;
emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
DONE;
}