From patchwork Thu Oct 7 09:07:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 45949 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 AAAA83857802 for ; Thu, 7 Oct 2021 09:09:32 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x42f.google.com (mail-pf1-x42f.google.com [IPv6:2607:f8b0:4864:20::42f]) by sourceware.org (Postfix) with ESMTPS id 616633858034 for ; Thu, 7 Oct 2021 09:08:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 616633858034 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=sifive.com Received: by mail-pf1-x42f.google.com with SMTP id s16so4852439pfk.0 for ; Thu, 07 Oct 2021 02:08:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=E+C/IWsIcqiVabol+M4B/4yPlQe9nNAi0ri5AlYQn/I=; b=LxlaY94chPBVkhRyUb0g/r3rvvI1lT52WMrS8c4c/aO4mgbz7XZU+BLL0f4VErmB1Z iBswPNdl3xasC/iDMa5gr6aKmAdSTYoegfYskc35B0eieqshav9bm3RN0+oJnJqvDFiC kMeiiLRUQSzOWyUwsTC3v6N+/A+yyZ7HgTgAFUifizsL4+PrlB71oKHP6wgjdrPTXPLZ kfAf8z+TmwDRm7xSe48sH7i09O26sTxMxro/4xEj11qC3GD0NGtHkRrlvN1Y1lMPrDP2 H+H/CKuzYLNrVAHcxr53m6Sjk5MB3vE3Cf3ACbgd7r7IxwYz1UFsXUcIRIOvV35d0jVx bzlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=E+C/IWsIcqiVabol+M4B/4yPlQe9nNAi0ri5AlYQn/I=; b=Kk8W3z2RoWQYdoht4UruYUav6GueE4HJcDlCHUzC8kgB56CLB0gmy4c2rjsuUAN7TE i3AMp2HCIYdhYBVGwvy7E8T4xm6V1UH1Qqnadc8dTSAsa1GoBPl6xPz4BgwP4LLKqsBH 8NJWeuPqMetHacVk7F6YK8BYHjngnvlz3IHz3RRhf4iKl84Xqel4TDN8qo3fkF3C90zW 2mIgYcVpxJYsY4QUKCb+lS8idQw7pu2ebz/cNJvgxCP5FRKUbUc/mTyca6z9ISCLaB+n RhIVXqn0rVEPkexVmUkV0FRMp/XH5CLd1O/8ZUBPaIV0N1/38KeuOKpvDkvCgp8yQ9RF LAWQ== X-Gm-Message-State: AOAM531pFU0QDUCVe2Sf8yOlvnh9xh5am0yrocIulvt+xmZ0UNK9h4hc 3v2LDO1ZCOB67gMCrbiRgjFl11uW3sdNgQ== X-Google-Smtp-Source: ABdhPJzjc3S4mbJ2peTh+fbfcz+/aLb8ORuNnLOPGnh76t+JDH7Tfw+tTe37CaOXJeCLFeiBH3QEWQ== X-Received: by 2002:a65:508a:: with SMTP id r10mr2459091pgp.96.1633597737048; Thu, 07 Oct 2021 02:08:57 -0700 (PDT) Received: from hsinchu02.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id q8sm7371725pja.52.2021.10.07.02.08.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 02:08:56 -0700 (PDT) From: Kito Cheng To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, jimw@sifive.com, christophm30@gmail.com, oliva@adacore.com Subject: [PATCH] [PR/target 100316] Allow constant address for __builtin___clear_cache. Date: Thu, 7 Oct 2021 17:07:28 +0800 Message-Id: <20211007090727.11204-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 X-Spam-Status: No, score=-13.6 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 autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , Cc: Kito Cheng Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" __builtin___clear_cache was able to accept constant address for the argument, but it seems no longer accept recently, and it even not accept constant address which is hold in variable when optimization is enable: ``` void foo3(){ void *yy = (void*)0x1000; __builtin___clear_cache(yy, yy); } ``` So this patch make BEGIN and END accept VOIDmode, like cselib_lookup_mem did per Jim Wilson's suggestion. ``` static cselib_val * cselib_lookup_mem (rtx x, int create) { ... addr_mode = GET_MODE (XEXP (x, 0)); if (addr_mode == VOIDmode) addr_mode = Pmode; ``` gcc/ChangeLog: PR target/100316 * builtins.c (maybe_emit_call_builtin___clear_cache): Allow VOIDmode for begin and end. gcc/testsuite/ChangeLog: PR target/100316 * gcc.c-torture/compile/pr100316.c: New. --- gcc/builtins.c | 6 ++++-- gcc/testsuite/gcc.c-torture/compile/pr100316.c | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr100316.c diff --git a/gcc/builtins.c b/gcc/builtins.c index 3e57eb03af0..960f07121fc 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -5163,8 +5163,10 @@ default_emit_call_builtin___clear_cache (rtx begin, rtx end) void maybe_emit_call_builtin___clear_cache (rtx begin, rtx end) { - if ((GET_MODE (begin) != ptr_mode && GET_MODE (begin) != Pmode) - || (GET_MODE (end) != ptr_mode && GET_MODE (end) != Pmode)) + if ((GET_MODE (begin) != ptr_mode && GET_MODE (begin) != Pmode + && GET_MODE (begin) != VOIDmode) + || (GET_MODE (end) != ptr_mode && GET_MODE (end) != Pmode + && GET_MODE (begin) != VOIDmode)) { error ("both arguments to %<__builtin___clear_cache%> must be pointers"); return; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr100316.c b/gcc/testsuite/gcc.c-torture/compile/pr100316.c new file mode 100644 index 00000000000..38eca86f49f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr100316.c @@ -0,0 +1,18 @@ +void foo(){ + __builtin___clear_cache(0, 0); +} + +void foo1(){ + __builtin___clear_cache((void*)0, (void*)0); +} + +void foo2(){ + void *yy = 0; + __builtin___clear_cache(yy, yy); +} + +void foo3(){ + void *yy = (void*)0x1000; + __builtin___clear_cache(yy, yy); +} +