From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 438BB383E822; Thu, 19 May 2022 14:03:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 438BB383E822 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 r11-10014] tree-optimization/105148 - fix IVOPTs recording uses X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 0be87cc23d0b0e07656e94137978971555bebbb3 X-Git-Newrev: 64b3a86d33e08072ea78f2a87c8a275bd15f07cb Message-Id: <20220519140304.438BB383E822@sourceware.org> Date: Thu, 19 May 2022 14:03:04 +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: Thu, 19 May 2022 14:03:04 -0000 https://gcc.gnu.org/g:64b3a86d33e08072ea78f2a87c8a275bd15f07cb commit r11-10014-g64b3a86d33e08072ea78f2a87c8a275bd15f07cb Author: Richard Biener Date: Tue Apr 5 16:06:10 2022 +0200 tree-optimization/105148 - fix IVOPTs recording uses The following fixes recording uses in ARRAY_REFs with non-constant element size or low bound. 2022-04-05 Richard Biener PR tree-optimization/105148 * tree-ssa-loop-ivopts.c (idx_record_use): Walk raw operands 2 and 3 of ARRAY_REFs. * gcc.dg/torture/pr105148.c: New testcase. (cherry picked from commit 86242eb1bd03eba82d8e22b01b16925d43bcc539) Diff: --- gcc/testsuite/gcc.dg/torture/pr105148.c | 20 ++++++++++++++++++++ gcc/tree-ssa-loop-ivopts.c | 6 ++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.dg/torture/pr105148.c b/gcc/testsuite/gcc.dg/torture/pr105148.c new file mode 100644 index 00000000000..3338b0f3281 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr105148.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +extern void foo (void); + +static inline int +bar (int n) +{ + for (int i = 0; i < n; i++) + { + foo (); + int y[1][i]; + y[n][i] = 0; + } +} + +int +baz (void) +{ + return bar (5); +} diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 4012ae3f19d..913b3ad4258 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -2125,8 +2125,10 @@ idx_record_use (tree base, tree *idx, find_interesting_uses_op (data, *idx); if (TREE_CODE (base) == ARRAY_REF || TREE_CODE (base) == ARRAY_RANGE_REF) { - find_interesting_uses_op (data, array_ref_element_size (base)); - find_interesting_uses_op (data, array_ref_low_bound (base)); + if (TREE_OPERAND (base, 2)) + find_interesting_uses_op (data, TREE_OPERAND (base, 2)); + if (TREE_OPERAND (base, 3)) + find_interesting_uses_op (data, TREE_OPERAND (base, 3)); } return true; }