mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 15:11:08 +08:00
optabs.c (prepare_float_lib_cmp): Always attach a REG_EQUAL note to the comparison...
* optabs.c (prepare_float_lib_cmp): Always attach a REG_EQUAL note to the comparison, as emit_libcall_block calls copy_rtx on equiv. From-SVN: r72262
This commit is contained in:
parent
569fa502d1
commit
17796a89ab
@ -1,3 +1,8 @@
|
||||
2003-10-09 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* optabs.c (prepare_float_lib_cmp): Always attach a REG_EQUAL note
|
||||
to the comparison, as emit_libcall_block calls copy_rtx on equiv.
|
||||
|
||||
2003-10-09 Dorit Naishlos <dorit@il.ibm.com>
|
||||
|
||||
* haifa-sched.c (ok_for_early_schedule): New function.
|
||||
|
114
gcc/optabs.c
114
gcc/optabs.c
@ -3871,70 +3871,62 @@ prepare_float_lib_cmp (rtx *px, rtx *py, enum rtx_code *pcomparison,
|
||||
y = convert_to_mode (mode, y, 0);
|
||||
}
|
||||
|
||||
/* If we're optimizing attach a REG_EQUAL note describing the semantics
|
||||
of the libcall to the RTL. The allows the RTL optimizers to delete
|
||||
the libcall if the condition can be determined at compile-time. */
|
||||
if (optimize
|
||||
&& ! side_effects_p (x)
|
||||
&& ! side_effects_p (y))
|
||||
/* Attach a REG_EQUAL note describing the semantics of the libcall to
|
||||
the RTL. The allows the RTL optimizers to delete the libcall if the
|
||||
condition can be determined at compile-time. */
|
||||
if (comparison == UNORDERED)
|
||||
{
|
||||
if (comparison == UNORDERED)
|
||||
{
|
||||
rtx temp = simplify_gen_relational (NE, word_mode, mode, x, x);
|
||||
equiv = simplify_gen_relational (NE, word_mode, mode, y, y);
|
||||
equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode, word_mode,
|
||||
temp, const_true_rtx, equiv);
|
||||
}
|
||||
else
|
||||
{
|
||||
equiv = simplify_gen_relational (comparison, word_mode, mode, x, y);
|
||||
if (! FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison))
|
||||
{
|
||||
rtx true_rtx, false_rtx;
|
||||
|
||||
switch (comparison)
|
||||
{
|
||||
case EQ:
|
||||
true_rtx = const0_rtx;
|
||||
false_rtx = const_true_rtx;
|
||||
break;
|
||||
|
||||
case NE:
|
||||
true_rtx = const_true_rtx;
|
||||
false_rtx = const0_rtx;
|
||||
break;
|
||||
|
||||
case GT:
|
||||
true_rtx = const1_rtx;
|
||||
false_rtx = const0_rtx;
|
||||
break;
|
||||
|
||||
case GE:
|
||||
true_rtx = const0_rtx;
|
||||
false_rtx = constm1_rtx;
|
||||
break;
|
||||
|
||||
case LT:
|
||||
true_rtx = constm1_rtx;
|
||||
false_rtx = const0_rtx;
|
||||
break;
|
||||
|
||||
case LE:
|
||||
true_rtx = const0_rtx;
|
||||
false_rtx = const1_rtx;
|
||||
break;
|
||||
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode,
|
||||
word_mode, equiv,
|
||||
true_rtx, false_rtx);
|
||||
}
|
||||
}
|
||||
rtx temp = simplify_gen_relational (NE, word_mode, mode, x, x);
|
||||
equiv = simplify_gen_relational (NE, word_mode, mode, y, y);
|
||||
equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode, word_mode,
|
||||
temp, const_true_rtx, equiv);
|
||||
}
|
||||
else
|
||||
equiv = NULL_RTX;
|
||||
{
|
||||
equiv = simplify_gen_relational (comparison, word_mode, mode, x, y);
|
||||
if (! FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison))
|
||||
{
|
||||
rtx true_rtx, false_rtx;
|
||||
|
||||
switch (comparison)
|
||||
{
|
||||
case EQ:
|
||||
true_rtx = const0_rtx;
|
||||
false_rtx = const_true_rtx;
|
||||
break;
|
||||
|
||||
case NE:
|
||||
true_rtx = const_true_rtx;
|
||||
false_rtx = const0_rtx;
|
||||
break;
|
||||
|
||||
case GT:
|
||||
true_rtx = const1_rtx;
|
||||
false_rtx = const0_rtx;
|
||||
break;
|
||||
|
||||
case GE:
|
||||
true_rtx = const0_rtx;
|
||||
false_rtx = constm1_rtx;
|
||||
break;
|
||||
|
||||
case LT:
|
||||
true_rtx = constm1_rtx;
|
||||
false_rtx = const0_rtx;
|
||||
break;
|
||||
|
||||
case LE:
|
||||
true_rtx = const0_rtx;
|
||||
false_rtx = const1_rtx;
|
||||
break;
|
||||
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode, word_mode,
|
||||
equiv, true_rtx, false_rtx);
|
||||
}
|
||||
}
|
||||
|
||||
start_sequence ();
|
||||
value = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
|
||||
|
Loading…
x
Reference in New Issue
Block a user