From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by sourceware.org (Postfix) with ESMTPS id 4CFF6383DB8D for ; Wed, 14 Sep 2022 06:12:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4CFF6383DB8D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x630.google.com with SMTP id r18so32295587eja.11 for ; Tue, 13 Sep 2022 23:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=DWx1TI+G6dH63JdQw8xJyKFruVPBDDWwV14Z5k8VY9Y=; b=A2zWbceXuDm6CkW4KMiFLAuTmRKaMpSWDhoevVTYFmmAa5nzL+P9goYuXWDCpcSmVA 49F9Y181wMhvLEtClHXwerDxhoQA4qmziNtvekY5p8w8gqjDi1UHZBBKhHr4VzWtcSsh +LUc9Xaj0vuE6MtLwR24Ylv6kNgPJ48m2VdUOEeQFD7h4QEYbWa9+QRNgHWKPN+T0TkZ zj65AExeDBYI829O7LFXM7NPsEw+HlkMt1lw82fSxUHlOXH5sfCx70+9JufWcw/orCDm Rm+UFti0/BXvAbv9F+3ylGA6bl4hvIU1Alj74+lXBhUVBSge1tMHWd/gKay3uTxKuBrF 52FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=DWx1TI+G6dH63JdQw8xJyKFruVPBDDWwV14Z5k8VY9Y=; b=JW8dbwh3ZaaS4XYLm7SOsXmF/3JmN6VkoqRGIkdHpc2spSLgkOjjxYwLG0/+VaBlti X5o9CdbAl0rdYi6HzFGoa23w69QBLt8WJg5p6K6KzSR+YZ3LqEd23PiQGiKsIU2eGwJx X4ezInsALQcOAXBJCbNc0PZsi6S92KlJnQ5LnI1hJFLWaJDJqy/tVim9QIv2RsmRiXt3 rv8VYpFsFOaNds9WVP50PAgvGC/PzGjP5oKJAqf8XhBxOCjQKDr49iA83GEn/wuoMqfD ZlZ8P1xPdvgoILTJkaDJw63PGxdEVNmFPcLvb4gYQBV9wcMLmcr9JJxjf20BGNEM0DLn aGxA== X-Gm-Message-State: ACgBeo2PPrgEaHgvELviw45qAr9jaWey5ifGq+q/WP0KcCgqDH3rsv8k pmxG10+PAVhhlqsIosJoj+HIPxM4noVROaOk+wj649AB X-Google-Smtp-Source: AA6agR6MzttCFEcpNZtuV9cXhqNTZ3Ayh2MmDZHKJ3DEYX5dVzgJzgu0MGJU9f9fSWd0vh9BfMZn3S7Q/xSLUw4dOJg= X-Received: by 2002:a17:907:94c6:b0:77d:7ad3:d063 with SMTP id dn6-20020a17090794c600b0077d7ad3d063mr9382320ejc.330.1663135922958; Tue, 13 Sep 2022 23:12:02 -0700 (PDT) MIME-Version: 1.0 References: <20220914012511.1012154-1-hongtao.liu@intel.com> In-Reply-To: <20220914012511.1012154-1-hongtao.liu@intel.com> From: Richard Biener Date: Wed, 14 Sep 2022 08:11:51 +0200 Message-ID: Subject: Re: [PATCH] [ICE] Check another epilog variable peeling case in vectorizable_nonlinear_induction. To: liuhongt Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-8.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Wed, Sep 14, 2022 at 3:25 AM liuhongt via Gcc-patches wrote: > > In vectorizable_nonlinear_induction, r13-2503-gc13223b790bbc5 prevent variable peeling by > only checking LOOP_VINFO_MASK_SKIP_NITERS (loop_vinfo). But when > "!vect_use_loop_mask_for_alignment_p (loop_vinfo) && > LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) < 0", vectorizer will > still do variable peeling for epilog, and it hits gcc_assert in > vect_peel_nonlinear_iv_init. > > > Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. > The patch also fix ICE of the testcase in the PR for ia64-linux-gnu(verified by cross-compile). > > Ok for trunk? OK. Thanks, Richard. > gcc/ChangeLog: > > PR tree-optimization/106905 > * tree-vect-loop.cc (vectorizable_nonlinear_induction): Return > false when !vect_use_loop_mask_for_alignment_p (loop_vinfo) && > LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) < 0. > > gcc/testsuite/ChangeLog: > > * gcc.target/i386/pr106905.c: New test. > * gcc.target/ia64/pr106905.c: New test. > --- > gcc/testsuite/gcc.target/i386/pr106905.c | 14 ++++++++++++++ > gcc/testsuite/gcc.target/ia64/pr106905.c | 20 ++++++++++++++++++++ > gcc/tree-vect-loop.cc | 6 ++++-- > 3 files changed, 38 insertions(+), 2 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr106905.c > create mode 100644 gcc/testsuite/gcc.target/ia64/pr106905.c > > diff --git a/gcc/testsuite/gcc.target/i386/pr106905.c b/gcc/testsuite/gcc.target/i386/pr106905.c > new file mode 100644 > index 00000000000..a190a1c84e6 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr106905.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-options "-march=silvermont -O2 -fvect-cost-model=dynamic" } */ > + > +void > +foo_mul_peel (int *a, int b) > +{ > + int i; > + > + for (i = 0; i < 7; ++i) > + { > + b *= 2; > + a[i] = b; > + } > +} > diff --git a/gcc/testsuite/gcc.target/ia64/pr106905.c b/gcc/testsuite/gcc.target/ia64/pr106905.c > new file mode 100644 > index 00000000000..1b9656e1203 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/ia64/pr106905.c > @@ -0,0 +1,20 @@ > +/* { dg-do compile } */ > +/* { dg-options "-std=c99 -O3 -fPIC" } */ > +long ZDICT_fillNoise_p, ZDICT_trainFromBuffer_legacy_result; > +unsigned ZDICT_fillNoise_acc; > +int ZDICT_totalSampleSize_nbFiles; > +static void ZDICT_fillNoise(void *buffer, long length) { > + unsigned prime2 = 9; > + for (ZDICT_fillNoise_p = 0; ZDICT_fillNoise_p < length; ZDICT_fillNoise_p++) > + ZDICT_fillNoise_acc *= ((char *)buffer)[ZDICT_fillNoise_p] = prime2; > +} > +long ZDICT_trainFromBuffer_legacy() { > + void *newBuff; > + long total = 0; > + for (; ZDICT_totalSampleSize_nbFiles;) > + total += 0; > + long sBuffSize = total; > + newBuff = 0; > + ZDICT_fillNoise(newBuff + sBuffSize, 32); > + return ZDICT_trainFromBuffer_legacy_result; > +} > diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc > index 8f88f1755be..9c434b66c5b 100644 > --- a/gcc/tree-vect-loop.cc > +++ b/gcc/tree-vect-loop.cc > @@ -8646,8 +8646,10 @@ vectorizable_nonlinear_induction (loop_vec_info loop_vinfo, > /* Also doens't support peel for neg when niter is variable. > ??? generate something like niter_expr & 1 ? init_expr : -init_expr? */ > niters_skip = LOOP_VINFO_MASK_SKIP_NITERS (loop_vinfo); > - if (niters_skip != NULL_TREE > - && TREE_CODE (niters_skip) != INTEGER_CST) > + if ((niters_skip != NULL_TREE > + && TREE_CODE (niters_skip) != INTEGER_CST) > + || (!vect_use_loop_mask_for_alignment_p (loop_vinfo) > + && LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) < 0)) > { > if (dump_enabled_p ()) > dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, > -- > 2.27.0 >