re PR rtl-optimization/68920 (Undesirable if-conversion for a rarely taken branch)

gcc/

2016-01-21  Yuri Rumyantsev  <ysrumyan@gmail.com>

	PR rtl-optimization/68920
	* ifcvt.c (cond_move_process_if_block): Limit number of conditional
	moves.

From-SVN: r232680
This commit is contained in:
Yuri Rumyantsev 2016-01-21 16:05:14 +00:00 committed by Ilya Enkovich
parent 35b707ff99
commit c7b19145ca
2 changed files with 9 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2016-01-21 Yuri Rumyantsev <ysrumyan@gmail.com>
PR rtl-optimization/68920
* ifcvt.c (cond_move_process_if_block): Limit number of conditional
moves.
2016-01-21 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/68990

View File

@ -3743,6 +3743,7 @@ cond_move_process_if_block (struct noce_if_info *if_info)
vec<rtx> 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,