]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PHIOPT: Improve minmax diamond detection for phiopt1
authorAndrew Pinski <apinski@marvell.com>
Wed, 19 Apr 2023 17:31:20 +0000 (10:31 -0700)
committerAndrew Pinski <apinski@marvell.com>
Sat, 22 Apr 2023 20:22:35 +0000 (13:22 -0700)
For diamond bb phi node detection, there is a check
to make sure bb1 is not empty. But in the case where
bb1 is empty except for a predicate, empty_block_p
will still return true but the minmax code handles
that case already so there is no reason to check
if the basic block is empty.

This patch removes that check and removes some
xfails.

OK? Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

* tree-ssa-phiopt.cc (tree_ssa_phiopt_worker):
Remove check on empty_block_p.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/phi-opt-5.c: Remvoe some xfail.

gcc/testsuite/gcc.dg/tree-ssa/phi-opt-5.c
gcc/tree-ssa-phiopt.cc

index 5a00f3ddf8c7410024ad3dd907215684b8da3bc0..5f78a1ba6dc8a46bab2ae9ab0cbaf6ee6d1a4483 100644 (file)
@@ -16,9 +16,9 @@ float repl1 (float varx)
    varx_4 = MIN_EXPR <1.0e+0, varx_2>;
    varx_5 = MAX_EXPR <varx_4, 0.0>;  */  
 
-/* phiopt1 confused by predictors.  */
-/* { dg-final { scan-tree-dump "varx.*MIN_EXPR.*1\\.0" "phiopt1" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump "varx.*MAX_EXPR.*0\\.0" "phiopt1" { xfail *-*-* } } } */
+/* phiopt1 was confused by predictors.  */
+/* { dg-final { scan-tree-dump "varx.*MIN_EXPR.*1\\.0" "phiopt1" } } */
+/* { dg-final { scan-tree-dump "varx.*MAX_EXPR.*0\\.0" "phiopt1" } } */
 /* { dg-final { scan-tree-dump "varx.*MIN_EXPR.*1\\.0" "phiopt2"} } */
 /* { dg-final { scan-tree-dump "varx.*MAX_EXPR.*0\\.0" "phiopt2"} } */
 
@@ -38,7 +38,7 @@ float repl2 (float vary)
    vary_5 = MIN_EXPR <vary_4, 1.0e+0>;  */
 
 /* phiopt1 confused by predictors.  */
-/* { dg-final { scan-tree-dump "vary.*MAX_EXPR.*0\\.0" "phiopt1" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "vary.*MAX_EXPR.*0\\.0" "phiopt1" } } */
 /* { dg-final { scan-tree-dump "vary.*MIN_EXPR.*1\\.0" "phiopt1" { xfail *-*-* } } } */
 /* { dg-final { scan-tree-dump "vary.*MAX_EXPR.*0\\.0" "phiopt2"} } */
 /* { dg-final { scan-tree-dump "vary.*MIN_EXPR.*1\\.0" "phiopt2"} } */
@@ -61,6 +61,6 @@ float repl3 (float varz, float vara, float varb)
   vara_6 = MAX_EXPR <varb_5, varz_2>;  */
 
 /* phiopt1 confused by predictors.  */
-/* { dg-final { scan-tree-dump "vara.*MAX_EXPR" "phiopt1" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "vara.*MAX_EXPR" "phiopt1" } } */
 /* { dg-final { scan-tree-dump "if .*varz" "phiopt2"} } */
 /* { dg-final { scan-tree-dump "vara.*MAX_EXPR" "phiopt2"} } */
index 945507be11e063fa6bda49db8427657a57e427db..8c5c8d8c2500e8fc68d5dc14dd60b1317430b150 100644 (file)
@@ -209,8 +209,7 @@ tree_ssa_phiopt_worker (bool do_store_elim, bool do_hoist_loads, bool early_p)
            hoist_adjacent_loads (bb, bb1, bb2, bb3);
          continue;
        }
-      else if (EDGE_SUCC (bb1, 0)->dest == EDGE_SUCC (bb2, 0)->dest
-              && !empty_block_p (bb1))
+      else if (EDGE_SUCC (bb1, 0)->dest == EDGE_SUCC (bb2, 0)->dest)
        {
          diamond_p = true;
          e2 = EDGE_SUCC (bb2, 0);