From patchwork Fri Jun 30 10:59: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: 114673 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp10265515vqr; Fri, 30 Jun 2023 04:00:09 -0700 (PDT) X-Google-Smtp-Source: APBJJlHsFam/iHcpo3X6LO8OeaMtCbYLKVUutd1+Dq/ZD6LyWUH05QoSaZr4+vbgunqwwYP4Cw+/ X-Received: by 2002:a17:906:e20b:b0:960:d9d:ffb5 with SMTP id gf11-20020a170906e20b00b009600d9dffb5mr1483166ejb.41.1688122808813; Fri, 30 Jun 2023 04:00:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688122808; cv=none; d=google.com; s=arc-20160816; b=oNRAhM75Oh1flF0A9DVy3JeN8VDDckvraiwg1KU1G+ep+KBw1PMlHRhJHpfL6xxhwB 5Lrfs0xQx5xe/TKCvwyN9cIeA7Bxa9HdusUbU8ULlupI3lp3y9VsrfiHsr9e5bnhE61P YUwb2mBv5fAi66uJf8B+CDjmH8UOSnlyVBnyWqd0/vFVv/LbK1vUvhPQbNG/G0xqHItn 267rbWWh86kpbjiabhXea//2rdxfsrRDPt3KQbDkpzPwW2q8JrpvxVZ1A4adbrVAA8tH H33bzRlB3elKLepkycgHIBS3+0ZlDTJNrSIV3a9CR5w4/BGd1RnJSv7MwToACI4h+xp+ nCqg== 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:message-id :mime-version:subject:to:date:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=9PooOUkNhK1jOFpqD7R2tbU9A7yQyoylacWxFn6qjR8=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=0D8Uy4GfFFM1Z1ce4IQ2/YGfl3RNXGIkSK178sgsBFNXn2OPg/HmTrQUmvv0On07li l5L+zf5O+j72+CS8+JGdmzGfbDzmkTIcGupDrf+vwktZby2VV4pvvthxcNKHeJIM4OTh MqI4BrzAVRhpiZr2ZB7Oh0yYk6/oa5uuCWaw3IgXH3t2DhTGk7NYtrG7TYn6xMLIhQAW vorF0+KLMFbaHCtwTnaSjS7gGN4YeKfoDWVjFp05XY30YdVobIr8V5J7moQmHj33X+GQ Wb6rRQ/2HaFPco67x1xepd33vz/a+BmfScnn89yLHr6ACkLSOfCiqenENtXPffAfYoe8 WMAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ws874omz; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c 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. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id h15-20020a170906590f00b00982aace0211si8257342ejq.463.2023.06.30.04.00.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jun 2023 04:00:08 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ws874omz; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c 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 80F19386C5AB for ; Fri, 30 Jun 2023 11:00:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 80F19386C5AB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1688122806; bh=9PooOUkNhK1jOFpqD7R2tbU9A7yQyoylacWxFn6qjR8=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=ws874omzwH7Txd9F7hE+js9OrDm2l/HP+hu16QpBo2vvdVLeOwdCjmOJ4rXeQI1kM DYfYKaljkWR8sBSZQNtrOabKNvto4kK6xFYSAZXafOj0lgPkzgqKuzVcVedrBJ1vel Zh3mgGGXnbUuq9aVJLQU2zLf785rF+2PbQYLCOiA= 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 [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id A58DA385E005 for ; Fri, 30 Jun 2023 10:59:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A58DA385E005 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id D17032185F for ; Fri, 30 Jun 2023 10:59:20 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id BA70D138F8 for ; Fri, 30 Jun 2023 10:59:20 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id ez9sLIi1nmTsGgAAMHmgww (envelope-from ) for ; Fri, 30 Jun 2023 10:59:20 +0000 Date: Fri, 30 Jun 2023 12:59:20 +0200 (CEST) To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/110496 - TYPE_PRECISION issue with store-merging MIME-Version: 1.0 Message-Id: <20230630105920.BA70D138F8@imap2.suse-dmz.suse.de> X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770125062050929162?= X-GMAIL-MSGID: =?utf-8?q?1770125062050929162?= When store-merging looks for bswap opportunities we also handle BIT_FIELD_REFs where we verify the refed object is of scalar type but we don't check for the result type we eventually use. That's done later but after we eventually query TYPE_PRECISION. The following re-orders this. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/110496 * gimple-ssa-store-merging.cc (find_bswap_or_nop_1): Re-order verifying and TYPE_PRECISION query for the BIT_FIELD_REF case. * gcc.dg/pr110496.c: New testcase. --- gcc/gimple-ssa-store-merging.cc | 5 ++++- gcc/testsuite/gcc.dg/pr110496.c | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr110496.c diff --git a/gcc/gimple-ssa-store-merging.cc b/gcc/gimple-ssa-store-merging.cc index 401496a9231..0d19b98ed73 100644 --- a/gcc/gimple-ssa-store-merging.cc +++ b/gcc/gimple-ssa-store-merging.cc @@ -650,10 +650,13 @@ find_bswap_or_nop_1 (gimple *stmt, struct symbolic_number *n, int limit) /* Convert. */ n->type = TREE_TYPE (rhs1); + if (!verify_symbolic_number_p (n, stmt)) + return NULL; + if (!n->base_addr) n->range = TYPE_PRECISION (n->type) / BITS_PER_UNIT; - return verify_symbolic_number_p (n, stmt) ? stmt : NULL; + return stmt; } return NULL; diff --git a/gcc/testsuite/gcc.dg/pr110496.c b/gcc/testsuite/gcc.dg/pr110496.c new file mode 100644 index 00000000000..3c3d12fb532 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr110496.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +long contents, f_num; +int decide(); +int f_MV0__x; +void f() { + unsigned char *rptr; + unsigned char valbuf[6]; + rptr = (unsigned char *)contents; + if (decide()) + do { + __builtin_memcpy(valbuf, &f_MV0__x, sizeof(int)); + (&valbuf[0])[4] = (&valbuf[0])[5] = 0; + } while (0); + else { + int MV0__x = f_num; + __builtin_memcpy(valbuf, &MV0__x, sizeof(int)); + (&valbuf[0])[4] = (&valbuf[0])[5] = 0; + } + rptr[1] = valbuf[4]; + rptr[2] = valbuf[5]; + rptr[4] = valbuf[1]; + rptr[5] = valbuf[2]; + __builtin_memset(valbuf, 0, 8); +}