From d36405344205c58beb1947719345ec80fdc00a34 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 1 May 2019 11:33:32 -0600 Subject: [PATCH] re PR tree-optimization/88797 (Unneeded branch added when function is inlined (function runs faster if not inlined)) PR tree-optimization/88797 * gimple-ssa-split-paths (is_feasible_trace): Reject cases where the PHI feeds a conditional on the RHS of an assignment. PR tree-optimization/88797 * g++.dg/tree-ssa/pr88797.C: New test. From-SVN: r270775 --- gcc/ChangeLog | 6 ++++++ gcc/gimple-ssa-split-paths.c | 8 ++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/tree-ssa/pr88797.C | 16 ++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr88797.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b6b501fe830..7f6ccd98c11 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-05-01 Jeff Law + + PR tree-optimization/88797 + * gimple-ssa-split-paths (is_feasible_trace): Reject cases where the + PHI feeds a conditional on the RHS of an assignment. + 2019-04-30 Andrew Waterman Jim Wilson diff --git a/gcc/gimple-ssa-split-paths.c b/gcc/gimple-ssa-split-paths.c index 33bbb66674b..5bf45eeac28 100644 --- a/gcc/gimple-ssa-split-paths.c +++ b/gcc/gimple-ssa-split-paths.c @@ -264,8 +264,12 @@ is_feasible_trace (basic_block bb) if (is_gimple_debug (stmt)) continue; /* If there's a use in the joiner this might be a CSE/DCE - opportunity. */ - if (gimple_bb (stmt) == bb) + opportunity, but not if the use is in a conditional + which makes this a likely if-conversion candidate. */ + if (gimple_bb (stmt) == bb + && (!is_gimple_assign (stmt) + || (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt)) + != tcc_comparison))) { found_useful_phi = true; break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1427a8ee523..3620c23f82e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-05-01 Jeff Law + + PR tree-optimization/90037 + * g++.dg/tree-ssa/pr88797.C: New test. + 2019-05-01 Nathan Sidwell * g++.dg/cpp0x/decltype9.C: Adjust expected diagnostics. diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr88797.C b/gcc/testsuite/g++.dg/tree-ssa/pr88797.C new file mode 100644 index 00000000000..75391d6c049 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr88797.C @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-split-paths-details" } */ + + +void use(unsigned); +bool f(unsigned x, unsigned y) { + return x < 1111 + (y <= 2222); +} +void test_f(unsigned x, unsigned y) { + for (unsigned i = 0; i < 3333; ++i) + use(f(x++, y++)); +} + +/* { dg-final { scan-tree-dump-not "Duplicating join block" "split-paths" } } */ +/* { dg-final { scan-tree-dump-times "Block . is a join that does not expose" 1 "split-paths" } } */ + -- 2.30.2