]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ifcombine: skip fallback conjunction on noncontiguous blocks
authorAlexandre Oliva <oliva@adacore.com>
Wed, 27 Nov 2024 09:27:12 +0000 (06:27 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Wed, 27 Nov 2024 09:27:12 +0000 (06:27 -0300)
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.

gcc/tree-ssa-ifcombine.cc

index 9a4c6a3f4d1db578cf6c01b90e615dd6442102b6..e389b12aa37db3c1af8093a6500535a6e7482355 100644 (file)
@@ -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)