From 805f169411c36a862b57cc888038b03424dbfb0c Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Mon, 10 Dec 2001 22:52:26 +0000 Subject: [PATCH] combine.c (known_cond): Check mode of each operand to determine if COND is comparing floating point values. * combine.c (known_cond): Check mode of each operand to determine if COND is comparing floating point values. From-SVN: r47855 --- gcc/ChangeLog | 5 +++++ gcc/combine.c | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a862ed7a866..c519c15c4ba 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Dec 10 15:54:27 2001 Jeffrey A Law (law@cygnus.com) + + * combine.c (known_cond): Check mode of each operand to determine + if COND is comparing floating point values. + 2001-12-10 David Edelsohn * rs6000.h (processor_type): Add PPC405. diff --git a/gcc/combine.c b/gcc/combine.c index ee279196fc3..0e15def1fa8 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -7351,8 +7351,14 @@ known_cond (x, cond, reg, val) if (side_effects_p (x)) return x; - if (cond == EQ && rtx_equal_p (x, reg) && !FLOAT_MODE_P (cond)) + /* If either operand of the condition is a floating point value, + then we have to avoid collapsing an EQ comparison. */ + if (cond == EQ + && rtx_equal_p (x, reg) + && ! FLOAT_MODE_P (GET_MODE (x)) + && ! FLOAT_MODE_P (GET_MODE (val))) return val; + if (cond == UNEQ && rtx_equal_p (x, reg)) return val;