From patchwork Tue Jul 11 13:31:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 118525 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp481423vqm; Tue, 11 Jul 2023 06:32:02 -0700 (PDT) X-Google-Smtp-Source: APBJJlHlR6SOpUDBv0IZt41+vvGMGjOlTX1mQ9kAsoMTS29uo0eLY4RVn3oxeOqkXOb/2+1nPJho X-Received: by 2002:a17:906:2202:b0:993:fe68:569c with SMTP id s2-20020a170906220200b00993fe68569cmr7743166ejs.6.1689082322240; Tue, 11 Jul 2023 06:32:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689082322; cv=none; d=google.com; s=arc-20160816; b=VDZfdNWvMVL9LUQJ+LxNaLFPDLoFRVijaJFSlNMmz+PVvuIkNBinFOhIRf38CzMCgN pMY+5EkUdYy4LvyybcLXnE6vph8Ygkn8hEd+1pE+exxF0r4NJarWnqs2d7BBC4Otm8dA j/50Qlh7XkUiFT5kaUj0UzWEf8x2MqW83XlyN/PBccv0FLRCt6hEVJ8toopeoInR0pq4 kIQSBb1kloLVZK/XPOaSZItie3DM0wG9xts/INI91XW6ClNQTXkW7G4jyZyW8GZp34iJ 6SaC1w1hXtfLrjVUB21+7aWZQ9W1GmW7Eey01HaWsBr+s2sFAZxHTnpVDzaBcHa4G9Ml ZjRw== 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 :content-transfer-encoding:in-reply-to:references:to :content-language:subject:cc:user-agent:mime-version:date:message-id :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=B5Sen4zTffaNF0ug1Tt0pQ+4vMUYIgAMw/XDnym3isI=; fh=rE37879+1cf2S8yUitfZDP5Pm8eCXoZm53RRpdwiMhY=; b=VcRzkaoKSj0K+vuWw0D4peoMdVs1OreQ/wao9/gOMnr60Tk00jI0A/SV6KzkMVeXgy S7Arutl3Kefu0NkZdSbE+TtotmrreVJug4asbdydTkKbGtk/7678xL80TameBXelKsF6 pq8Wk8fnulIf+kH5DO5UmVUEzutNgCBY7sK2ldNcf8vMgWh7JMUSMuNKkTZQZSZ43SXZ Pfandu5MPbXseGqgCIggNpf/9crgwDF0F/I3yF2ISTenznu/XfjZp23Mwvw1LH+eaCQI 9r2yaDWYB3NHCt3vTvSWCBlcNZ+Gz1eutkRjy5i9sMbpU/59LqpgWAqOQelbI3zCHkm7 1n6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=wJnK5NQl; 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 (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id e18-20020a170906505200b00987d26a0998si1965398ejk.455.2023.07.11.06.32.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jul 2023 06:32:02 -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=wJnK5NQl; 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 E7DB03857704 for ; Tue, 11 Jul 2023 13:32:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E7DB03857704 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1689082320; bh=B5Sen4zTffaNF0ug1Tt0pQ+4vMUYIgAMw/XDnym3isI=; h=Date:Cc:Subject:To:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=wJnK5NQlMmERWBbFiWO6G34ZNTD/2krRE0U/dDb9zL01D3tNfqVqoClLnxIUU79rV nFxREgWQ2MU+FWB6ulX0rSZf9sk7Qtubw76gB31d30JURc2rJsQaNNtcnUzEbctTMb 9PL5fGFXy34+fWIXN/WeaC2lpwf+WZwwiDAj+EkU= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id 27DC03858D20 for ; Tue, 11 Jul 2023 13:31:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 27DC03858D20 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-3fbd33a57dcso62609965e9.0 for ; Tue, 11 Jul 2023 06:31:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689082275; x=1691674275; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:cc:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=B5Sen4zTffaNF0ug1Tt0pQ+4vMUYIgAMw/XDnym3isI=; b=fy26f7iPaRrl6/B4bVOHJ7KZ+q0nuE8QCPYdioMn8qigE9XU8EZlv7aHEgANjCKmXo axIAZ1ySPXWQURHwtGjunjfI2SrVj/apbwfT78tzudNJJZVbHgp72sct1xmWDxSXpYnO VdfBGGqIWCKlSP9QvlhuENjVtR2ZfG7b8mTcl5zSOJX/d+3FJ2MAvjgf4o+WZJ8/lDAT 7xxAQIvea4NpBY5/B+mJbne08wkXgCL+mdHohjCMCoQP+5lMDauQat327vbCKIH5jBAq NM2Ys2YUSwmN+8yI3sLN9yTgZ1DMZPmH7oJ9Dx/DJnuQoeZFNXkaeQjZPeoFsBIFJWuy IPkw== X-Gm-Message-State: ABy/qLbtwDR5ztI5tXhiv2n2lRstLuKci7p4v+TODEoGpXSA5DR7a7ZU upcFEi5mdgpvKwCnr8J/qvOh/wcKDYBm7A== X-Received: by 2002:a1c:e90a:0:b0:3fb:fb88:974b with SMTP id q10-20020a1ce90a000000b003fbfb88974bmr14585960wmc.6.1689082275197; Tue, 11 Jul 2023 06:31:15 -0700 (PDT) Received: from [192.168.1.23] (ip-046-005-130-086.um12.pools.vodafone-ip.de. [46.5.130.86]) by smtp.gmail.com with ESMTPSA id g23-20020a7bc4d7000000b003fc02a410d0sm10741549wmk.48.2023.07.11.06.31.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Jul 2023 06:31:14 -0700 (PDT) Message-ID: <7d2aba95-9433-8419-126b-cae83075422e@gmail.com> Date: Tue, 11 Jul 2023 15:31:13 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Cc: rdapp.gcc@gmail.com Subject: [PATCH] genopinit: Allow more than 256 modes. Content-Language: en-US To: Robin Dapp via Gcc-patches , jeffreyalaw , "juzhe.zhong@rivai.ai" , richard.sandiford@arm.com, Richard Biener References: <8fd3db77-035d-6874-6c71-47c944c465b5@gmail.com> In-Reply-To: X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, 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: Robin Dapp via Gcc-patches From: Robin Dapp Reply-To: Robin Dapp Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771124929713112134 X-GMAIL-MSGID: 1771131184856581804 Ok so the consensus seems to rather stay with 32 bits and only change the shift to 10/20? As MACHINE_MODE_BITSIZE is already 16 we would need an additional check independent of that. Wouldn't that also be a bit confusing? Attached is a "v2" with unsigned long long changed to uint64_t and checking for NUM_OPTABS <= 0xffffffff. Regards Robin Upcoming changes for RISC-V will have us exceed 256 modes or 8 bits. The helper functions in gen* rely on the opcode as well as two modes fitting into an unsigned int (a signed int even if we consider the qsort default comparison function). This patch changes the type of the index/hash from unsigned int to uint64_t and allows up to 16 bits for a mode as well as 32 bits for an optab. Despite fearing worse, bootstrap, build and test suite runtimes are actually unchanged (on 64-bit architectures that is). gcc/ChangeLog: * genopinit.cc (pattern_cmp): Use if/else for comparison instead of subtraction. (main): Change to uint64_t. * gensupport.cc (find_optab): Ditto. * gensupport.h (struct optab_pattern): Ditto. * optabs-query.h (optab_handler): Ditto. (convert_optab_handler): Ditto. --- gcc/genopinit.cc | 21 +++++++++++++-------- gcc/gensupport.cc | 2 +- gcc/gensupport.h | 2 +- gcc/optabs-query.h | 4 ++-- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/gcc/genopinit.cc b/gcc/genopinit.cc index 6bd8858a1d9..05316ccb409 100644 --- a/gcc/genopinit.cc +++ b/gcc/genopinit.cc @@ -51,7 +51,12 @@ pattern_cmp (const void *va, const void *vb) { const optab_pattern *a = (const optab_pattern *)va; const optab_pattern *b = (const optab_pattern *)vb; - return a->sort_num - b->sort_num; + if (a->sort_num > b->sort_num) + return 1; + else if (a->sort_num < b->sort_num) + return -1; + else + return 0; } static int @@ -182,7 +187,7 @@ main (int argc, const char **argv) progname = "genopinit"; - if (NUM_OPTABS > 0xffff + if (NUM_OPTABS > 0xffffffff || MAX_MACHINE_MODE >= ((1 << MACHINE_MODE_BITSIZE) - 1)) fatal ("genopinit range assumptions inv Upcoming changes for RISC-V will have us exceed 256 modes or 8 bits. The helper functions in gen* rely on the opcode as well as two modes fitting into an unsigned int (a signed int even if we consider the qsort default comparison function). This patch changes the type of the index/hash from unsigned int to uint64_t and allows up to 16 bits for a mode as well as 32 bits for an optab.alid"); @@ -306,7 +311,7 @@ main (int argc, const char **argv) "extern const struct optab_libcall_d normlib_def[NUM_NORMLIB_OPTABS];\n" "\n" "/* Returns the active icode for the given (encoded) optab. */\n" - "extern enum insn_code raw_optab_handler (unsigned);\n" + "extern enum insn_code raw_optab_handler (uint64_t);\n" "extern bool swap_optab_enable (optab, machine_mode, bool);\n" "\n" "/* Target-dependent globals. */\n" @@ -358,14 +363,14 @@ main (int argc, const char **argv) "#include \"optabs.h\"\n" "\n" "struct optab_pat {\n" - " unsigned scode;\n" + " uint64_t scode;\n" " enum insn_code icode;\n" "};\n\n"); fprintf (s_file, "static const struct optab_pat pats[NUM_OPTAB_PATTERNS] = {\n"); for (i = 0; patterns.iterate (i, &p); ++i) - fprintf (s_file, " { %#08x, CODE_FOR_%s },\n", p->sort_num, p->name); + fprintf (s_file, " { %#08llx, CODE_FOR_%s },\n", p->sort_num, p->name); fprintf (s_file, "};\n\n"); fprintf (s_file, "void\ninit_all_optabs (struct target_optabs *optabs)\n{\n"); @@ -410,7 +415,7 @@ main (int argc, const char **argv) the hash entries, which complicates the pat_enable array. */ fprintf (s_file, "static int\n" - "lookup_handler (unsigned scode)\n" + "lookup_handler (uint64_t scode)\n" "{\n" " int l = 0, h = ARRAY_SIZE (pats), m;\n" " while (h > l)\n" @@ -428,7 +433,7 @@ main (int argc, const char **argv) fprintf (s_file, "enum insn_code\n" - "raw_optab_handler (unsigned scode)\n" + "raw_optab_handler (uint64_t scode)\n" "{\n" " int i = lookup_handler (scode);\n" " return (i >= 0 && this_fn_optabs->pat_enable[i]\n" @@ -439,7 +444,7 @@ main (int argc, const char **argv) "bool\n" "swap_optab_enable (optab op, machine_mode m, bool set)\n" "{\n" - " unsigned scode = (op << 16) | m;\n" + " uint64_t scode = ((uint64_t)op << 32) | m;\n" " int i = lookup_handler (scode);\n" " if (i >= 0)\n" " {\n" diff --git a/gcc/gensupport.cc b/gcc/gensupport.cc index e39e6dacce2..68df90fce58 100644 --- a/gcc/gensupport.cc +++ b/gcc/gensupport.cc @@ -3806,7 +3806,7 @@ find_optab (optab_pattern *p, const char *name) { p->name = name; p->op = optabs[pindex].op; - p->sort_num = (p->op << 16) | (p->m2 << 8) | p->m1; + p->sort_num = ((uint64_t) p->op << 32) | (p->m2 << 16) | p->m1; return true; } } diff --git a/gcc/gensupport.h b/gcc/gensupport.h index 7925e22ed41..247b375f965 100644 --- a/gcc/gensupport.h +++ b/gcc/gensupport.h @@ -123,7 +123,7 @@ struct optab_pattern /* An index that provides a lexicographical sort of (OP, M2, M1). Used by genopinit.cc. */ - unsigned int sort_num; + uint64_t sort_num; }; extern rtx add_implicit_parallel (rtvec); diff --git a/gcc/optabs-query.h b/gcc/optabs-query.h index 043e9791bc1..c6b38da5b26 100644 --- a/gcc/optabs-query.h +++ b/gcc/optabs-query.h @@ -37,7 +37,7 @@ convert_optab_p (optab op) inline enum insn_code optab_handler (optab op, machine_mode mode) { - unsigned scode = (op << 16) | mode; + uint64_t scode = ((uint64_t)op << 32) | mode; gcc_assert (op > LAST_CONV_OPTAB); return raw_optab_handler (scode); } @@ -50,7 +50,7 @@ inline enum insn_code convert_optab_handler (convert_optab op, machine_mode to_mode, machine_mode from_mode) { - unsigned scode = (op << 16) | (from_mode << 8) | to_mode; + uint64_t scode = ((uint64_t) op << 32) | (from_mode << 16) | to_mode; gcc_assert (convert_optab_p (op)); return raw_optab_handler (scode); }