From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2066) id 6E3C63848427; Wed, 9 Jun 2021 05:27:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6E3C63848427 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Jiu Fu Guo To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/guojiufu/heads/guojiufu-branch)] invert in/out edge for eq cond X-Act-Checkin: gcc X-Git-Author: Jiufu Guo X-Git-Refname: refs/users/guojiufu/heads/guojiufu-branch X-Git-Oldrev: de3900d5d34f1f5f83e41293d0efc13fcc0b9033 X-Git-Newrev: c3931cdad3686c7283577dcd8681075e85c39bd4 Message-Id: <20210609052733.6E3C63848427@sourceware.org> Date: Wed, 9 Jun 2021 05:27:33 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Jun 2021 05:27:33 -0000 https://gcc.gnu.org/g:c3931cdad3686c7283577dcd8681075e85c39bd4 commit c3931cdad3686c7283577dcd8681075e85c39bd4 Author: Jiufu Guo Date: Fri Jun 4 14:05:11 2021 +0800 invert in/out edge for eq cond Diff: --- gcc/tree-ssa-loop-split.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gcc/tree-ssa-loop-split.c b/gcc/tree-ssa-loop-split.c index 44bb8056b5b..9fa339ebb7d 100644 --- a/gcc/tree-ssa-loop-split.c +++ b/gcc/tree-ssa-loop-split.c @@ -1719,6 +1719,24 @@ split_ne_loop (struct loop *loop, edge cond_e) gcond *gc = as_a (last_stmt (cond_e->src)); gcond *dup_gc = as_a (last_stmt (loop2_cond_exit_bb)); + /* Invert edges for gcond. */ + if (gimple_cond_code (gc) == EQ_EXPR) + { + auto invert_edge = [](basic_block bb) { + edge out = EDGE_SUCC (bb, 0); + edge in = EDGE_SUCC (bb, 1); + if (in->flags & EDGE_TRUE_VALUE) + std::swap (in, out); + in->flags |= EDGE_TRUE_VALUE; + in->flags &= ~EDGE_FALSE_VALUE; + out->flags |= EDGE_FALSE_VALUE; + out->flags &= ~EDGE_TRUE_VALUE; + }; + + invert_edge (gimple_bb (gc)); + invert_edge (gimple_bb (dup_gc)); + } + /* Change if (i != n) to LOOP1:if (i > n) and LOOP2:if (i < n) */ bool inv = expr_invariant_in_loop_p (loop, gimple_cond_lhs (gc));