From patchwork Tue Jul 11 11:51:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 1806249 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=FXRonvuN; dkim-atps=neutral Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4R0fPC2g8Zz20b9 for ; Tue, 11 Jul 2023 21:52:13 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 719A638582BD for ; Tue, 11 Jul 2023 11:52:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 719A638582BD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1689076331; bh=wumYAlJX7hMHnkpuwhMpxxHlIS2h+5UTRlzv6dIoqRA=; h=Date:Cc:To:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=FXRonvuN7OCzOGlp7FWx6pdm0lc52lcPwgMq4y4yR56NucPwgWu8t4X9DLNEvli/Z NUxD0jLJHwchhdwOQpDtBKlPrDhYdTPKLbH7yPVR0DLGV7H51y94IUTR5YB1ALckcZ NTwwzdub5MXUcnaaHYG3S4Wgkym72q5GENYXEOVs= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id 0E7433858D20 for ; Tue, 11 Jul 2023 11:51:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0E7433858D20 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-314319c0d3eso6057883f8f.0 for ; Tue, 11 Jul 2023 04:51:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689076308; x=1691668308; h=content-transfer-encoding:subject:from:to:content-language:cc :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=wumYAlJX7hMHnkpuwhMpxxHlIS2h+5UTRlzv6dIoqRA=; b=U04b5VyvfGih5LpkyV9EmLEHdlhq91u+pXfSOIKROSvGIno7woyx3jRShJC7ive9gY lb7whvq3syjDbEeWqrljYcjeUbSivYRWLO4rRL2aoF73Xr/4rkf11A1KFBZPEzONipIs DfUhjR09P5WHWkqsXOxEh/w3YQx6siFVNG4aFdTdhdmo3wCThC+GtXtZMMVa+TwaW38S TZj/Yy6VDGFhP/80JhimFFcBCaLELFlsykT43V9m7Nhfy54TZWOUChwvL+Dc8bQDM7Pc Dxmx/oFJB1MVmw8SV+ahMeB/qcSmGj8tCQwOBxyDZ4u4+cqpJCAzT78wpTUyzDEh/70U JsLQ== X-Gm-Message-State: ABy/qLYwTFci9B5KIb2f7NWR726aswbGXMnqToQ2MHxXZ5PFzyMTg3ws k8tRiQ4puKvUqAUUHnZNFgmLViMwzcwzkQ== X-Google-Smtp-Source: APBJJlFZWB0nrg7RgueNJV8DGU3zty6SkW33Bd2Q5YfqWBNrM47cjYyqaGbusVN53GU4SftpumENFw== X-Received: by 2002:a5d:420f:0:b0:314:15b7:1fb5 with SMTP id n15-20020a5d420f000000b0031415b71fb5mr15711453wrq.34.1689076308052; Tue, 11 Jul 2023 04:51:48 -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 j11-20020a056000124b00b0031417fd473csm2074014wrx.78.2023.07.11.04.51.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Jul 2023 04:51:47 -0700 (PDT) Message-ID: <8fd3db77-035d-6874-6c71-47c944c465b5@gmail.com> Date: Tue, 11 Jul 2023 13:51:46 +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, jeffreyalaw , "juzhe.zhong@rivai.ai" Content-Language: en-US To: gcc-patches Subject: [PATCH] genopinit: Allow more than 256 modes. 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi, 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 unsigned long long 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 run times on x86, aarch64, rv64 and power10 are actually unchanged (I didn't check 32-bit architectures but would expect similar results). Regards Robin gcc/ChangeLog: * genopinit.cc (pattern_cmp): Use if/else for comparison instead of subtraction. (main): Change to unsigned long long. * gensupport.cc (find_optab): Ditto. * gensupport.h (struct optab_pattern): Ditto. * optabs-query.h (optab_handler): Ditto. (convert_optab_handler): Ditto. --- gcc/genopinit.cc | 19 ++++++++++++------- gcc/gensupport.cc | 3 ++- gcc/gensupport.h | 2 +- gcc/optabs-query.h | 5 +++-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/gcc/genopinit.cc b/gcc/genopinit.cc index 6bd8858a1d9..58c1bf7cba8 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 @@ -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 (unsigned long long);\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" + " unsigned long long 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 (unsigned long long 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 (unsigned long long 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" + " unsigned long long scode = ((unsigned long long)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..3fe7428372d 100644 --- a/gcc/gensupport.cc +++ b/gcc/gensupport.cc @@ -3806,7 +3806,8 @@ 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 + = ((unsigned long long) p->op << 32) | (p->m2 << 16) | p->m1; return true; } } diff --git a/gcc/gensupport.h b/gcc/gensupport.h index 7925e22ed41..9f70e2310e2 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; + unsigned long long sort_num; }; extern rtx add_implicit_parallel (rtvec); diff --git a/gcc/optabs-query.h b/gcc/optabs-query.h index 043e9791bc1..5a1d2f75470 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; + unsigned long long scode = ((unsigned long long)op << 32) | mode; gcc_assert (op > LAST_CONV_OPTAB); return raw_optab_handler (scode); } @@ -50,7 +50,8 @@ 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; + unsigned long long scode + = ((unsigned long long) op << 32) | (from_mode << 16) | to_mode; gcc_assert (convert_optab_p (op)); return raw_optab_handler (scode); }