From patchwork Wed Dec 13 03:06:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 82019 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5E6663857719 for ; Wed, 13 Dec 2023 03:06:50 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-il1-x12c.google.com (mail-il1-x12c.google.com [IPv6:2607:f8b0:4864:20::12c]) by sourceware.org (Postfix) with ESMTPS id 7FD733858C78 for ; Wed, 13 Dec 2023 03:06:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7FD733858C78 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7FD733858C78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702436795; cv=none; b=K7p07mgIt5Qaj0S7/fpV3EGJXBkODIKdSu6BISYRadZypxR8lD5Fbmak4MCdS4cZ69WV6aJJIz/CQ8h5q6amnd+jSsHYAcR6PJA5tooI2tX4ealLU0IszFxgiCTgmC0A0MZui778h4mVJrr7bjs5KnKY9P0jVO+n/Uqjar/uzNQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702436795; c=relaxed/simple; bh=42dOESCB40wDMbXx3AOzYvqMdb7RM3Iqz1TxzT7VSbM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=oZ7g2nD73uGYZABV1rR2yYNTu1x0EgM2dCoQjIsBqcg7bqAxLzhOlC2yFcIeuKR3jljiriC3pmn3+x4j2BUdU2A1wtMxqVF+P+7sKZsr6b9FLVyMt+vbTwZvGxsYKQS/Yvf5s8C3yToJDc+TBYvMC0KP7DGc4UQ/THch5C8+/KQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12c.google.com with SMTP id e9e14a558f8ab-35da93ba227so23382685ab.0 for ; Tue, 12 Dec 2023 19:06:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1702436793; x=1703041593; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:organization:in-reply-to:subject:cc:to:from:from:to:cc :subject:date:message-id:reply-to; bh=dys4O6H58lbIDPBXdnFrOeHDFyKvtfGZiqRFu7Xs1BY=; b=goZnCxA46CrCwy36NId575kLe1WGQQcD07F6Dk2h49sNEYBMo3r2WvHAXiBEJyTc7x 1bwRGIS1UEs3ns5BBLtkX0WABWebmhffOnk7VlskbpN1/2RWQqQUugb0scOEi8fW4p8f 48UDe8SsqyEmB0WAgB0Z/NTBGgD0L6K4YZSWTzOjk9yTsYIam+6zMA5tIvx90+/e1yq2 YUBc29nXjI5WdlUNwILs0kBFOf/ulUiZ/PgZL+744u8iYthfex1Rs6IdpaLztE2Xu+1l ygeYtoRwLUyXs697qohJ3ggy79/RsaUcLLZFg29QbI6eVyhub0Js6eDy+iQ8xwLY7Xk3 WBaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702436793; x=1703041593; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:organization:in-reply-to:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dys4O6H58lbIDPBXdnFrOeHDFyKvtfGZiqRFu7Xs1BY=; b=s8smbtMeCiTpJtAUMY+p/tEqoPyJDd5UGfGwjc9/T18qvd9lYdcsnvLc1DmFrPGhOk fOT4BbKKTbfTItntCTposJZeTBgs4rnek9E2T4Edqgpmz45SxgNPFxs52o2/xB+f8jBE ipxdr74TQd5V8y5wzi4P0X90b+1WuaaXMk7bq0WiZSQJkrrzkdzDagD61dI2cz4bdTIx YJ1OVXsSMESm5sN2EX1k6AqhVzHbrCP4T7W34Z+IgDjGTKiGK833Nllm/hFpZEO+Eima wTguSOt/f7V/rvR7XBf+/kT+CSzCIHbIjXPRuCSAdCI+ClTaJLP6j7M6CR3XVOw+1C5E c3gw== X-Gm-Message-State: AOJu0Yyc6KOnJ7Ep28HC5svX9K1vwLVOfzmFrep50Zck6dIynNnY1w8n eCEogdBajHPfokHBX9a2emmrDw== X-Google-Smtp-Source: AGHT+IFLquC9QYtVU5QWeurAdgBfK47YV20kSkhAhI8v9x2kLb1OhMeTvC/EexE7mya6gD8Ptm1m6Q== X-Received: by 2002:a05:6e02:1aa2:b0:35d:59a2:bda with SMTP id l2-20020a056e021aa200b0035d59a20bdamr6320825ilv.112.1702436793563; Tue, 12 Dec 2023 19:06:33 -0800 (PST) Received: from free.home ([2804:7f1:2080:c6ca:9f1f:c357:58ff:3a81]) by smtp.gmail.com with ESMTPSA id o22-20020a63f156000000b005c6617b52e6sm89739pgk.5.2023.12.12.19.06.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 19:06:33 -0800 (PST) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 3BD36OBS432485 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 00:06:25 -0300 From: Alexandre Oliva To: Richard Biener Cc: gcc-patches@gcc.gnu.org Subject: [PATCH #2a/2] strub: indirect volatile parms in wrappers In-Reply-To: (Richard Biener's message of "Tue, 12 Dec 2023 12:46:25 +0100") Organization: Free thinker, does not speak for AdaCore References: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) Date: Wed, 13 Dec 2023 00:06:24 -0300 Message-ID: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, WEIRD_QUOTING 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org [sorry that the previous, unfinished post got through] On Dec 12, 2023, Richard Biener wrote: > On Tue, Dec 12, 2023 at 3:03 AM Alexandre Oliva wrote: >> DECL_NOT_GIMPLE_REG_P (arg) = 0; > I wonder why you clear this at all? That code seems to be inherited from expand_thunk. ISTR that flag was not negated when I started the strub implementation, back in gcc-10. >> + convert in separate statements. ??? Should >> + we drop volatile from the wrapper >> + instead? */ > volatile on function parameters are indeed odd beasts. You could > also force volatile arguments to be passed indirectly. Ooh, I like that, thanks! Regstrapped on x86_64-linux-gnu, on top of #1/2, now a cleanup that IMHO would still be desirable. Arrange for strub internal wrappers to pass volatile arguments by reference to the wrapped bodies. for gcc/ChangeLog PR middle-end/112938 * ipa-strub.cc (pass_ipa_strub::execute): Pass volatile args by reference to internal strub wrapped bodies. for gcc/testsuite/ChangeLog PR middle-end/112938 * gcc.dg/strub-internal-volatile.c: Check indirection of volatile args. --- gcc/ipa-strub.cc | 19 +++++++++---------- gcc/testsuite/gcc.dg/strub-internal-volatile.c | 5 +++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/gcc/ipa-strub.cc b/gcc/ipa-strub.cc index 45294b0b46bcb..943bb60996fc1 100644 --- a/gcc/ipa-strub.cc +++ b/gcc/ipa-strub.cc @@ -2881,13 +2881,14 @@ pass_ipa_strub::execute (function *) parm = DECL_CHAIN (parm), nparm = DECL_CHAIN (nparm), nparmt = nparmt ? TREE_CHAIN (nparmt) : NULL_TREE) - if (!(0 /* DECL_BY_REFERENCE (narg) */ - || is_gimple_reg_type (TREE_TYPE (nparm)) - || VECTOR_TYPE_P (TREE_TYPE (nparm)) - || TREE_CODE (TREE_TYPE (nparm)) == COMPLEX_TYPE - || (tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (nparm))) - && (tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (nparm))) - <= 4 * UNITS_PER_WORD)))) + if (TREE_THIS_VOLATILE (parm) + || !(0 /* DECL_BY_REFERENCE (narg) */ + || is_gimple_reg_type (TREE_TYPE (nparm)) + || VECTOR_TYPE_P (TREE_TYPE (nparm)) + || TREE_CODE (TREE_TYPE (nparm)) == COMPLEX_TYPE + || (tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (nparm))) + && (tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (nparm))) + <= 4 * UNITS_PER_WORD)))) { /* No point in indirecting pointer types. Presumably they won't ever pass the size-based test above, but check the @@ -3224,9 +3225,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/gcc.dg/strub-internal-volatile.c b/gcc/testsuite/gcc.dg/strub-internal-volatile.c index cdfca67616bc8..227406af245cc 100644 --- a/gcc/testsuite/gcc.dg/strub-internal-volatile.c +++ b/gcc/testsuite/gcc.dg/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 make volatile parms indirect in the wrapped f. */ +/* { dg-final { scan-ipa-dump-times "volatile short" 2 "strub" } } */ +/* { dg-final { scan-ipa-dump-times "volatile short int &" 1 "strub" } } */