From: Yuri Rumyantsev Date: Thu, 21 Jan 2016 16:05:14 +0000 (+0000) Subject: re PR rtl-optimization/68920 (Undesirable if-conversion for a rarely taken branch) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c7b19145cadaccdc5d4a931ff9d39b1c46c7bfb9;p=gcc.git re PR rtl-optimization/68920 (Undesirable if-conversion for a rarely taken branch) gcc/ 2016-01-21 Yuri Rumyantsev PR rtl-optimization/68920 * ifcvt.c (cond_move_process_if_block): Limit number of conditional moves. From-SVN: r232680 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d15a87dcca6..abde3f44886 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-01-21 Yuri Rumyantsev + + PR rtl-optimization/68920 + * ifcvt.c (cond_move_process_if_block): Limit number of conditional + moves. + 2016-01-21 Vladimir Makarov PR rtl-optimization/68990 diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index ec6c3def146..74958fb76d0 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -3743,6 +3743,7 @@ cond_move_process_if_block (struct noce_if_info *if_info) vec else_regs = vNULL; unsigned int i; int success_p = FALSE; + int limit = PARAM_VALUE (PARAM_MAX_RTL_IF_CONVERSION_INSNS); /* Build a mapping for each block to the value used for each register. */ @@ -3792,7 +3793,8 @@ cond_move_process_if_block (struct noce_if_info *if_info) is the number of assignments currently made in only one of the branches, since if we convert we are going to always execute them. */ - if (c > MAX_CONDITIONAL_EXECUTE) + if (c > MAX_CONDITIONAL_EXECUTE + || c > limit) goto done; /* Try to emit the conditional moves. First do the then block,