From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id 2062F3858414; Mon, 11 Dec 2023 22:08:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2062F3858414 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1702332490; bh=fyRLMkwxMKLFRBZ2wBkpjuwGtA397tY9HrB8oalZa7o=; h=From:To:Subject:Date:From; b=N86EOQULzgIQlOobxgZmHmEX48JRVX7P3Yhy77sFF5WemW1r6bGZhrzmc4pPwj02y 8Y63VxMitR6HsASwIUDZy8/uZ5vSUCH2IZtw63z9drGAtDanOI5Ky6tLTBYFlwZuxn YF/g/71E6ovyr35K0To6XbYMYqwdEb5+IylJeYUc= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Alexandre Oliva To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/testme)] strub: drop volatile from wrapper args X-Act-Checkin: gcc X-Git-Author: Alexandre Oliva X-Git-Refname: refs/users/aoliva/heads/testme X-Git-Oldrev: 27c64b7546f1651f6c1e1e99f49161551491a33b X-Git-Newrev: 917412bceaa01b289719c3c8786f9ed4465ccb7c Message-Id: <20231211220810.2062F3858414@sourceware.org> Date: Mon, 11 Dec 2023 22:08:10 +0000 (GMT) List-Id: https://gcc.gnu.org/g:917412bceaa01b289719c3c8786f9ed4465ccb7c commit 917412bceaa01b289719c3c8786f9ed4465ccb7c Author: Alexandre Oliva Date: Mon Dec 11 16:16:45 2023 -0300 strub: drop volatile from wrapper args Drop volatile from argument types in internal strub wrappers that are not made indirect. Their volatility is only relevant within the body of the function, and that body is moved to the wrapped function. for gcc/ChangeLog * ipa-strub.cc (pass_ipa_strub::execute): Drop volatile from internal strub wrapper args. for gcc/testsuite/ChangeLog * c-c++-common/strub-internal-volatile.c: Check for dropped volatile in wrapper. Diff: --- gcc/ipa-strub.cc | 14 +++++++++++--- gcc/testsuite/c-c++-common/strub-internal-volatile.c | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/ipa-strub.cc b/gcc/ipa-strub.cc index 45294b0b46b..bab20c386bb 100644 --- a/gcc/ipa-strub.cc +++ b/gcc/ipa-strub.cc @@ -2922,6 +2922,16 @@ pass_ipa_strub::execute (function *) if (nparmt) adjust_ftype++; } + else if (TREE_THIS_VOLATILE (parm)) + { + /* Drop volatile from wrapper's arguments, they're just + temporaries copied to the wrapped function. ??? Should + we drop TYPE_QUAL_ATOMIC as well? */ + TREE_TYPE (parm) = build_qualified_type (TREE_TYPE (parm), + TYPE_QUALS (TREE_TYPE (parm)) + & ~TYPE_QUAL_VOLATILE); + TREE_THIS_VOLATILE (parm) = 0; + } /* Also adjust the wrapped function type, if needed. */ if (adjust_ftype) @@ -3224,9 +3234,7 @@ pass_ipa_strub::execute (function *) { tree tmp = arg; /* If ARG is e.g. volatile, we must copy and - convert in separate statements. ??? Should - we drop volatile from the wrapper - instead? */ + convert in separate statements. */ if (!is_gimple_val (arg)) { tmp = create_tmp_reg (TYPE_MAIN_VARIANT diff --git a/gcc/testsuite/c-c++-common/strub-internal-volatile.c b/gcc/testsuite/c-c++-common/strub-internal-volatile.c index cdfca67616b..0ffa98d799d 100644 --- a/gcc/testsuite/c-c++-common/strub-internal-volatile.c +++ b/gcc/testsuite/c-c++-common/strub-internal-volatile.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-options "-fdump-ipa-strub" } */ /* { dg-require-effective-target strub } */ void __attribute__ ((strub("internal"))) @@ -8,3 +9,7 @@ f(volatile short) { void g(void) { f(0); } + +/* We drop volatile from the wrapper, and keep it in the wrapped f, so + the count remains 1. */ +/* { dg-final { scan-ipa-dump-times "volatile" 1 "strub" } } */