From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7880) id 8A5DD385B51A; Thu, 16 Feb 2023 16:28:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8A5DD385B51A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1676564911; bh=guIr/yHnQcutW2X2VaoyDBIBrAdhTMN67VP49JTPYQ0=; h=From:To:Subject:Date:From; b=AF8b6c2sdWqmCLVCaPcqmKLLQYQ+nxflKveFdasr3qbbyBZiNsi0+GgsrbHZfi3Wj 9csQ7QVMHE+OCHAGfJvpBbPDWttMT1XaQBKicTuGAJuV8PN8jfQ9u4P+K/+vnB24PA GQzif0Q0GrNzEtc3F0ESc/KDZcOY5QJ8ihLcbU3k= 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: 26570e9dbc5bbfe56692514efc7641592b938a6f X-Git-Newrev: 98550c8d575fb45b974009619ac35f63ed516731 Message-Id: <20230216162831.8A5DD385B51A@sourceware.org> Date: Thu, 16 Feb 2023 16:28:31 +0000 (GMT) List-Id: https://gcc.gnu.org/g:98550c8d575fb45b974009619ac35f63ed516731 commit 98550c8d575fb45b974009619ac35f63ed516731 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 410a8516370..3310620d61f 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