On 12/04/17 14:02, Wilco Dijkstra wrote:
> The existing setting of max_cond_insns for most cores is non-optimal.
> Thumb-2 IT has a maximum limit of 4, so 5 means emitting 2 IT sequences.
> Also such long sequences of conditional instructions can increase the number
> of executed instructions significantly, so using 5 for max_cond_insns is
> non-optimal.
>
> Previous benchmarking showed that setting max_cond_insn to 2 was the best
> value
> for Cortex-A15 and Cortex-A57. All ARMv8-A cores use 2 - apart from
> Cortex-A35
> and Cortex-A53. Given that using 5 is worse, set it to 2. This also has the
> advantage of producing more uniform code.
>
> Bootstrap and regress OK on arm-none-linux-gnueabihf.
>
> OK for stage 1?
>
> ChangeLog:
> 2017-04-12 Wilco Dijkstra <[email protected]>
>
> * gcc/config/arm/arm.c (arm_cortex_a53_tune): Set max_cond_insns to 2.
> (arm_cortex_a35_tune): Likewise.
> ---
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index
> 29e8d1d07d918fbb2a627a653510dfc8587ee01a..1a6d552aa322114795acbb3667c6ea36963bf193
> 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -1967,7 +1967,7 @@ const struct tune_params arm_cortex_a35_tune =
> arm_default_branch_cost,
> &arm_default_vec_cost,
> 1, /* Constant limit. */
> - 5, /* Max cond insns. */
> + 2, /* Max cond insns. */
> 8, /* Memset max inline. */
> 1, /* Issue rate. */
> ARM_PREFETCH_NOT_BENEFICIAL,
> @@ -1990,7 +1990,7 @@ const struct tune_params arm_cortex_a53_tune =
> arm_default_branch_cost,
> &arm_default_vec_cost,
> 1, /* Constant limit. */
> - 5, /* Max cond insns. */
> + 2, /* Max cond insns. */
> 8, /* Memset max inline. */
> 2, /* Issue rate. */
> ARM_PREFETCH_NOT_BENEFICIAL,
>
This parameter is also used for A32 code. Is that really the right
number there as well?
I do wonder if the code in arm_option_params_internal should be tweaked
to hard-limit the number of skipped insns for Thumb2 to one IT block. So
/* When -mrestrict-it is in use tone down the if-conversion. */
max_insns_skipped = (TARGET_THUMB2 && arm_restrict_it)
? 1
: (TARGET_THUMB2 ? MIN (current_tune->max_insns_skipped, 4)
| current_tune->max_insns_skipped);