mips.c (mips_gen_conditional_trap): Fix mode.

* config/mips/mips.c (mips_gen_conditional_trap): Fix mode.
	* config/mips/mips.md (*conditional_trap[sd]i): Name previously unnamed
	patterns.  Redefine using :GPR.  Give the match_operator a mode.
	Use '%2' rather than '%z2' for operand 2.

From-SVN: r86511
This commit is contained in:
Richard Sandiford 2004-08-24 20:04:57 +00:00 committed by Richard Sandiford
parent be659abd84
commit 886ce862cb
5 changed files with 29 additions and 22 deletions

View File

@ -1,3 +1,10 @@
2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.c (mips_gen_conditional_trap): Fix mode.
* config/mips/mips.md (*conditional_trap[sd]i): Name previously unnamed
patterns. Redefine using :GPR. Give the match_operator a mode.
Use '%2' rather than '%z2' for operand 2.
2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.md (load_call[sd]i): Redefine using :P. Add mode

View File

@ -2578,20 +2578,20 @@ mips_gen_conditional_trap (rtx *operands)
}
if (cmp_code == GET_CODE (operands[0]))
{
op0 = force_reg (mode, cmp_operands[0]);
op0 = cmp_operands[0];
op1 = cmp_operands[1];
}
else
{
op0 = force_reg (mode, cmp_operands[1]);
op0 = cmp_operands[1];
op1 = cmp_operands[0];
}
if (GET_CODE (op1) == CONST_INT && ! SMALL_INT (op1))
op0 = force_reg (mode, op0);
if (!arith_operand (op1, mode))
op1 = force_reg (mode, op1);
emit_insn (gen_rtx_TRAP_IF (VOIDmode,
gen_rtx_fmt_ee (cmp_code, GET_MODE (operands[0]),
op0, op1),
gen_rtx_fmt_ee (cmp_code, mode, op0, op1),
operands[1]));
}

View File

@ -396,7 +396,7 @@
else
return "break";
}
[(set_attr "type" "trap")])
[(set_attr "type" "trap")])
(define_expand "conditional_trap"
[(trap_if (match_operator 0 "comparison_operator"
@ -404,7 +404,8 @@
(match_operand 1 "const_int_operand"))]
"ISA_HAS_COND_TRAP"
{
if (operands[1] == const0_rtx)
if (GET_MODE_CLASS (GET_MODE (cmp_operands[0])) == MODE_INT
&& operands[1] == const0_rtx)
{
mips_gen_conditional_trap (operands);
DONE;
@ -413,23 +414,14 @@
FAIL;
})
(define_insn ""
[(trap_if (match_operator 0 "trap_comparison_operator"
[(match_operand:SI 1 "reg_or_0_operand" "dJ")
(match_operand:SI 2 "arith_operand" "dI")])
(define_insn "*conditional_trap<mode>"
[(trap_if (match_operator:GPR 0 "trap_comparison_operator"
[(match_operand:GPR 1 "reg_or_0_operand" "dJ")
(match_operand:GPR 2 "arith_operand" "dI")])
(const_int 0))]
"ISA_HAS_COND_TRAP"
"t%C0\t%z1,%z2"
[(set_attr "type" "trap")])
(define_insn ""
[(trap_if (match_operator 0 "trap_comparison_operator"
[(match_operand:DI 1 "reg_or_0_operand" "dJ")
(match_operand:DI 2 "arith_operand" "dI")])
(const_int 0))]
"TARGET_64BIT && ISA_HAS_COND_TRAP"
"t%C0\t%z1,%z2"
[(set_attr "type" "trap")])
"t%C0\t%z1,%2"
[(set_attr "type" "trap")])
;;
;; ....................

View File

@ -1,3 +1,7 @@
2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* gcc.c-torture/compile/iftrap-3.c: New test.
2004-08-24 Paul Brook <paul@codesourcery.com>
* gfortran.dg/entry_2.f90: New test.

View File

@ -0,0 +1,4 @@
/* Check that the conditional_trap pattern handles floating-point
comparisons correctly. */
void f1 (float x, float y) { if (x == y) __builtin_trap (); }
void f2 (double x, double y) { if (x == y) __builtin_trap (); }