From patchwork Wed Dec 14 15:18:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Jambor X-Patchwork-Id: 33236 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp284748wrn; Wed, 14 Dec 2022 07:19:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Us5BN0ac7tesPB4wctpEHV7YSbwdqSy4MR/PCGwVAZfog0REPMAhcQsDrf826F9gxyMlq X-Received: by 2002:a17:906:b091:b0:7ae:bfec:74c7 with SMTP id x17-20020a170906b09100b007aebfec74c7mr22078120ejy.72.1671031181250; Wed, 14 Dec 2022 07:19:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671031181; cv=none; d=google.com; s=arc-20160816; b=F0Ak+wpH6kBriePXoh1f9mCdioOKBi1GZWC+qGrTOGr7h5Cu4vuCbd5Kpeizhy78Wl 94NugB+R0letKfqUIMBL3gQYdAgS0u7ZhcWQsyq9iS24tJLJZA0NLtPaYIdd+IB4N9wy 4EY4jxYsoMPxPian8/4Wn74V3L00Z00jmwOsiCzh1vQ0pmScIIq90+kSO4+yJcKpNV6b EiL6Xk3ehVEpnSHOgwCNRTs4IsWS/znmCTemHp5SRgcZR7DxLXwIWH47VFMqhzDgVEr7 ezJOuEuyipBMjCVppznYYDzmTcAoMvecA8wuDwYLvxR8A0YqTQSMuvRwvu2wePdCiQsX he9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mime-version:message-id:date :user-agent:subject:cc:to:from:dkim-signature:dkim-signature :dmarc-filter:delivered-to; bh=gem8nKAnXU17L2e6N4UrbViBJbpEQ8b+zJBy843OvUs=; b=eEJ58YCqBViuZGlPybv9nih467njBUb1EW6xnTIX+miJXDohXCzdWiqhYh1n34IelZ CPrNGdMQpCYRmIk+Di5nhv4KgCEWLK2UlJBUNix5XACpvWJa/vz/hTvIZqx3iKA3eBSH 0gogb4MRPAHuYaxyo7GwzJTO9+L8XOVNqn2uUwfWYQKHajsCtGdNs21vojr0fAtmFf+5 TKFT5ZTDekLWb4b3Yg33oVPVVLD7GA7SrwHLRAT0jcBxhRVxjKpxLT0Seo/wSaQOE79E NDUqTsf/3q+68XpcL2hq8vmFKLppqquhZRYQZNa5JhWhq5ur6sqGi39sOmbcdK9/GADu xTSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.cz header.s=susede2_rsa header.b=xgecHrfv; dkim=neutral (no key) header.i=@gcc.gnu.org header.s=susede2_ed25519; 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" Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id jg15-20020a170907970f00b007c0bc4924cbsi11901083ejc.963.2022.12.14.07.19.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 07:19:41 -0800 (PST) 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=@suse.cz header.s=susede2_rsa header.b=xgecHrfv; dkim=neutral (no key) header.i=@gcc.gnu.org header.s=susede2_ed25519; 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7A91C3884FB0 for ; Wed, 14 Dec 2022 15:19:24 +0000 (GMT) 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 44AD4382CB94 for ; Wed, 14 Dec 2022 15:19:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 44AD4382CB94 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.cz 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 5D28622142; Wed, 14 Dec 2022 15:18:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1671031139; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type; bh=gem8nKAnXU17L2e6N4UrbViBJbpEQ8b+zJBy843OvUs=; b=xgecHrfvQB05X6XPbGomWdWwiwAb0aXMUY+YJcAenm2Z8qn+V6ygKYVkO5PRAgRX7POFnL MmPaZQeMj7W5+PmwOSpWn4JXMsQ+yJ0oybgyoibt4GZi0Q2FOWWkf5zqG/e4C+Ic3jQ4/t HWcff75d40+6u2ocrMbWJ0BguVOkTqI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1671031139; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type; bh=gem8nKAnXU17L2e6N4UrbViBJbpEQ8b+zJBy843OvUs=; b=mNn65h/PV1U3Kse+qGcRRgCBWHbDxvuJcsN/UhYywSNEyewtVT2OLvOJsAaiZCyVjYNUdr uTwYnAlDfo35/XBg== 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 4FD2E1333E; Wed, 14 Dec 2022 15:18:59 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id QGFoE2PpmWMDRAAAMHmgww (envelope-from ); Wed, 14 Dec 2022 15:18:59 +0000 From: Martin Jambor To: GCC Patches Cc: Jan Hubicka , Jan Hubicka Subject: [PATCH] ipa-sra: Consider the first parameter of methods safe to dereference User-Agent: Notmuch/0.37 (https://notmuchmail.org) Emacs/28.1 (x86_64-suse-linux-gnu) Date: Wed, 14 Dec 2022 16:18:58 +0100 Message-ID: MIME-Version: 1.0 X-Spam-Status: No, score=-11.9 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 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: , 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?1752203191826644273?= X-GMAIL-MSGID: =?utf-8?q?1752203191826644273?= Hi, Honza requested this after reviewing the patch that taught IPA-SRA that REFERENCE_TYPEs are always non-NULL that the pass also handles the first parameters of methods, this pointers, in the same way. So this patch does that. The patch is undergoing bootstrap and testing on an x86_64-linux right now. OK if it passes? Thanks, Martin gcc/ChangeLog: 2022-12-14 Martin Jambor * ipa-sra.cc (create_parameter_descriptors): Consider the first parameter of a method safe to dereference. gcc/testsuite/ChangeLog: 2022-12-14 Martin Jambor * g++.dg/ipa/ipa-sra-6.C: New test. --- gcc/ipa-sra.cc | 7 +++- gcc/testsuite/g++.dg/ipa/ipa-sra-6.C | 62 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-sra-6.C diff --git a/gcc/ipa-sra.cc b/gcc/ipa-sra.cc index bcabdedfc6c..6fe336eeb19 100644 --- a/gcc/ipa-sra.cc +++ b/gcc/ipa-sra.cc @@ -1206,7 +1206,12 @@ create_parameter_descriptors (cgraph_node *node, if (POINTER_TYPE_P (type)) { desc->by_ref = true; - desc->safe_ref = (TREE_CODE (type) == REFERENCE_TYPE); + if (TREE_CODE (type) == REFERENCE_TYPE + || (num == 0 + && TREE_CODE (TREE_TYPE (node->decl)) == METHOD_TYPE)) + desc->safe_ref = true; + else + desc->safe_ref = false; type = TREE_TYPE (type); if (TREE_CODE (type) == FUNCTION_TYPE diff --git a/gcc/testsuite/g++.dg/ipa/ipa-sra-6.C b/gcc/testsuite/g++.dg/ipa/ipa-sra-6.C new file mode 100644 index 00000000000..d6b7822533f --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/ipa-sra-6.C @@ -0,0 +1,62 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-ipa-sra" } */ + +namespace { + +class C +{ + + int mi; + +public: + C (int i) + : mi(i) + {} + + void foo (int c); +}; + +volatile int vi; + + +void __attribute__((noinline)) +C::foo (int cond) +{ + int i; + if (cond) + i = mi; + else + i = 0; + vi = i; +} + +static C c_instance(1); +} + +void __attribute__((noinline)) +bar (C *p, int cond) +{ + p->foo (cond); +} + + +class C *gp; + +void something(void); + +void +baz (int cond) +{ + C c(vi); + gp = &c; + something (); + bar (gp, cond); +} + +void +hoo(void) +{ + gp = &c_instance; +} + +/* { dg-final { scan-ipa-dump "Will split parameter" "sra" } } */