https://gcc.gnu.org/g:32f6485849c8268f5c7bd8454702bfec369768b1

commit r15-5717-g32f6485849c8268f5c7bd8454702bfec369768b1
Author: Alexandre Oliva <ol...@adacore.com>
Date:   Wed Nov 27 06:27:12 2024 -0300

    ifcombine: skip fallback conjunction on noncontiguous blocks
    
    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.
    
    
    for  gcc/ChangeLog
    
            * tree-ssa-ifcombine.cc (ifcombine_ifandif): Avoid fallback
            conjunction of noncontiguous conditions.

Diff:
---
 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 9a4c6a3f4d1d..e389b12aa37d 100644
--- a/gcc/tree-ssa-ifcombine.cc
+++ b/gcc/tree-ssa-ifcombine.cc
@@ -973,6 +973,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)

Reply via email to