From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7880) id B3F7C385840F; Thu, 23 Feb 2023 23:22:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B3F7C385840F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1677194542; bh=94H63Ubu9nAXkQEcvgs7rELRnqQLIelXalxCH+LnS3Y=; h=From:To:Subject:Date:From; b=x7sfPp0iWhTC+sU8LO+6MO4pCk44Rs3rNo2AxldLto0SX5Yc3hP9RMTSMs/ZPXgLH zhwgu64AMaj5TTGZC14bif+CQIU8zl4sMTVQ9rEzL1Wr3Ls73+6oAUOMSRq0bcGLSn 4JqUeV2g6Ld0FIvpIJyLHHXzHuMef1cs3VTtNeZQ= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Ondrej Kubanek To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/kubaneko/heads/histogram)] new create_iv X-Act-Checkin: gcc X-Git-Author: kubaneko X-Git-Refname: refs/users/kubaneko/heads/histogram X-Git-Oldrev: 223227bbe5c3eb087e782b758e9e188c8b052834 X-Git-Newrev: 81285bf85e9aae5a45ba58fb11786bb8bab99486 Message-Id: <20230223232222.B3F7C385840F@sourceware.org> Date: Thu, 23 Feb 2023 23:22:22 +0000 (GMT) List-Id: https://gcc.gnu.org/g:81285bf85e9aae5a45ba58fb11786bb8bab99486 commit 81285bf85e9aae5a45ba58fb11786bb8bab99486 Author: kubaneko Date: Tue Nov 22 16:33:13 2022 +0000 new create_iv Diff: --- gcc/tree-ssa-loop-manip.cc | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/gcc/tree-ssa-loop-manip.cc b/gcc/tree-ssa-loop-manip.cc index 09acc1c94cc..3f721424b4c 100644 --- a/gcc/tree-ssa-loop-manip.cc +++ b/gcc/tree-ssa-loop-manip.cc @@ -67,7 +67,9 @@ create_iv (tree base, tree step, tree var, class loop *loop, gimple_seq stmts; tree vb, va; enum tree_code incr_op = PLUS_EXPR; - edge pe = loop_preheader_edge (loop); + edge pe = NULL; + edge e; + edge_iterator ei; if (var != NULL_TREE) { @@ -122,7 +124,11 @@ create_iv (tree base, tree step, tree var, class loop *loop, loop (i.e. the step should be loop invariant). */ step = force_gimple_operand (step, &stmts, true, NULL_TREE); if (stmts) - gsi_insert_seq_on_edge_immediate (pe, stmts); + { + if (!pe) + pe = loop_preheader_edge (loop); + gsi_insert_seq_on_edge_immediate (pe, stmts); + } stmt = gimple_build_assign (va, incr_op, vb, step); /* Prevent the increment from inheriting a bogus location if it is not put @@ -151,11 +157,23 @@ create_iv (tree base, tree step, tree var, class loop *loop, initial = force_gimple_operand (base, &stmts, true, var); if (stmts) - gsi_insert_seq_on_edge_immediate (pe, stmts); + { + if (!pe) + pe = loop_preheader_edge (loop); + gsi_insert_seq_on_edge_immediate (pe, stmts); + } phi = create_phi_node (vb, loop->header); - add_phi_arg (phi, initial, loop_preheader_edge (loop), UNKNOWN_LOCATION); - add_phi_arg (phi, va, loop_latch_edge (loop), UNKNOWN_LOCATION); + FOR_EACH_EDGE (e, ei, loop->header->preds) + { + if (e==loop_latch_edge (loop)){ + add_phi_arg (phi, va, loop_latch_edge (loop), UNKNOWN_LOCATION); + } + else + { + add_phi_arg (phi, initial, e, UNKNOWN_LOCATION); + } + } } /* Return the innermost superloop LOOP of USE_LOOP that is a superloop of