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:
parent
be659abd84
commit
886ce862cb
|
@ -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
|
||||||
|
|
|
@ -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]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,22 +414,13 @@
|
||||||
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")])
|
|
||||||
|
|
||||||
(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")])
|
[(set_attr "type" "trap")])
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 (); }
|
Loading…
Reference in New Issue