From patchwork Fri Dec 2 07:21:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Prathamesh Kulkarni X-Patchwork-Id: 28730 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp693272wrr; Thu, 1 Dec 2022 23:23:04 -0800 (PST) X-Google-Smtp-Source: AA0mqf4MFa0I1jR+htiwu8YBTUVYIqvkHizk8Noo3/Go6xJhVNiMi64/xX/aauaf5gANw9WBEbOf X-Received: by 2002:a05:6402:19a:b0:460:7413:5d46 with SMTP id r26-20020a056402019a00b0046074135d46mr63275720edv.47.1669965783901; Thu, 01 Dec 2022 23:23:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669965783; cv=none; d=google.com; s=arc-20160816; b=oZ24XKdVckR2NQIrDDa2CHmrfaJtQWhF1e31fNfZQxCpkDoikrFOp+WRQGrN+YpEzl xn03RALG6RwCvRLB/S8jPKof0f4/efkhRnEodTruptkAAibJaN6q9C45RPUM1KhjYnb5 62rL5XXPnfj5dkF+4SihjxvN+5EyDruogfj1clg0+x1Yo/BUI+o2BCF6NRRczSwm0+AR KhmSHmjP8Rhf0YWaHcSYgpky/HugZeFf/1ytGxcy1wjddCt41RZYbxUUBVb9XqI2ppAG TPIWkpGjPlnZe/GINvPpU1DroK3n07zuFbEKUjfZHTvtEm3mDJ47Uw6VZCcr6D4wImTv NCdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:to:subject :message-id:date:mime-version:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=qUTLqkdODCQqZRjnUH4hANppAgmux57gU7R6+VgTnfM=; b=kb2XP5hgXO5So6lBCPAgXbha2Nqa8948GbcWlJpbjKsVczwwN8VhodlYKYt4XlpuXG YcCpzIQ7aISz6Cxs0kZfYqkfdLKr4SvwH6PY6hPOE3W0A2LyF8Yr9h9nCI2Ht69kzfKC tk9R6qt7/WR6ql/XOXkRcbePZIecweJny7WdHxARfL2R0geRdjAKCtjx8gQnNQgNu7Z8 gIwLZm5aq7v3yRnwXIRnhwbCq1GkZtVci6oV9gqZnBset4TSgoOR40i2xTnlo8DTme0Z SN/uRGlUHAHicY+HeNz2ndU19/3XYky0jK9cQvADpMAFe/11ryHsEpZHMh3mYnU1KQSZ TdAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="Jj/UvwdZ"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id hd36-20020a17090796a400b007721f88d3e0si5139976ejc.554.2022.12.01.23.23.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 23:23:03 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="Jj/UvwdZ"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A49DA385843D for ; Fri, 2 Dec 2022 07:22:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A49DA385843D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1669965779; bh=qUTLqkdODCQqZRjnUH4hANppAgmux57gU7R6+VgTnfM=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=Jj/UvwdZmgHyXrD4V3bUWd/xLhZvbieddcrb4qOOMEwbAIpvNA217gOZL8bK4pMRv 8OO7ry5RyYtOTMWS6QhAaVexH4gN+4hR2fVKKcVZeast1rKabem6I9Z6ZwlGyR3uDz ihgS2aMKH0JZILW0z8zKj5XiU3xXHHsnhLttC/3A= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by sourceware.org (Postfix) with ESMTPS id A43E13858D32 for ; Fri, 2 Dec 2022 07:22:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A43E13858D32 Received: by mail-lj1-x233.google.com with SMTP id a7so4445682ljq.12 for ; Thu, 01 Dec 2022 23:22:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=qUTLqkdODCQqZRjnUH4hANppAgmux57gU7R6+VgTnfM=; b=MU7yTVd/3TLMxzQXgUFZ95K7bRUuRspl9gUFHRTzZW2LMMWhSI8ywEMyARGHw+v9Gq ucNbDbyykZJKzncrDEnm9yDvzQ74LFXzWA6Cq0DhEtrIFLLl5HrkEZEZHQlobS6HonS+ g4Dlyle2AbzCfsclYjbc7GgjsdRp4zHiUlnWhuSDtWZ3SQi/FhCgbRqSiH59FojGpV4m t3DirRQRSKFgQ+9uiVotfJx12EmKrlvhkWrUQ/6fezIPi5OZZeLSssh54b0yJEqG2tsk fr896m8zjx96Y/bUj+vRdL/MaYPKwyVk2DqIQQB0ityq7i39LMvY8LGIqIYxxBAz36W/ og+w== X-Gm-Message-State: ANoB5pmfCeucgk5muDMyu3d4dnEXNDyXuZs76VF6NafPwxhL2myA3IbN vaX9S0sa8OwbEROze2i3/WthZT6uDDJj5INdXxD6QQLU+51WSuAA X-Received: by 2002:a2e:8ed8:0:b0:279:78e1:c7a4 with SMTP id e24-20020a2e8ed8000000b0027978e1c7a4mr14168355ljl.529.1669965734362; Thu, 01 Dec 2022 23:22:14 -0800 (PST) MIME-Version: 1.0 Date: Fri, 2 Dec 2022 12:51:37 +0530 Message-ID: Subject: [aarch64] PR107920 - Fix incorrect handling of virtual operands in svld1rq_impl::fold To: gcc Patches , Richard Sandiford X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, WEIRD_PORT 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: Prathamesh Kulkarni via Gcc-patches From: Prathamesh Kulkarni Reply-To: Prathamesh Kulkarni Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751086041779431555?= X-GMAIL-MSGID: =?utf-8?q?1751086041779431555?= Hi, The following test: #include "arm_sve.h" svint8_t test_s8(int8_t *x) { return svld1rq_s8 (svptrue_b8 (), &x[0]); } ICE's with -march=armv8.2-a+sve -O1 -fno-tree-ccp -fno-tree-forwprop: during GIMPLE pass: fre pr107920.c: In function ‘test_s8’: pr107920.c:7:1: internal compiler error: in execute_todo, at passes.cc:2140 7 | } | ^ 0x7b03d0 execute_todo ../../gcc/gcc/passes.cc:2140 because of incorrect handling of virtual operands in svld1rq_impl::fold: # VUSE <.MEM> _5 = MEM [(signed char * {ref-all})x_3(D)]; _4 = VEC_PERM_EXPR <_5, _5, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ... }>; # VUSE <.MEM_2(D)> return _4; The attached patch tries to fix the issue by building the replacement statements in gimple_seq, and passing it to gsi_replace_with_seq_vops, which resolves the ICE, and results in: : # VUSE <.MEM_2(D)> _5 = MEM [(signed char * {ref-all})x_3(D)]; _4 = VEC_PERM_EXPR <_5, _5, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ... }>; # VUSE <.MEM_2(D)> return _4; Bootstrapped+tested on aarch64-linux-gnu. OK to commit ? Thanks, Prathamesh diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index 6347407555f..f5546a65d22 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -45,6 +45,7 @@ #include "aarch64-sve-builtins-base.h" #include "aarch64-sve-builtins-functions.h" #include "ssa.h" +#include "gimple-fold.h" using namespace aarch64_sve; @@ -1232,7 +1233,9 @@ public: tree mem_ref_op = fold_build2 (MEM_REF, access_type, arg1, zero); gimple *mem_ref_stmt = gimple_build_assign (mem_ref_lhs, mem_ref_op); - gsi_insert_before (f.gsi, mem_ref_stmt, GSI_SAME_STMT); + + gimple_seq stmts = NULL; + gimple_seq_add_stmt_without_update (&stmts, mem_ref_stmt); int source_nelts = TYPE_VECTOR_SUBPARTS (access_type).to_constant (); vec_perm_builder sel (lhs_len, source_nelts, 1); @@ -1245,8 +1248,11 @@ public: indices)); tree mask_type = build_vector_type (ssizetype, lhs_len); tree mask = vec_perm_indices_to_tree (mask_type, indices); - return gimple_build_assign (lhs, VEC_PERM_EXPR, - mem_ref_lhs, mem_ref_lhs, mask); + gimple *g2 = gimple_build_assign (lhs, VEC_PERM_EXPR, + mem_ref_lhs, mem_ref_lhs, mask); + gimple_seq_add_stmt_without_update (&stmts, g2); + gsi_replace_with_seq_vops (f.gsi, stmts); + return g2; } return NULL; diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index c2d9c806aee..03cdb2f9f49 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -591,7 +591,7 @@ fold_gimple_assign (gimple_stmt_iterator *si) If the statement has a lhs the last stmt in the sequence is expected to assign to that lhs. */ -static void +void gsi_replace_with_seq_vops (gimple_stmt_iterator *si_p, gimple_seq stmts) { gimple *stmt = gsi_stmt (*si_p); diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 7d29ee9a9a4..87ed4e56d25 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -63,6 +63,7 @@ extern bool arith_code_with_undefined_signed_overflow (tree_code); extern gimple_seq rewrite_to_defined_overflow (gimple *, bool = false); extern void replace_call_with_value (gimple_stmt_iterator *, tree); extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree, tree); +extern void gsi_replace_with_seq_vops (gimple_stmt_iterator *, gimple_seq); /* gimple_build, functionally matching fold_buildN, outputs stmts int the provided sequence, matching and simplifying them on-the-fly. diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr107920.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr107920.c new file mode 100644 index 00000000000..11448ed5e68 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr107920.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fno-tree-ccp -fno-tree-forwprop" } */ + +#include "arm_sve.h" + +svint8_t +test_s8(int8_t *x) +{ + return svld1rq_s8 (svptrue_b8 (), &x[0]); +}