From patchwork Wed Apr 12 10:23:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 82366 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp214070vqo; Wed, 12 Apr 2023 03:24:14 -0700 (PDT) X-Google-Smtp-Source: AKy350ZjPpiBc24PXFDkkSJq2sAl/xb3hT7ux0iii3wV3PBGIiO46z3URFyjbu7CcdVDG/LN4szO X-Received: by 2002:a17:907:7639:b0:949:ab5c:f10c with SMTP id jy25-20020a170907763900b00949ab5cf10cmr1497307ejc.63.1681295054401; Wed, 12 Apr 2023 03:24:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681295054; cv=none; d=google.com; s=arc-20160816; b=0v2s5jpy2IAibr5XIzop12meVsWpzkM1XBoLot97QncNdzkYviWNoko/RXyABBf+Vx 5w+2LsG09GNGHy5kj06Gh+kcmc2LgYVwPgEvcduYEU+7jUMSWCpb3LlxG9NjjnnyzYG0 LTx1gV+O+bdvoIXO66jrQFM3y7i1cnnUzUBCxGitRYagfcv14H//ZzpygoIg5uD9KPlx mBCGB/eKFButFHQsk2bJGt97vHL9wkZS31k97JKsobMkhZLG9m6KtjbNZvN4OI0PqzgI z6W4vg3AG4jXWqy0ds799MasrNN2yANh574xCYyxr4mOIe2u+PniyaH3IE4CfWFDb68N VTJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:sender:errors-to:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mime-version:user-agent:subject:to:date:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=HGDyFHZO+I6oilh0pND3hJPUqcZSQIfrMEWsuCuBEAc=; b=vlxXFJ7trdTEIYCQcBV45v2iaEb6dycuvpPOcuHEIRsSptIk5Q+zJU6nIaA8Z3fkzy yXg4gOWUx6xdXyGfR/C/IWJjqb6+Vqsoc7MjRAAvstB722eE6rGRj6+5mGYxbNlUr2xK Z2AEdBPwVOYztZZsnQpVUjvMQNyWLrmIVQusWPv0MYwkawEKx5QGwoVRV02IVxLCq5co hJS9UI+lolnKtGb7ZPkQyGRRixE5eMe1btyfnHpegJwcoTnY2OGf+y0JXw17ZoM07lG1 ShG+zWFdHh24mVqHZJRqDH02wfb6EO2+ICgHyh+l3epkrCW+gam1nbg/c2zTyWaQ9BqP TDSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=fhglu7Ok; 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 (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id f3-20020a056402068300b00504b3e0d1d0si2438760edy.231.2023.04.12.03.24.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Apr 2023 03:24:14 -0700 (PDT) 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=fhglu7Ok; 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 9F5BC3858C83 for ; Wed, 12 Apr 2023 10:24:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F5BC3858C83 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681295046; bh=HGDyFHZO+I6oilh0pND3hJPUqcZSQIfrMEWsuCuBEAc=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=fhglu7OkYt9j/qu+wPvNhE9ePD3mcnPRdKJMbodtfnZs7vEtEo9AP3ZlS28MptMye B1fhaLKNHd+fpe01kDio4u5dkh9WKlHKujZ3921QNYFrN0qeI7RtxbR2Di2rwL7msc 3Jamgsrg5Pj2x6D+MDqwdQYyTC9mB0j1WeN2zA8Q= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id 7359F3858D32 for ; Wed, 12 Apr 2023 10:23:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7359F3858D32 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id 99E022193C for ; Wed, 12 Apr 2023 10:23:20 +0000 (UTC) Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id 8F89B2C143 for ; Wed, 12 Apr 2023 10:23:20 +0000 (UTC) Date: Wed, 12 Apr 2023 10:23:20 +0000 (UTC) To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/109473 - ICE with reduction epilog adjustment op User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MISSING_MID, SPF_HELO_NONE, SPF_PASS, TXREP 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: Richard Biener via Gcc-patches From: Richard Biener Reply-To: Richard Biener Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" Message-Id: <20230412102406.9F5BC3858C83@sourceware.org> X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762965642978422675?= X-GMAIL-MSGID: =?utf-8?q?1762965642978422675?= The following makes sure to carry out the reduction epilog adjustment in the original computation type which for pointers is an unsigned integer type. There's a similar issue with signed vs. unsigned ops and overflow which is fixed by this as well. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/109473 * tree-vect-loop.cc (vect_create_epilog_for_reduction): Convert scalar result to the computation type before performing the reduction adjustment. * gcc.dg/vect/pr109473.c: New testcase. --- gcc/testsuite/gcc.dg/vect/pr109473.c | 16 ++++++++++++++++ gcc/tree-vect-loop.cc | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr109473.c diff --git a/gcc/testsuite/gcc.dg/vect/pr109473.c b/gcc/testsuite/gcc.dg/vect/pr109473.c new file mode 100644 index 00000000000..9dee5515dc6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr109473.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O" } */ + +struct spa_buffer { + __UINT32_TYPE__ *metas; +}; +void do_port_use_buffers(struct spa_buffer **buffers, void *endptr, void *mem) +{ + for (int i = 0; i < 128; i++) + { + for (int j = 0; j < 128; j++) + endptr = (void *)((__UINTPTR_TYPE__)endptr + buffers[i]->metas[j]); + if (endptr > mem) + return; + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 1ba9f18d73e..ba28214f09a 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -6297,9 +6297,12 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, { new_temp = scalar_results[0]; gcc_assert (TREE_CODE (TREE_TYPE (adjustment_def)) != VECTOR_TYPE); - adjustment_def = gimple_convert (&stmts, scalar_type, adjustment_def); - new_temp = gimple_build (&stmts, code, scalar_type, + adjustment_def = gimple_convert (&stmts, TREE_TYPE (vectype), + adjustment_def); + new_temp = gimple_convert (&stmts, TREE_TYPE (vectype), new_temp); + new_temp = gimple_build (&stmts, code, TREE_TYPE (vectype), new_temp, adjustment_def); + new_temp = gimple_convert (&stmts, scalar_type, new_temp); } epilog_stmt = gimple_seq_last_stmt (stmts);