James, We implemented slightly different patch - we restrict number of SET instructions for if-conversion through new parameter and add check in bb_ok_for_noce_convert_multiple_sets:
+ unsigned limit = MIN (ii->branch_cost, + (unsigned) PARAM_VALUE (PARAM_MAX_IF_CONV_SET_INSNS)); .. - if (count > ii->branch_cost) - return FALSE; + if (count > limit) + return false; Now we are testing it for different suites/chips but I saw that real benchmark for which we saw huge performance degradation gets speed-ip on 65% for -march=slm -m32. 2015-12-18 16:52 GMT+03:00 James Greenhalgh <james.greenha...@arm.com>: > > Hi, > > PR68920 talks about undesirable if-conversion in the x86 back-end. > The if-conversion cost model simply uses BRANCH_COST (I want to revisit > this for GCC 7), but BRANCH_COST is overloaded in the compiler and reducing > it causes other optimisations to be disabled. > > Consequently, to fix the PR we want something new that the target can set > to override BRANCH_COST and reduce the number of instructions that get > if-converted. This patch adds this mechanism through a param. > > Bootstrapped on x86_64-none-linux-gnu and aarch64-none-linux-gnu. > > OK for trunk? > > Thanks, > James > > --- > gcc/ > > 2015-12-17 James Greenhalgh <james.greenha...@arm.com> > > PR rtl-optimization/68920 > * params.def (PARAM_MAX_RTL_IF_CONVERSION_INSNS): New. > * ifcvt.c (noce_find_if_block): Limit by new param. > * doc/invoke.texi (max-rtl-if-conversion-insns): Document it. > > gcc/testsuite/ > > 2015-12-17 James Greenhalgh <james.greenha...@arm.com> > > PR rtl-optimization/68920 > * gcc.deg/ifcvt-5.c: New. >