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> 2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.md (load_call[sd]i): Redefine using :P. Add mode * 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])) if (cmp_code == GET_CODE (operands[0]))
{ {
op0 = force_reg (mode, cmp_operands[0]); op0 = cmp_operands[0];
op1 = cmp_operands[1]; op1 = cmp_operands[1];
} }
else else
{ {
op0 = force_reg (mode, cmp_operands[1]); op0 = cmp_operands[1];
op1 = cmp_operands[0]; 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); op1 = force_reg (mode, op1);
emit_insn (gen_rtx_TRAP_IF (VOIDmode, emit_insn (gen_rtx_TRAP_IF (VOIDmode,
gen_rtx_fmt_ee (cmp_code, GET_MODE (operands[0]), gen_rtx_fmt_ee (cmp_code, mode, op0, op1),
op0, op1),
operands[1])); operands[1]));
} }

View File

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

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> 2004-08-24 Paul Brook <paul@codesourcery.com>
* gfortran.dg/entry_2.f90: New test. * 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 (); }