From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 00B3A385840D; Wed, 24 Apr 2024 08:13:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 00B3A385840D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1713946384; bh=v/tBHBGpy4F1pfARi1D+ilG3qC2ygHOTh1xmgpS09ak=; h=From:To:Subject:Date:From; b=bhuBqLIkY9h7pUl5c5OwfkRs9Jm0Mut+luGt6NsL2jCAoOAjHDV8i0jQLaqJC0rsU +XcsT9TeCCfB0WZpl0D1+o1qTMzF1Tdek2RkG2aHMzqMTpS/o+xwleWuSjnAD9qNlb 5hlrm+Qha+xaebIsP/VzqmTqj5EGOQXgfo9lvk20= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-10105] tree-optimization/114832 - wrong dominator info with vect peeling X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: d279c9d89b2f6ce89c1eec0ff4b980e9c5f51fd1 X-Git-Newrev: e28e8ab1a92e9b49f7c4045377577c8dc17751b7 Message-Id: <20240424081304.00B3A385840D@sourceware.org> Date: Wed, 24 Apr 2024 08:13:02 +0000 (GMT) List-Id: https://gcc.gnu.org/g:e28e8ab1a92e9b49f7c4045377577c8dc17751b7 commit r14-10105-ge28e8ab1a92e9b49f7c4045377577c8dc17751b7 Author: Richard Biener Date: Wed Apr 24 06:24:22 2024 +0200 tree-optimization/114832 - wrong dominator info with vect peeling When we update the dominator of the redirected exit after peeling we check whether the immediate dominator was the loop header rather than the exit source when we later want to just update it to the new source. The following fixes this oversight. PR tree-optimization/114832 * tree-vect-loop-manip.cc (slpeel_tree_duplicate_loop_to_edge_cfg): Fix dominance check. * gcc.dg/vect/pr114832.c: New testcase. Diff: --- gcc/testsuite/gcc.dg/vect/pr114832.c | 13 +++++++++++++ gcc/tree-vect-loop-manip.cc | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr114832.c b/gcc/testsuite/gcc.dg/vect/pr114832.c new file mode 100644 index 00000000000..2de07ae22ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr114832.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-tree-loop-if-convert -fno-tree-loop-distribute-patterns" } */ + +int a, b, c, d[3]; +void e() { + int f, g = 0; + for (; g < 3; g++) { + if (f || a || b && c) { + int h, *i = &h, **j = &i; + } + d[g] = 0; + } +} diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc index 8d9b533d50f..43c7881c640 100644 --- a/gcc/tree-vect-loop-manip.cc +++ b/gcc/tree-vect-loop-manip.cc @@ -1523,7 +1523,7 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit, exit_dest = exit->dest; was_imm_dom = (get_immediate_dominator (CDI_DOMINATORS, - exit_dest) == loop->header ? + exit_dest) == exit->src ? true : false); /* Also copy the pre-header, this avoids jumping through hoops to