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.
>

Reply via email to