From patchwork Fri May 13 11:42:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liuhongt X-Patchwork-Id: 53924 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 11D043839C5F for ; Fri, 13 May 2022 11:43:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 11D043839C5F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1652442233; bh=K3d8xlv5b0cuXCuWui7uMoyfrvUswelGQZFQzxW2E+U=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=W1gXI0sAC8v6/apMUT7bbdmf/0eqHLkjyz7CQleQJtM/rRV2sZO9WEf4ZE0xso2AA cX8dQ+VaQ+v9EMpTjTh8VkSK8OiprcvanLMnCeCkEXvAZ6Wle6+fTC+1GdY8ByopWy clYctAzUKFdp18nR61hQCZ3YinLWSqCLS+OGYYTE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by sourceware.org (Postfix) with ESMTPS id 585B63857023 for ; Fri, 13 May 2022 11:43:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 585B63857023 X-IronPort-AV: E=McAfee;i="6400,9594,10345"; a="333320175" X-IronPort-AV: E=Sophos;i="5.91,221,1647327600"; d="scan'208";a="333320175" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2022 04:43:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,221,1647327600"; d="scan'208";a="572945598" Received: from scymds01.sc.intel.com ([10.148.94.138]) by fmsmga007.fm.intel.com with ESMTP; 13 May 2022 04:43:01 -0700 Received: from shliclel051.sh.intel.com (shliclel051.sh.intel.com [10.239.236.51]) by scymds01.sc.intel.com with ESMTP id 24DBgxEu014207; Fri, 13 May 2022 04:43:00 -0700 To: gcc-patches@gcc.gnu.org Subject: [PATCH] [i386] Fix ICE caused by wrong condition. Date: Fri, 13 May 2022 19:42:59 +0800 Message-Id: <20220513114259.19129-1-hongtao.liu@intel.com> X-Mailer: git-send-email 2.18.1 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: liuhongt via Gcc-patches From: liuhongt Reply-To: liuhongt Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" When d->perm[i] == d->perm[i-1] + 1 and d->perm[i] == nelt, it's not continuous. It should fail if there's more than 2 continuous areas. Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. Ok for trunk? gcc/ChangeLog: PR target/105587 * config/i386/i386-expand.cc (expand_vec_perm_pslldq_psrldq_por): Fail when (d->perm[i] == d->perm[i-1] + 1) && d->perm[i] == nelt && start != -1. gcc/testsuite/ChangeLog: * gcc.target/i386/pr105587.c: New test. --- gcc/config/i386/i386-expand.cc | 9 ++------- gcc/testsuite/gcc.target/i386/pr105587.c | 11 +++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr105587.c diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 0fd3028c205..806e1f5aaa3 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -20963,7 +20963,8 @@ expand_vec_perm_pslldq_psrldq_por (struct expand_vec_perm_d *d, bool pandn) start1 = d->perm[0]; for (i = 1; i < nelt; i++) { - if (d->perm[i] != d->perm[i-1] + 1) + if (d->perm[i] != d->perm[i-1] + 1 + || d->perm[i] == nelt) { if (start2 == -1) { @@ -20973,12 +20974,6 @@ expand_vec_perm_pslldq_psrldq_por (struct expand_vec_perm_d *d, bool pandn) else return false; } - else if (d->perm[i] >= nelt - && start2 == -1) - { - start2 = d->perm[i]; - end1 = d->perm[i-1]; - } } clear_op0 = end1 != nelt - 1; diff --git a/gcc/testsuite/gcc.target/i386/pr105587.c b/gcc/testsuite/gcc.target/i386/pr105587.c new file mode 100644 index 00000000000..a5b6ab2a016 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr105587.c @@ -0,0 +1,11 @@ +#/* { dg-do compile } */ +/* { dg-options "-O3 -msse2 -mno-ssse3" } */ + +extern short arr_108[][4][2][24][12], arr_110[][4][2][24][12]; +void test() { + for (unsigned a = 0; a < 2; a += 2) + for (unsigned b = 4; b < 22; b++) + for (int c = 1; c < 11; c++) + arr_110[0][0][a][b][c] = (unsigned char)arr_108[0][0][a][b][c]; +} +