On Fri, 22 Nov 2024, Alexandre Oliva wrote:
>
> When everything else fails, if enabled by the target or by a
> parameter, and when other requirements are satisfied, ifcombine
> generates an AND of both conditions.
>
> That may be good for contiguous conditions, but it's unlikely to be an
> optimization when the blocks are separate.
>
> Add contiguity to the set of requirements for this fallback
> transformation.
>
> Regstrapped on x86_64-linux-gnu. Ok to install?
OK.
Thanks,
Richard.
>
> for gcc/ChangeLog
>
> * tree-ssa-ifcombine.cc (ifcombine_ifandif): Avoid fallback
> conjunction of noncontiguous conditions.
> ---
> gcc/tree-ssa-ifcombine.cc | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/gcc/tree-ssa-ifcombine.cc b/gcc/tree-ssa-ifcombine.cc
> index 9b9dc10cd2202..51f37f15a9efc 100644
> --- a/gcc/tree-ssa-ifcombine.cc
> +++ b/gcc/tree-ssa-ifcombine.cc
> @@ -974,6 +974,10 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool
> inner_inv,
> gimple_cond_rhs (outer_cond),
> gimple_bb (outer_cond))))
> {
> + /* Only combine conditions in this fallback case if the blocks are
> + neighbors. */
> + if (single_pred (inner_cond_bb) != outer_cond_bb)
> + return false;
> tree t1, t2;
> bool logical_op_non_short_circuit = LOGICAL_OP_NON_SHORT_CIRCUIT;
> if (param_logical_op_non_short_circuit != -1)
>
>
>
--
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)