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:
parent
0c99ec5c42
commit
000ca3735d
@ -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.
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user