aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ifcvt.c11
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index db8a1fd..0af0353 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-13 Hans-Peter Nilsson <hp@axis.com>
+
+ PR rtl-optimization/41087
+ * ifcvt.c (noce_get_condition): Don't allow conditions with
+ side-effects.
+
2010-09-12 Anatoly Sokolov <aesok@post.ru>
* config/frv/frv.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove.
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 9ac4b13..9aff583 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -2201,8 +2201,15 @@ noce_get_condition (rtx jump, rtx *earliest, bool then_else_reversed)
/* Otherwise, fall back on canonicalize_condition to do the dirty
work of manipulating MODE_CC values and COMPARE rtx codes. */
- return canonicalize_condition (jump, cond, reverse, earliest,
- NULL_RTX, false, true);
+ tmp = canonicalize_condition (jump, cond, reverse, earliest,
+ NULL_RTX, false, true);
+
+ /* We don't handle side-effects in the condition, like handling
+ REG_INC notes and making sure no duplicate conditions are emitted. */
+ if (tmp != NULL_RTX && side_effects_p (tmp))
+ return NULL_RTX;
+
+ return tmp;
}
/* Return true if OP is ok for if-then-else processing. */