From ddf68ab9b599b0aa79c118e24fca70ff7663d0eb Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Mon, 13 Sep 2010 00:49:27 +0000 Subject: [PATCH] re PR rtl-optimization/41087 (cris-elf gfortran.dg/zero_sized_3.f90 -O3 -funroll-loops execution) PR rtl-optimization/41087 * ifcvt.c (noce_get_condition): Don't allow conditions with side-effects. From-SVN: r164240 --- gcc/ChangeLog | 6 ++++++ gcc/ifcvt.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db8a1fd63cdb..0af0353ed0fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-09-13 Hans-Peter Nilsson + + PR rtl-optimization/41087 + * ifcvt.c (noce_get_condition): Don't allow conditions with + side-effects. + 2010-09-12 Anatoly Sokolov * config/frv/frv.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove. diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 9ac4b13caa75..9aff583ae458 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. */