[{"id":3678144,"web_url":"http://patchwork.ozlabs.org/comment/3678144/","msgid":"<864p14p4-65p5-16ns-5n40-p8o03q88099q@fhfr.qr>","list_archive_url":null,"date":"2026-04-16T12:35:20","subject":"Re: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On Thu, 16 Apr 2026, Tamar Christina wrote:\n\n> The example\n> \n> #include <stdint.h>\n> #include <stddef.h>\n> \n> uint32_t crc32(const uint8_t *data, size_t length)\n> {\n>     uint8_t i;\n>     uint32_t crc = 0xffffffff; // Initial value\n>     while (length--) {\n>         crc ^= (uint32_t)(*data++) << 24;\n> #pragma GCC unroll 0\n>         for (i = 0; i < 8; ++i) {\n>             if (crc & 0x80000000)\n>                 crc = (crc << 1) ^ 0x04C11DB7;\n>             else\n>                 crc <<= 1;\n>         }\n>     }\n>     return crc;\n> }\n> \n> when compiled with -Os -march=armv8-a increases the codesize significantly\n> because it generates a loop that's as big as the original but adds a lookup\n> table of 255 bytes.  This means it's actively making codesize bigger and\n> introduces a codesize regression from before the pass was added.\n> \n> This patch disables the CRC table based expansion when compiling for size.\n> \n> Bootstrapped Regtested on aarch64-none-linux-gnu,\n> arm-none-linux-gnueabihf, x86_64-pc-linux-gnu\n> -m32, -m64 and no issues.\n> \n> Ok for master? and backport to GCC 15?\n> \n> Thanks,\n> Tamar\n> \n> gcc/ChangeLog:\n> \n> \tPR middle-end/124900\n> \t* gimple-crc-optimization.cc (crc_optimization::optimize_crc_loop): Do\n> \tnot expand to table when compiling for size.\n> \n> gcc/testsuite/ChangeLog:\n> \n> \tPR middle-end/124900\n> \t* gcc.target/aarch64/crc-1.c: New test.\n> \t* gcc.target/aarch64/crc-2.c: New test.\n> \t* gcc.target/aarch64/crc-3.c: New test.\n> \t* gcc.target/aarch64/crc-4.c: New test.\n> \n> ---\n> diff --git a/gcc/gimple-crc-optimization.cc b/gcc/gimple-crc-optimization.cc\n> index fe13390d95c782b7f58bdadee0b2a46778f186fd..c8482580d25ee730a1de57c0d699ab125120e25b 100644\n> --- a/gcc/gimple-crc-optimization.cc\n> +++ b/gcc/gimple-crc-optimization.cc\n> @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see\n>  #include \"cfgloop.h\"\n>  #include \"tree-scalar-evolution.h\"\n>  #include \"crc-verification.h\"\n> +#include \"internal-fn.h\"\n>  \n>  class crc_optimization {\n>   private:\n> @@ -1260,6 +1261,18 @@ crc_optimization::optimize_crc_loop (gphi *output_crc)\n>    location_t loc;\n>    loc = EXPR_LOCATION (phi_result);\n>  \n> +  /* If the target does not have an expansion for CRC optimally then the table\n> +     based lookup will need at least 255-bytes of RODATA and won't be smaller\n> +     than the original code itself.  */\n> +  if (optimize_size)\n> +    {\n\nPlease test !optimize_loop_for_speed_p (loop) in the caller, possibly\neven before doing expensive analysis (but not before the data type is\nknown, obviously).\n\n> +      tree data_type = TREE_TYPE (m_data_arg);\n> +      tree result_type = TREE_TYPE (phi_result);\n> +      auto ty_pair = tree_pair (data_type, result_type);\n> +      if (!direct_internal_fn_supported_p (ifn, ty_pair, OPTIMIZE_FOR_BOTH))\n> +\treturn false;\n> +    }\n> +\n>    /* Add IFN call and write the return value in the phi_result.  */\n>    gcall *call = gimple_build_call_internal (ifn, 3, m_crc_arg, m_data_arg,\n>  \t\t\t\t\t    polynomial_arg);\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-1.c b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..e47b73d02b74a74409db46574237423d76286b51\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-Os -march=armv8-a -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-not {\\.CRC } \"crc\" } } */\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-2.c b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..5cef000c9a6786c305da261d17f277660bc6c518\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-Os -march=armv8-a+crypto -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-3.c b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..6f9900525d3f58cf6d7af32d98568924c66d89f7\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-O3 -march=armv8-a -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-4.c b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..9a51856f44c86e47eedc28af67e9f75231f87638\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-O3 -march=armv8-a+crypto -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> \n> \n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=1D0A5+/o;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=wurN6BqG;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=1D0A5+/o;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=wurN6BqG;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=1D0A5+/o;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=wurN6BqG;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=1D0A5+/o;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=wurN6BqG","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=suse.de","sourceware.org; spf=pass smtp.mailfrom=suse.de","server2.sourceware.org;\n arc=none smtp.remote-ip=195.135.223.131","smtp-out2.suse.de;\n\tnone"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxHYM2ffXz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 22:35:51 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 65BDF4BA9020\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 12:35:49 +0000 (GMT)","from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])\n by sourceware.org (Postfix) with ESMTPS id CABCB4BA2E35\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 12:35:21 +0000 (GMT)","from murzim.nue2.suse.org (unknown [10.168.4.243])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out2.suse.de (Postfix) with ESMTPS id 6F8675BCD6;\n Thu, 16 Apr 2026 12:35:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 65BDF4BA9020","OpenDKIM Filter v2.11.0 sourceware.org CABCB4BA2E35"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org CABCB4BA2E35","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org CABCB4BA2E35","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776342921; cv=none;\n b=oSrOJXMb05hD5cYNMjFnO240JQc4tFArw4P+Zy5kfQ9Mbhe9u3+JjoYBfQPIS6Z0V8yeqPRIvSTA6ydiwZiDrBitiCBqceMEuRFpDlZQtCBwQqI5H3I7BMjwXaj2YRXm9d6RpyyGYGb2xVd1ko3m8J6w/GbcbPtt/RQsMsCoZ54=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776342921; c=relaxed/simple;\n bh=6RpdnAM2a9hV8HLXTltNH7J9FfgBMrS60RTThqM0fkE=;\n h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date:\n From:To:Subject:Message-ID:MIME-Version;\n b=TkLTmJAJCnjvuCfSD9oJVhF5AZhONwQfKTFCedgzX1qkbU+bgv6C9WybMGibuajb/HL0fonBqfZGWAnUvdEnxCYEV11xnKHx2J2NCmLzGvCrwLxtvgQSK+Rzx7+21sEM+TkSRu4MG28yJvuygOjz8CXoIzLQ8e4yi8NJLYuSnT0=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776342920;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=2gDrFtXtGCHxcOG0d6HxaWGct7DHYmBdQjSNhcib9RM=;\n b=1D0A5+/oIKuGhuIP2hQbJvpo+HmsshMPnH4kCMQ+QHE0ww8+uXQmYjCwonxtCLIHAZ6YQE\n g0TduMYLTi5PLSS5ZLXTo3ZJWlg3h/R9vlwBjP5b8h3RoUaEhfaGdYZxDt0owFRoLlx8Pz\n uNspQUPsXZXY/62hd96TfhKwEfKFv4g=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776342920;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=2gDrFtXtGCHxcOG0d6HxaWGct7DHYmBdQjSNhcib9RM=;\n b=wurN6BqGn081sVlQeY6bwMfA+9I9bHALLkSRhUkR2h5DA0lfmcHTuPdvCnn0dYXFq/713D\n L+7iszFyCfMKXLDw==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776342920;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=2gDrFtXtGCHxcOG0d6HxaWGct7DHYmBdQjSNhcib9RM=;\n b=1D0A5+/oIKuGhuIP2hQbJvpo+HmsshMPnH4kCMQ+QHE0ww8+uXQmYjCwonxtCLIHAZ6YQE\n g0TduMYLTi5PLSS5ZLXTo3ZJWlg3h/R9vlwBjP5b8h3RoUaEhfaGdYZxDt0owFRoLlx8Pz\n uNspQUPsXZXY/62hd96TfhKwEfKFv4g=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776342920;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=2gDrFtXtGCHxcOG0d6HxaWGct7DHYmBdQjSNhcib9RM=;\n b=wurN6BqGn081sVlQeY6bwMfA+9I9bHALLkSRhUkR2h5DA0lfmcHTuPdvCnn0dYXFq/713D\n L+7iszFyCfMKXLDw=="],"Date":"Thu, 16 Apr 2026 14:35:20 +0200 (CEST)","From":"Richard Biener <rguenther@suse.de>","To":"Tamar Christina <tamar.christina@arm.com>","cc":"gcc-patches@gcc.gnu.org, nd@arm.com, jakub@redhat.com,\n richard.earnshaw@arm.com","Subject":"Re: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","In-Reply-To":"<patch-20476-tamar@arm.com>","Message-ID":"<864p14p4-65p5-16ns-5n40-p8o03q88099q@fhfr.qr>","References":"<patch-20476-tamar@arm.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII","X-Spamd-Result":"default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[];\n FUZZY_RATELIMITED(0.00)[rspamd.com];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n FROM_HAS_DN(0.00)[]; RCPT_COUNT_FIVE(0.00)[5];\n FROM_EQ_ENVFROM(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];\n RCVD_COUNT_ZERO(0.00)[0]; MISSING_XM_UA(0.00)[];\n DBL_BLOCKED_OPENRESOLVER(0.00)[gcc.target:url,\n gimple-crc-optimization.cc:url,\n suse.de:email, fhfr.qr:mid, murzim.nue2.suse.org:helo]","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3678163,"web_url":"http://patchwork.ozlabs.org/comment/3678163/","msgid":"<9c26e24a-2f98-4d3c-946d-754da27a857a@oss.qualcomm.com>","list_archive_url":null,"date":"2026-04-16T13:15:52","subject":"Re: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","submitter":{"id":92310,"url":"http://patchwork.ozlabs.org/api/people/92310/","name":"Jeffrey Law","email":"jeffrey.law@oss.qualcomm.com"},"content":"On 4/16/2026 6:15 AM, Tamar Christina wrote:\n> The example\n>\n> #include <stdint.h>\n> #include <stddef.h>\n>\n> uint32_t crc32(const uint8_t *data, size_t length)\n> {\n>      uint8_t i;\n>      uint32_t crc = 0xffffffff; // Initial value\n>      while (length--) {\n>          crc ^= (uint32_t)(*data++) << 24;\n> #pragma GCC unroll 0\n>          for (i = 0; i < 8; ++i) {\n>              if (crc & 0x80000000)\n>                  crc = (crc << 1) ^ 0x04C11DB7;\n>              else\n>                  crc <<= 1;\n>          }\n>      }\n>      return crc;\n> }\n>\n> when compiled with -Os -march=armv8-a increases the codesize significantly\n> because it generates a loop that's as big as the original but adds a lookup\n> table of 255 bytes.  This means it's actively making codesize bigger and\n> introduces a codesize regression from before the pass was added.\n>\n> This patch disables the CRC table based expansion when compiling for size.\n>\n> Bootstrapped Regtested on aarch64-none-linux-gnu,\n> arm-none-linux-gnueabihf, x86_64-pc-linux-gnu\n> -m32, -m64 and no issues.\n>\n> Ok for master? and backport to GCC 15?\n>\n> Thanks,\n> Tamar\n>\n> gcc/ChangeLog:\n>\n> \tPR middle-end/124900\n> \t* gimple-crc-optimization.cc (crc_optimization::optimize_crc_loop): Do\n> \tnot expand to table when compiling for size.\n>\n> gcc/testsuite/ChangeLog:\n>\n> \tPR middle-end/124900\n> \t* gcc.target/aarch64/crc-1.c: New test.\n> \t* gcc.target/aarch64/crc-2.c: New test.\n> \t* gcc.target/aarch64/crc-3.c: New test.\n> \t* gcc.target/aarch64/crc-4.c: New test.\nNo philosophical objections on my side.  -Os wasn't really high on our \nradar for the CRC effort.\n\njeff","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=eTWRzhgU;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=DAeiMaYl;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=eTWRzhgU;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=DAeiMaYl","sourceware.org; dmarc=none (p=none dis=none)\n header.from=oss.qualcomm.com","sourceware.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com","server2.sourceware.org;\n arc=none smtp.remote-ip=205.220.180.131"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxJSD0Z6Dz1yG9\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 23:16:26 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id B10E84BA902B\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 13:16:24 +0000 (GMT)","from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n [205.220.180.131])\n by sourceware.org (Postfix) with ESMTPS id B6CD04BA23FD\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 13:15:56 +0000 (GMT)","from pps.filterd (m0279871.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63G8CLSC2575776\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 13:15:56 GMT","from mail-dy1-f200.google.com (mail-dy1-f200.google.com\n [74.125.82.200])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4djv27h2ts-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 13:15:55 +0000 (GMT)","by mail-dy1-f200.google.com with SMTP id\n 5a478bee46e88-2bda35eab74so592828eec.0\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 06:15:55 -0700 (PDT)","from [172.31.0.11] ([136.38.201.137])\n by smtp.gmail.com with ESMTPSA id\n 5a478bee46e88-2de8f65fc42sm7376840eec.23.2026.04.16.06.15.53\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 16 Apr 2026 06:15:53 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org B10E84BA902B","OpenDKIM Filter v2.11.0 sourceware.org B6CD04BA23FD"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org B6CD04BA23FD","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org B6CD04BA23FD","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776345356; cv=none;\n b=R4c5Che4nJBGL//9EhoEpLm9qiWcQEFubnQQdNUFdhiUXhsmJZ7IwNFDjc7+HHQmhyC7r0HwAa3y6bETRExnOzGQevNq/MprNI+T5xU4X/4PZqopP+kR9Uchx6VScDiQYkCEUJPpnXcnBM+vcVSWJWjq5VNO+KDbRZ0f8B72Y+0=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776345356; c=relaxed/simple;\n bh=f3CMtuvmmoGZWgxhN2iP+Sj1sYUQWwKlWPAPBoYn9oQ=;\n h=DKIM-Signature:DKIM-Signature:Message-ID:Date:MIME-Version:\n Subject:To:From;\n b=S7t/sPlvd3iX4pR8p/+AVlkczyWSu8TU3wiM4OzcgayOIP0DlzyrwB5jdLwzbCmptDrVkeT5bI6fJe65bPZ2qo5/fBDTuelG+SWveoNLREOHRnxgW/dkZBKZrzGC7Adi5qObaz8r7JIp7q/KeSG/oYhwiIbiylqilJooAcNqBVI=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-transfer-encoding:content-type:date:from:in-reply-to\n :message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n 75kdORuJkKSkbWGs6b5LK9cOklp5HFClW4Rxg/RnoTo=; b=eTWRzhgUZekL4efJ\n LWGT0zIKcSaVFh/unyCIMTyZ5fBy5UDRaRyM4+v0LOFD0T16PKH8VGg3eJ8kapyE\n AQdw9trbZN+L1S3uoo99eSlZQSR5jxXpSpgOJPhgCmMofaVRsnkePbmbkXEkgdab\n qALNnhBZC8jhOXvfUwA8KEHPvKXpv2ZJyzAr9iAwzcpL+rGsvmjoNUQde/cYQwNj\n +Kn4ift15q0Lhb+/Y2YHa/1JCRKYfWqvctgdnSiXrSyAATL9DfgvfBCRpKZCxmPk\n zBv7NnTYnyaZ0jqt1kloexrNCstkvHUbmPJvbbQO9k31fZhpM4+zIipX1Vwzc281\n ZNg1TA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1776345355; x=1776950155; darn=gcc.gnu.org;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=75kdORuJkKSkbWGs6b5LK9cOklp5HFClW4Rxg/RnoTo=;\n b=DAeiMaYlnm2lWLnR+hrL70nsgGXqKedUk/Zc8J5lVmHGw3RHkzB6y2+R5+rpQtXW6O\n aNZWjcA78mMU8DthqA2o3WeYocEKj3RccMC/UarzJ1XNDomSkY1RlOvWlNg/yV5lrIzb\n 1G2bdE7ILVfXiaZTaLhd4tSwSILt3btnMcyDx+50OJB+eRbwC63349/Ac1+GsK0wN11d\n +mJi++NXWL68RUwrvr22cUnJ6jWDh8siRKUs3JUCxrN88JlL28LSegFHtkLUz/S7SsdA\n jk6psBRY51lAiW4ps1s58kwHs6Y+RuVQ/PV+w0lVIZ58SZIwMSPADRDK34vKQtmVy0pI\n 9BXA=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776345355; x=1776950155;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=75kdORuJkKSkbWGs6b5LK9cOklp5HFClW4Rxg/RnoTo=;\n b=ml8LrybCIe0b8mTRX69Hwwzx2n/RWzYvkkvk2OrWfVSYKQ3JH4gTmnguFb1LDYOO7s\n /ruQiqFQ3RZxVf5BLp/I5neNTdt16wDP1WQLsBFX/ywEtQMPdyDelxp3Hns9e7OjyxaL\n ZKlvX4SCnbS0uwBWvPsTgDulr4wLlFEZ0XxnoSnUhdKkmZ3+/9FGaJLKazqZWEFFL47I\n rDlZq2cICWCIZ7rECSHPrgQ1+Lilup7q4db5QOvrEWJoADBEGSy9SnyryY64DIzEy3gz\n N4PbgwVMWS1ku+biyO04mPnTez9F7L8jxjOBr8Fl4X8nFd1JnkgY9a4wHyC8jgP8AiIU\n ut3g==","X-Forwarded-Encrypted":"i=1;\n AFNElJ+S3i4FZ4dVU1v9o9Qcy0tka85tt5r48jHuhtbgnYFb8lAp+JOQfZUpoCJvRG+H72G2EupI52evH4DOOg==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YxUOjl/+VkYbWiptJi22gDKwht7JKjWFWosbv3QGmjof/hkLoLe\n 3aP/uXcJo9Twz2uZCJYtTCqWGszRYEIe4bneZyoHTZUHwZorpoLRdpAUEkT1BtX9gyi8oLrxqLI\n PMrKBMEz/6fP72YAQPFZ2+q/3ENLEk7VjwZ46rvvEkMahHirjUNmPpgukD5F9","X-Gm-Gg":"AeBDieuzPFwA6eJ7MYysRKynZde1BVKCPFy3wXjo1emOPQeD7KaCc80daowzCbD3ICf\n 5Fz8FpH+Q7QDRxoK5dSmlIehySKqJmntWoNFlpB0+cxlvUkigpKnzi66+xdzeqkOmTySw6mMP05\n 801NVWU71+OGSHBm76yei1qTKiOy8A0De7UUdCtMae+s5iT/jJyReouKsuGrniLFcQgOPLTf5Kf\n OvPfmQRmIatH8/VNszHSHVwjUP1vf+0Iv8OgHd+DuO8zN7+dRCEo4mS8EmJYuojMLG/h/pivnz3\n abGrAV29O+eykrN86H8IMbMrih7o6H4FJ5WUkmrOQtmNCn0tlaTwrpj4+vIhafJlI3MS8W60hfV\n qKnO0ZKupwMdYsNN43iiehpqgo20Xwqjy00PoXvQrZ9GceA==","X-Received":["by 2002:a05:693c:2c92:b0:2dc:5d20:c163 with SMTP id\n 5a478bee46e88-2df7d5df50emr1552644eec.6.1776345354861;\n Thu, 16 Apr 2026 06:15:54 -0700 (PDT)","by 2002:a05:693c:2c92:b0:2dc:5d20:c163 with SMTP id\n 5a478bee46e88-2df7d5df50emr1552630eec.6.1776345354263;\n Thu, 16 Apr 2026 06:15:54 -0700 (PDT)"],"Message-ID":"<9c26e24a-2f98-4d3c-946d-754da27a857a@oss.qualcomm.com>","Date":"Thu, 16 Apr 2026 07:15:52 -0600","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","To":"Tamar Christina <tamar.christina@arm.com>, gcc-patches@gcc.gnu.org","Cc":"nd@arm.com, rguenther@suse.de, jakub@redhat.com, richard.earnshaw@arm.com","References":"<patch-20476-tamar@arm.com>","Content-Language":"en-US","From":"Jeffrey Law <jeffrey.law@oss.qualcomm.com>","In-Reply-To":"<patch-20476-tamar@arm.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-Authority-Analysis":"v=2.4 cv=PJQ/P/qC c=1 sm=1 tr=0 ts=69e0e10b cx=c_pps\n a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=asGLMfRmzhnGNxaIYohjRg==:17\n a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22\n a=4d5n-2lB4ghRNkWV9dEA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10\n a=6Ab_bkdmUrQuMsNx7PHu:22","X-Proofpoint-GUID":"lfmpFwm3mi6oUc9DgunOccrVDnAJBAt9","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDE2MDEyNyBTYWx0ZWRfXx8te5FPntkUg\n wGGzH7sFYteafQrWgIU+jsZ+Vh92WmUDaCbCC3vC+M9JZclfGVSsQ8yODYSfZcm4kaX1YHSQH9F\n 7OKY6urbp4N+/egD9UkZGr9mSBfXkvcTh2W2lMEosVlWubhFGkZlEapmAk/Fa8qo5aZUIzsGA5O\n P9oralG7y3P3SM+CPLYbZm9VrwpWRc4XYpak43cyjO62RjhzPAA3NJ3Ysg+NTGtaTocbcXRgxeo\n 8DF4ykw/HLJrV5tOZzSXaIX5u7XJrs4QcVBr72sXMcqTpbXQWRJLtoblp1zsj8vXSnHIk7cTrpq\n N4Z01vqYRiMmFu6G8kFUqif8hU0l8/hdwopNN1kUbhoI95pLaSVv6uiRsHtjx+R8Tzs34pp/IHZ\n SA7r/rVkTZADxTihzN8ny/t/tTIN4MJeH0QJoa9ivef++pIoHa/sUleENvsW4mBjLbpNQ5p+jOh\n rTJsMpWAiGbRI+Hszhw==","X-Proofpoint-ORIG-GUID":"lfmpFwm3mi6oUc9DgunOccrVDnAJBAt9","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-16_03,2026-04-16_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 phishscore=0\n impostorscore=0 bulkscore=0 priorityscore=1501 clxscore=1015\n lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604070000\n definitions=main-2604160127","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3678233,"web_url":"http://patchwork.ozlabs.org/comment/3678233/","msgid":"<VI0PR08MB10392C96AD8A2CDCF4144C52BFF232@VI0PR08MB10392.eurprd08.prod.outlook.com>","list_archive_url":null,"date":"2026-04-16T15:04:13","subject":"RE: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","submitter":{"id":69689,"url":"http://patchwork.ozlabs.org/api/people/69689/","name":"Tamar Christina","email":"Tamar.Christina@arm.com"},"content":"> -----Original Message-----\n> From: Richard Biener <rguenther@suse.de>\n> Sent: 16 April 2026 13:35\n> To: Tamar Christina <Tamar.Christina@arm.com>\n> Cc: gcc-patches@gcc.gnu.org; nd <nd@arm.com>; jakub@redhat.com;\n> Richard Earnshaw <Richard.Earnshaw@arm.com>\n> Subject: Re: [PATCH]middle-end: disable CRC pass when -Os and the target\n> does not have CRC optabs [PR124900]\n> \n> On Thu, 16 Apr 2026, Tamar Christina wrote:\n> \n> > The example\n> >\n> > #include <stdint.h>\n> > #include <stddef.h>\n> >\n> > uint32_t crc32(const uint8_t *data, size_t length)\n> > {\n> >     uint8_t i;\n> >     uint32_t crc = 0xffffffff; // Initial value\n> >     while (length--) {\n> >         crc ^= (uint32_t)(*data++) << 24;\n> > #pragma GCC unroll 0\n> >         for (i = 0; i < 8; ++i) {\n> >             if (crc & 0x80000000)\n> >                 crc = (crc << 1) ^ 0x04C11DB7;\n> >             else\n> >                 crc <<= 1;\n> >         }\n> >     }\n> >     return crc;\n> > }\n> >\n> > when compiled with -Os -march=armv8-a increases the codesize significantly\n> > because it generates a loop that's as big as the original but adds a lookup\n> > table of 255 bytes.  This means it's actively making codesize bigger and\n> > introduces a codesize regression from before the pass was added.\n> >\n> > This patch disables the CRC table based expansion when compiling for size.\n> >\n> > Bootstrapped Regtested on aarch64-none-linux-gnu,\n> > arm-none-linux-gnueabihf, x86_64-pc-linux-gnu\n> > -m32, -m64 and no issues.\n> >\n> > Ok for master? and backport to GCC 15?\n> >\n> > Thanks,\n> > Tamar\n> >\n> > gcc/ChangeLog:\n> >\n> > \tPR middle-end/124900\n> > \t* gimple-crc-optimization.cc (crc_optimization::optimize_crc_loop):\n> Do\n> > \tnot expand to table when compiling for size.\n> >\n> > gcc/testsuite/ChangeLog:\n> >\n> > \tPR middle-end/124900\n> > \t* gcc.target/aarch64/crc-1.c: New test.\n> > \t* gcc.target/aarch64/crc-2.c: New test.\n> > \t* gcc.target/aarch64/crc-3.c: New test.\n> > \t* gcc.target/aarch64/crc-4.c: New test.\n> >\n> > ---\n> > diff --git a/gcc/gimple-crc-optimization.cc b/gcc/gimple-crc-optimization.cc\n> > index\n> fe13390d95c782b7f58bdadee0b2a46778f186fd..c8482580d25ee730a1de5\n> 7c0d699ab125120e25b 100644\n> > --- a/gcc/gimple-crc-optimization.cc\n> > +++ b/gcc/gimple-crc-optimization.cc\n> > @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see\n> >  #include \"cfgloop.h\"\n> >  #include \"tree-scalar-evolution.h\"\n> >  #include \"crc-verification.h\"\n> > +#include \"internal-fn.h\"\n> >\n> >  class crc_optimization {\n> >   private:\n> > @@ -1260,6 +1261,18 @@ crc_optimization::optimize_crc_loop (gphi\n> *output_crc)\n> >    location_t loc;\n> >    loc = EXPR_LOCATION (phi_result);\n> >\n> > +  /* If the target does not have an expansion for CRC optimally then the\n> table\n> > +     based lookup will need at least 255-bytes of RODATA and won't be\n> smaller\n> > +     than the original code itself.  */\n> > +  if (optimize_size)\n> > +    {\n> \n> Please test !optimize_loop_for_speed_p (loop) in the caller, possibly\n> even before doing expensive analysis (but not before the data type is\n> known, obviously).\n\nI'm not entirely sure I can.  The crc optab is a convert optab and from the\ndocs:\n\n@mdindex crc@var{m}@var{n}4\n@item @samp{crc@var{m}@var{n}4}\nCalculate a bit-forward CRC using operands 1, 2 and 3,\nthen store the result in operand 0.\nOperands 1 is the initial CRC, operands 2 is the data and operands 3 is the\npolynomial without leading 1.\nOperands 0, 1 and 3 have mode @var{n} and operand 2 has mode @var{m}, where\nboth modes are integers.  The size of CRC to be calculated is determined by the\nmode; for example, if @var{n} is @code{HImode}, a CRC16 is calculated.\n\nSo from this it means the second type comes from m_data_arg, this is sometimes\ncomputed during validate_crc_and_data (), but when that fails it's done in optimize_crc_loop ()\nwhich requires m_crc_loop->nb_iterations to be known.\n\nI'm not entirely sure if this is known before extract_polynomial.\n\nIf so then I wonder why validate_crc_and_data didn't handle the other case immediately,\nthis makes me believe it wasn't accurate at that time.\n\nIf it is known at validate_crc_and_data () I can move the code from optimize_crc_loop\nhandling if (!m_data_arg) there. \n\nThought or suggestions?\n\nThanks,\nTamar\n\n> \n> > +      tree data_type = TREE_TYPE (m_data_arg);\n> > +      tree result_type = TREE_TYPE (phi_result);\n> > +      auto ty_pair = tree_pair (data_type, result_type);\n> > +      if (!direct_internal_fn_supported_p (ifn, ty_pair, OPTIMIZE_FOR_BOTH))\n> > +\treturn false;\n> > +    }\n> > +\n> >    /* Add IFN call and write the return value in the phi_result.  */\n> >    gcall *call = gimple_build_call_internal (ifn, 3, m_crc_arg, m_data_arg,\n> >  \t\t\t\t\t    polynomial_arg);\n> > diff --git a/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> > new file mode 100644\n> > index\n> 0000000000000000000000000000000000000000..e47b73d02b74a74409\n> db46574237423d76286b51\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> > @@ -0,0 +1,24 @@\n> > +/* { dg-do compile } */\n> > +/* { dg-additional-options \"-Os -march=armv8-a -fdump-tree-crc -std=c99\"\n> } */\n> > +\n> > +#include <stdint.h>\n> > +#include <stddef.h>\n> > +\n> > +uint32_t crc32(const uint8_t *data, size_t length)\n> > +{\n> > +    uint8_t i;\n> > +    uint32_t crc = 0xffffffff; // Initial value\n> > +    while (length--) {\n> > +        crc ^= (uint32_t)(*data++) << 24;\n> > +#pragma GCC unroll 0\n> > +        for (i = 0; i < 8; ++i) {\n> > +            if (crc & 0x80000000)\n> > +                crc = (crc << 1) ^ 0x04C11DB7;\n> > +            else\n> > +                crc <<= 1;\n> > +        }\n> > +    }\n> > +    return crc;\n> > +}\n> > +\n> > +/* { dg-final { scan-tree-dump-not {\\.CRC } \"crc\" } } */\n> > diff --git a/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> > new file mode 100644\n> > index\n> 0000000000000000000000000000000000000000..5cef000c9a6786c305d\n> a261d17f277660bc6c518\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> > @@ -0,0 +1,24 @@\n> > +/* { dg-do compile } */\n> > +/* { dg-additional-options \"-Os -march=armv8-a+crypto -fdump-tree-crc -\n> std=c99\" } */\n> > +\n> > +#include <stdint.h>\n> > +#include <stddef.h>\n> > +\n> > +uint32_t crc32(const uint8_t *data, size_t length)\n> > +{\n> > +    uint8_t i;\n> > +    uint32_t crc = 0xffffffff; // Initial value\n> > +    while (length--) {\n> > +        crc ^= (uint32_t)(*data++) << 24;\n> > +#pragma GCC unroll 0\n> > +        for (i = 0; i < 8; ++i) {\n> > +            if (crc & 0x80000000)\n> > +                crc = (crc << 1) ^ 0x04C11DB7;\n> > +            else\n> > +                crc <<= 1;\n> > +        }\n> > +    }\n> > +    return crc;\n> > +}\n> > +\n> > +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> > diff --git a/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> > new file mode 100644\n> > index\n> 0000000000000000000000000000000000000000..6f9900525d3f58cf6d7\n> af32d98568924c66d89f7\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> > @@ -0,0 +1,24 @@\n> > +/* { dg-do compile } */\n> > +/* { dg-additional-options \"-O3 -march=armv8-a -fdump-tree-crc -std=c99\"\n> } */\n> > +\n> > +#include <stdint.h>\n> > +#include <stddef.h>\n> > +\n> > +uint32_t crc32(const uint8_t *data, size_t length)\n> > +{\n> > +    uint8_t i;\n> > +    uint32_t crc = 0xffffffff; // Initial value\n> > +    while (length--) {\n> > +        crc ^= (uint32_t)(*data++) << 24;\n> > +#pragma GCC unroll 0\n> > +        for (i = 0; i < 8; ++i) {\n> > +            if (crc & 0x80000000)\n> > +                crc = (crc << 1) ^ 0x04C11DB7;\n> > +            else\n> > +                crc <<= 1;\n> > +        }\n> > +    }\n> > +    return crc;\n> > +}\n> > +\n> > +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> > diff --git a/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> > new file mode 100644\n> > index\n> 0000000000000000000000000000000000000000..9a51856f44c86e47ee\n> dc28af67e9f75231f87638\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> > @@ -0,0 +1,24 @@\n> > +/* { dg-do compile } */\n> > +/* { dg-additional-options \"-O3 -march=armv8-a+crypto -fdump-tree-crc -\n> std=c99\" } */\n> > +\n> > +#include <stdint.h>\n> > +#include <stddef.h>\n> > +\n> > +uint32_t crc32(const uint8_t *data, size_t length)\n> > +{\n> > +    uint8_t i;\n> > +    uint32_t crc = 0xffffffff; // Initial value\n> > +    while (length--) {\n> > +        crc ^= (uint32_t)(*data++) << 24;\n> > +#pragma GCC unroll 0\n> > +        for (i = 0; i < 8; ++i) {\n> > +            if (crc & 0x80000000)\n> > +                crc = (crc << 1) ^ 0x04C11DB7;\n> > +            else\n> > +                crc <<= 1;\n> > +        }\n> > +    }\n> > +    return crc;\n> > +}\n> > +\n> > +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> >\n> >\n> >\n> \n> --\n> Richard Biener <rguenther@suse.de>\n> SUSE Software Solutions Germany GmbH,\n> Frankenstrasse 146, 90461 Nuernberg, Germany;\n> GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG\n> Nuernberg)","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=URdcqCfn;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=URdcqCfn;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=URdcqCfn;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=URdcqCfn","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=arm.com","sourceware.org; spf=pass smtp.mailfrom=arm.com","server2.sourceware.org;\n arc=pass smtp.remote-ip=40.107.162.39"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxLtc6Vgqz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 01:05:59 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 8B7DA4BB3BC1\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 15:05:57 +0000 (GMT)","from PA4PR04CU001.outbound.protection.outlook.com\n (mail-francecentralazon11013039.outbound.protection.outlook.com\n [40.107.162.39])\n by sourceware.org (Postfix) with ESMTPS id 62BBA4BA2E35\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 15:05:25 +0000 (GMT)","from CWLP265CA0410.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1b6::12)\n by VI0PR08MB11172.eurprd08.prod.outlook.com (2603:10a6:800:254::18)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.25; Thu, 16 Apr\n 2026 15:05:19 +0000","from DU6PEPF0000B61B.eurprd02.prod.outlook.com\n (2603:10a6:400:1b6:cafe::77) by CWLP265CA0410.outlook.office365.com\n (2603:10a6:400:1b6::12) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.51 via Frontend Transport; Thu,\n 16 Apr 2026 15:05:18 +0000","from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by\n DU6PEPF0000B61B.mail.protection.outlook.com (10.167.8.132) with Microsoft\n SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17\n via Frontend Transport; Thu, 16 Apr 2026 15:05:18 +0000","from VI0PR08MB10392.eurprd08.prod.outlook.com\n (2603:10a6:800:210::10) by PAWPR08MB9519.eurprd08.prod.outlook.com\n (2603:10a6:102:2f1::18) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.25; Thu, 16 Apr\n 2026 15:04:14 +0000","from VI0PR08MB10392.eurprd08.prod.outlook.com\n ([fe80::cd7c:e19a:2072:75cc]) by VI0PR08MB10392.eurprd08.prod.outlook.com\n ([fe80::cd7c:e19a:2072:75cc%4]) with mapi id 15.20.9769.046; Thu, 16 Apr 2026\n 15:04:14 +0000"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 8B7DA4BB3BC1","OpenDKIM Filter v2.11.0 sourceware.org 62BBA4BA2E35"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 62BBA4BA2E35","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 62BBA4BA2E35","ARC-Seal":["i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1776351925; cv=pass;\n b=GqlN5k/1O7ojAGQU5szB+ShD46C3x+bjjEpAR+YNzePRUGKFm8Dcx/WHpc6yxoY/OykDh6bHNapPLkFQN5Z8mk1Kx1rqqQQZc82senDMvseimO/3dCOp0P5RvTVzFL7KMRQHSHHXYvseH3zdFdSCDfg1GmwLwc+L/2DuYyFnTiA=","i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass;\n b=fYkkEMabg+zl5TjEpHB6ORqsLDOKlK16Bc+xdSzwMISDzliGDPkHxXAt6p5cueaYX4jDkCiAHEejiq37Wpj+Vah4fVSyLcelUzRFWPWBED+tV7FRLFP8vGcwJs5KLEG3o981ZnysdTNE+6F8/tBVQ3vD+G/ZNXN8HsCyK/2dcfgk6TXkamyqAeIqus2ZY+n+J/gGbcNM4K9QTOZmHWi3cRXrMoOleWc/NtqzWzJA4D+Yrm8yH63kHwKmkoHwkMTY32fg+MA4EsZ+q8QFif1SFZ30w2qugw00adJctT7nYXnA57apKiA8BbHIcf+7CfPP4shjjpfcSYtTgh52TDFRNA==","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=h4pQjErZuFHvFaJNRECaSdl9e2sRTMUs03szv6TtKB4HsMeOaQ4UgE11Ivj0qjXHfbrV+95rZbT87pBZTL5NOJY8Q6OkZstT8cWP3hBTvBNk/EtR8uobWFWfd1dlp+3/05FdyRh6yFgxnUG/HoYNMqclG3whywHtbgFzazN/f7QrauT6EXkGexj62nc6/85d3Dl2LgPA3i9SS2sroXJSMNResxyMrKMlvLfzH2DbGH/2hpchqTdFh9wHcjpzAyw0gtq6K7omSj4tFHvZMyLO0M12OHZ/fAI7eWhZM2koCixo1K26JVZY98vBoccjKOHpeggq1/bmXG+H7/LAbADN7w=="],"ARC-Message-Signature":["i=3; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776351925; c=relaxed/simple;\n bh=BlJLbxP56MmhKys4d9W+8FczxNrmHtqoHtWvIHaS6jc=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID:\n MIME-Version;\n b=bFJXNtagyPTVFje/p2GYPsnOMLkVLTgvIXmpJrApEsl9SjHGH371q184AyzYAawqImuAv3tNFabOzx+zSVTXNHasuBW43mxk3Iy543C/84aOa4px6jiLN70LQa9/xW5UuC8XYDUeiwa4hVXUV0PHW8mJesrtYntStx+/ulvej18=","i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=QhA5FItJLz5rGXgx0LYsAwcFKT9WVaUd3mvf+kZXPvA=;\n b=bQIz32ep4FbvWFHkCcCzV6rUlMvsNuVjiLdTa5FMmmo0NGSZaltNzrD26Gx+bCJ3lKtGy3+k/hbCI2ncih5hABD3N5XuqHu2iC6lWpRUqGvrLBlDRb8N8mkMJVnwwHIJsloAy1sIitM/H4B2NGB3rBhDTHiddacsU7wyMQoojNAKmh9JseAf4tA21k3UF1C+nGx4I9s3nX5M+YZMUufpCTeUNV2scNjPnS61jhn/wBh069ZK0lo7ZOE02S/JcQqQEl8GyvXJIOfKtYBgfw7jLbGc23eyknOk2X6mVMNvdh/Y0DmckV3tRxzQMwcyF3/7BE1LGSyCM0NbLGhiq6jPaQ==","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=QhA5FItJLz5rGXgx0LYsAwcFKT9WVaUd3mvf+kZXPvA=;\n b=lrCm7x/J17jE2Hh+3HU+hydBE1jFekCBbFN1+X3/2Gk9Me5N447elCqzmcE+LWkGipRdjNtD7axuitFx91Wv5CZjxh1uA8gRcdKi8AVqQuIN780iqaLN8XKCA0BT5Tm4Vz4yzVehYeg+qndU7tRq7SCKL1rXt/aC4lyUVPvLVoerG/tia19mZU4binJvP2sh9rgftUYph/pY9G4WQnDQL1Zup88V0lbT0susqtfKgZ9FOPR5MRtYhyG9anrqk2lkVnKw6tLLAv7lqaAFw/FL6aO3JorvaWj/PnTExeN9JWkjzVhKSQRNQGdIFvRluxPIQ/gdidnxsBq312M+k+RnOg=="],"ARC-Authentication-Results":["i=3; server2.sourceware.org","i=2; mx.microsoft.com 1; spf=pass (sender ip is\n 4.158.2.129) smtp.rcpttodomain=suse.de smtp.mailfrom=arm.com; dmarc=pass\n (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass\n (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1\n spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com]\n dmarc=[1,1,header.from=arm.com])","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass\n header.d=arm.com; arc=none"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=QhA5FItJLz5rGXgx0LYsAwcFKT9WVaUd3mvf+kZXPvA=;\n b=URdcqCfnJYCACSrEm342zQlfTBT1ZkBJUn2l5OxFGaab5z5R1E/pe3KzqljZRMt2w077qiKRWdXbc7Qj2FOCj7xKIl/oDsBdpqC4bklzzj/EnOcoS1ybEbFclNOLUyjV+oSUVzfHJ7Y2+lZbnekhqVMFhgiwHVG8ZxaBYaAZdNA=","v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=QhA5FItJLz5rGXgx0LYsAwcFKT9WVaUd3mvf+kZXPvA=;\n b=URdcqCfnJYCACSrEm342zQlfTBT1ZkBJUn2l5OxFGaab5z5R1E/pe3KzqljZRMt2w077qiKRWdXbc7Qj2FOCj7xKIl/oDsBdpqC4bklzzj/EnOcoS1ybEbFclNOLUyjV+oSUVzfHJ7Y2+lZbnekhqVMFhgiwHVG8ZxaBYaAZdNA="],"X-MS-Exchange-Authentication-Results":"spf=pass (sender IP is 4.158.2.129)\n smtp.mailfrom=arm.com; dkim=pass (signature was verified)\n header.d=arm.com;dmarc=pass action=none header.from=arm.com;","Received-SPF":"Pass (protection.outlook.com: domain of arm.com designates\n 4.158.2.129 as permitted sender) receiver=protection.outlook.com;\n client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C","From":"Tamar Christina <Tamar.Christina@arm.com>","To":"Richard Biener <rguenther@suse.de>","CC":"\"gcc-patches@gcc.gnu.org\" <gcc-patches@gcc.gnu.org>, nd <nd@arm.com>,\n \"jakub@redhat.com\" <jakub@redhat.com>, Richard Earnshaw\n <Richard.Earnshaw@arm.com>, Jeffrey Law <jeffrey.law@oss.qualcomm.com>","Subject":"RE: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","Thread-Topic":"[PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","Thread-Index":"AQHczZrCvC+nUJSKpEGjh6hweY6otrXhn8MAgAAmZsA=","Date":"Thu, 16 Apr 2026 15:04:13 +0000","Message-ID":"\n <VI0PR08MB10392C96AD8A2CDCF4144C52BFF232@VI0PR08MB10392.eurprd08.prod.outlook.com>","References":"<patch-20476-tamar@arm.com>\n <864p14p4-65p5-16ns-5n40-p8o03q88099q@fhfr.qr>","In-Reply-To":"<864p14p4-65p5-16ns-5n40-p8o03q88099q@fhfr.qr>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","Authentication-Results-Original":"dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=arm.com;","x-ms-traffictypediagnostic":"\n VI0PR08MB10392:EE_|PAWPR08MB9519:EE_|DU6PEPF0000B61B:EE_|VI0PR08MB11172:EE_","X-MS-Office365-Filtering-Correlation-Id":"49c442a1-459e-4444-38fd-08de9bc992bf","x-checkrecipientrouted":"true","nodisclaimer":"true","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam-Untrusted":"BCL:0;\n ARA:13230040|366016|376014|1800799024|18002099003|56012099003|22082099003|38070700021;","X-Microsoft-Antispam-Message-Info-Original":"\n 9C9T4XUDOYP5rGUXBnOOv7XwGQ15jOfryJNQZxqka9f+QzVZfca6kqBWsNOY3JvlzM3U00aoNDX8hFcNu7M1usAvuIrQDT1X4h7k00xLr2pkZ2IF5hrX9MmfQu2BsUbV1mTV7HxOcTrGtqpkabiCcai7mWO5L6PyRZUIGImXDVqrxc8ZCkephlpT1JBxmLzv7RwZaVsv/OhkloM93OnFxbudYYZ2gjnAccGDZlz5XOH80l6bxBy5l+U2R0+puzWiF7K327JVutPFaW+G/jPXhG2nOMPx4Zm88A6cZbnL1A0cfzHosYduIBdwbK9InBzXbKOCKXKeA2AGlU1wDiWtAxPKH1STATZPxO2wmN63cFve3kX6+x14ssK1SNF4kI7JcsmyhP8GVO/rsViYIfWsXa9oI/ZC9b5DO/jG1zdni4Pkl24laaxzx0HWizLEBmTGElD5Z+nSEeE0YxWWRF5VNNZ30P6DlYDEm8QHlwyf8n61rKBrXlniKJOZ5MHoC80NaiSXKvuigBnFeXD3l6zF5geJ1asVWe/icGDCMuaf9gZuSQAUCbg2L/gbhazx/t2SbssGsUAGfYNomQw6FickFM4VsZ/jiZAhLa1MkQF3d2UkodDHHBBmBHbz6G6vVaKFCVUrVnsxlYhVEit7jBNevwtzIRr2AKS1Vgc4k7FR0sIRRBeBz5laEdpIg7mIUaqWGRvyGiX4WBzUb1j8LMNp9ZxYqRCXFPvSEFUXgou00EcNaqE7zhN7YRPLtypArgjB","X-Forefront-Antispam-Report-Untrusted":"CIP:255.255.255.255; CTRY:; LANG:en;\n SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10392.eurprd08.prod.outlook.com;\n PTR:; CAT:NONE;\n SFS:(13230040)(366016)(376014)(1800799024)(18002099003)(56012099003)(22082099003)(38070700021);\n DIR:OUT; SFP:1101;","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n VKERm9Fj6Cj8w1/Fdg5V+nt+E/PyX68rXXu+2TsLQvwfjGzUNQP2HdAcdV39NQoFTThpruL3yw9/SSlnuZVci+e9FySeayrZTZ4Y3a1MH5BtSca6+v1+KJmafVvklCFT/iyqCU57VMxASxB10/qG9cVAJ4vTwwTpKV4Tkj9FGHXEzh0B3P49+YdvCRhdVBBWHwDOE4KQSjUz3jOEKy1u5K7rPJg8Mk+9LELjmbaGVNd5pl04c/jyTloGywniWt3RpL7AFudxjWzmuGF7Q3dfeE1rRCG3Le6rH4B1rGK3hov+7g6Q/oXONg23zdxoHSe35VvR6Fpum2Vh8T0Z7ohOvQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":["PAWPR08MB9519","VI0PR08MB11172"],"X-EOPAttributedMessage":"0","X-MS-Exchange-Transport-CrossTenantHeadersStripped":"\n DU6PEPF0000B61B.eurprd02.prod.outlook.com","X-MS-PublicTrafficType":"Email","X-MS-Office365-Filtering-Correlation-Id-Prvs":"\n b654545b-51ae-4082-70f4-08de9bc96c3e","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|35042699022|82310400026|14060799003|36860700016|376014|1800799024|18002099003|56012099003|22082099003|13003099007;","X-Microsoft-Antispam-Message-Info":"\n lTst9pnitXww44fkbs1OB9WCiPA/PmsIvDjbfFOOdRfkibGfhc0YTJmQOkwRbde9Z3c/7E55slJLhCr9CBXZ+v5aAJ+zDZX/IUqLEz9tT97em7B1kmnql1BVOeUY22I8yLwgK5V2jv/AGGBfWkIM9E4JEsB56ZLbVfyp48YqvTwW0qqLoIaverKxe9uju0Dj1PYHKKOooaMwGirkTk89rS+HBNAKipBK29LLZzqlPAP93LAZz4teWhQUGZgoq3mH3SMP21kNrnAZSXtqh9+7ky4/Qo828ErAPSLRrK7Ib/WQeyufm2WlBpsmKnp6OV4wG9QRQ7NvJ8AJ3apKQjHP5ObmU8gmDGEWiKHghZNb3xHIIb0PMoigtHAosBH6iWHE7uUUnUPZ3WeVPRMqORVs+a5WPzg5C9JNU48hBTioIvYjwTF4NIQinKa30Thq+E2tFYefY0QiojCopfW02GguLGn3MF8NKUJIk/HiXpst68h5BrhhhXs+A/w9M5VRI1Rd8SQTZmFvHUeA7tC1S5Ar6t6M4ORG99bAQ40uc78q+7IXmvY5PrQ8/cdUslOHFfufVx4ofFKP5HTcoxRgZsq5FPr6ab8It4V7di1Uj48OgCSGDEpP0M8pBIGET6LyUezLeyRTxDhtIptce/n4JyRmlzRnLGM/6JIaZidQB2t8ZGmauIFi06oZk3jypHVSEHNJKGaIYcVjcUWNIDakjszSmYCLNwa2F/dqHUKNAEj143M=","X-Forefront-Antispam-Report":"CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com;\n PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230040)(35042699022)(82310400026)(14060799003)(36860700016)(376014)(1800799024)(18002099003)(56012099003)(22082099003)(13003099007);\n DIR:OUT; SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n unMOfHKlAa+tbLBCeOwGiOUfGcQ27FoDdLnMV+BxNHRBN1AA+svGw+3KMw+UbW8M+Bt/qpgE/l3B4l3SqLEw/3bdmu4vhUrApOUN4eS/hIPxyg4oqSFNno2t4eIpnv+9aRFHnK8x5wMp3V2ATUciqMhC4U0zb2vzqpvGg742vOCN556GWEhY/zvNAo2fDDVhV9LVyX+YnTRgrmY6+wR1CVyDCNp158qO4C/2MR+gqWOKIY8jQuENSnoI2ZujE3/vd8lNm9WcHSZFeyXt2eNHOSwRLo8TOOZwermGYAPNtd3nIt3hVJeF7DHcspES6vfSCcupljo7EAXNN+4LYaIpKBemRq3mpTnaYjluVjskGd4UT6n4RWYT9IoIALT0Xof6bRbo6YmHEKVuR91BuWfEOxrqQIXkx+U4fXSMwFGvZAT9HR/+42hi4od6VE1dYCXw","X-OriginatorOrg":"arm.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"16 Apr 2026 15:05:18.4822 (UTC)","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 49c442a1-459e-4444-38fd-08de9bc992bf","X-MS-Exchange-CrossTenant-Id":"f34e5979-57d9-4aaa-ad4d-b122a662184d","X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp":"\n TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129];\n Helo=[outbound-uk1.az.dlp.m.darktrace.com]","X-MS-Exchange-CrossTenant-AuthSource":"\n DU6PEPF0000B61B.eurprd02.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Anonymous","X-MS-Exchange-CrossTenant-FromEntityHeader":"HybridOnPrem","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3678237,"web_url":"http://patchwork.ozlabs.org/comment/3678237/","msgid":"<EBC71304-7410-4146-847F-FE366AD82E21@suse.de>","list_archive_url":null,"date":"2026-04-16T15:08:13","subject":"Re: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"> Am 16.04.2026 um 17:06 schrieb Tamar Christina <tamar.christina@arm.com>:\n> \n> ﻿\n>> \n>> -----Original Message-----\n>> From: Richard Biener <rguenther@suse.de>\n>> Sent: 16 April 2026 13:35\n>> To: Tamar Christina <Tamar.Christina@arm.com>\n>> Cc: gcc-patches@gcc.gnu.org; nd <nd@arm.com>; jakub@redhat.com;\n>> Richard Earnshaw <Richard.Earnshaw@arm.com>\n>> Subject: Re: [PATCH]middle-end: disable CRC pass when -Os and the target\n>> does not have CRC optabs [PR124900]\n>> \n>>> On Thu, 16 Apr 2026, Tamar Christina wrote:\n>>> \n>>> The example\n>>> \n>>> #include <stdint.h>\n>>> #include <stddef.h>\n>>> \n>>> uint32_t crc32(const uint8_t *data, size_t length)\n>>> {\n>>>    uint8_t i;\n>>>    uint32_t crc = 0xffffffff; // Initial value\n>>>    while (length--) {\n>>>        crc ^= (uint32_t)(*data++) << 24;\n>>> #pragma GCC unroll 0\n>>>        for (i = 0; i < 8; ++i) {\n>>>            if (crc & 0x80000000)\n>>>                crc = (crc << 1) ^ 0x04C11DB7;\n>>>            else\n>>>                crc <<= 1;\n>>>        }\n>>>    }\n>>>    return crc;\n>>> }\n>>> \n>>> when compiled with -Os -march=armv8-a increases the codesize significantly\n>>> because it generates a loop that's as big as the original but adds a lookup\n>>> table of 255 bytes.  This means it's actively making codesize bigger and\n>>> introduces a codesize regression from before the pass was added.\n>>> \n>>> This patch disables the CRC table based expansion when compiling for size.\n>>> \n>>> Bootstrapped Regtested on aarch64-none-linux-gnu,\n>>> arm-none-linux-gnueabihf, x86_64-pc-linux-gnu\n>>> -m32, -m64 and no issues.\n>>> \n>>> Ok for master? and backport to GCC 15?\n>>> \n>>> Thanks,\n>>> Tamar\n>>> \n>>> gcc/ChangeLog:\n>>> \n>>>    PR middle-end/124900\n>>>    * gimple-crc-optimization.cc (crc_optimization::optimize_crc_loop):\n>> Do\n>>>    not expand to table when compiling for size.\n>>> \n>>> gcc/testsuite/ChangeLog:\n>>> \n>>>    PR middle-end/124900\n>>>    * gcc.target/aarch64/crc-1.c: New test.\n>>>    * gcc.target/aarch64/crc-2.c: New test.\n>>>    * gcc.target/aarch64/crc-3.c: New test.\n>>>    * gcc.target/aarch64/crc-4.c: New test.\n>>> \n>>> ---\n>>> diff --git a/gcc/gimple-crc-optimization.cc b/gcc/gimple-crc-optimization.cc\n>>> index\n>> fe13390d95c782b7f58bdadee0b2a46778f186fd..c8482580d25ee730a1de5\n>> 7c0d699ab125120e25b 100644\n>>> --- a/gcc/gimple-crc-optimization.cc\n>>> +++ b/gcc/gimple-crc-optimization.cc\n>>> @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see\n>>> #include \"cfgloop.h\"\n>>> #include \"tree-scalar-evolution.h\"\n>>> #include \"crc-verification.h\"\n>>> +#include \"internal-fn.h\"\n>>> \n>>> class crc_optimization {\n>>>  private:\n>>> @@ -1260,6 +1261,18 @@ crc_optimization::optimize_crc_loop (gphi\n>> *output_crc)\n>>>   location_t loc;\n>>>   loc = EXPR_LOCATION (phi_result);\n>>> \n>>> +  /* If the target does not have an expansion for CRC optimally then the\n>> table\n>>> +     based lookup will need at least 255-bytes of RODATA and won't be\n>> smaller\n>>> +     than the original code itself.  */\n>>> +  if (optimize_size)\n>>> +    {\n>> \n>> Please test !optimize_loop_for_speed_p (loop) in the caller, possibly\n>> even before doing expensive analysis (but not before the data type is\n>> known, obviously).\n> \n> I'm not entirely sure I can.  The crc optab is a convert optab and from the\n> docs:\n> \n> @mdindex crc@var{m}@var{n}4\n> @item @samp{crc@var{m}@var{n}4}\n> Calculate a bit-forward CRC using operands 1, 2 and 3,\n> then store the result in operand 0.\n> Operands 1 is the initial CRC, operands 2 is the data and operands 3 is the\n> polynomial without leading 1.\n> Operands 0, 1 and 3 have mode @var{n} and operand 2 has mode @var{m}, where\n> both modes are integers.  The size of CRC to be calculated is determined by the\n> mode; for example, if @var{n} is @code{HImode}, a CRC16 is calculated.\n> \n> So from this it means the second type comes from m_data_arg, this is sometimes\n> computed during validate_crc_and_data (), but when that fails it's done in optimize_crc_loop ()\n> which requires m_crc_loop->nb_iterations to be known.\n> \n> I'm not entirely sure if this is known before extract_polynomial.\n> \n> If so then I wonder why validate_crc_and_data didn't handle the other case immediately,\n> this makes me believe it wasn't accurate at that time.\n> \n> If it is known at validate_crc_and_data () I can move the code from optimize_crc_loop\n> handling if (!m_data_arg) there.\n> \n> Thought or suggestions?\n\nPass down ,loop‘ and still check optimize_loop_for_speed_p\n\n> \n> Thanks,\n> Tamar\n> \n>> \n>>> +      tree data_type = TREE_TYPE (m_data_arg);\n>>> +      tree result_type = TREE_TYPE (phi_result);\n>>> +      auto ty_pair = tree_pair (data_type, result_type);\n>>> +      if (!direct_internal_fn_supported_p (ifn, ty_pair, OPTIMIZE_FOR_BOTH))\n>>> +    return false;\n>>> +    }\n>>> +\n>>>   /* Add IFN call and write the return value in the phi_result.  */\n>>>   gcall *call = gimple_build_call_internal (ifn, 3, m_crc_arg, m_data_arg,\n>>>                        polynomial_arg);\n>>> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-1.c\n>> b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n>>> new file mode 100644\n>>> index\n>> 0000000000000000000000000000000000000000..e47b73d02b74a74409\n>> db46574237423d76286b51\n>>> --- /dev/null\n>>> +++ b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n>>> @@ -0,0 +1,24 @@\n>>> +/* { dg-do compile } */\n>>> +/* { dg-additional-options \"-Os -march=armv8-a -fdump-tree-crc -std=c99\"\n>> } */\n>>> +\n>>> +#include <stdint.h>\n>>> +#include <stddef.h>\n>>> +\n>>> +uint32_t crc32(const uint8_t *data, size_t length)\n>>> +{\n>>> +    uint8_t i;\n>>> +    uint32_t crc = 0xffffffff; // Initial value\n>>> +    while (length--) {\n>>> +        crc ^= (uint32_t)(*data++) << 24;\n>>> +#pragma GCC unroll 0\n>>> +        for (i = 0; i < 8; ++i) {\n>>> +            if (crc & 0x80000000)\n>>> +                crc = (crc << 1) ^ 0x04C11DB7;\n>>> +            else\n>>> +                crc <<= 1;\n>>> +        }\n>>> +    }\n>>> +    return crc;\n>>> +}\n>>> +\n>>> +/* { dg-final { scan-tree-dump-not {\\.CRC } \"crc\" } } */\n>>> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-2.c\n>> b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n>>> new file mode 100644\n>>> index\n>> 0000000000000000000000000000000000000000..5cef000c9a6786c305d\n>> a261d17f277660bc6c518\n>>> --- /dev/null\n>>> +++ b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n>>> @@ -0,0 +1,24 @@\n>>> +/* { dg-do compile } */\n>>> +/* { dg-additional-options \"-Os -march=armv8-a+crypto -fdump-tree-crc -\n>> std=c99\" } */\n>>> +\n>>> +#include <stdint.h>\n>>> +#include <stddef.h>\n>>> +\n>>> +uint32_t crc32(const uint8_t *data, size_t length)\n>>> +{\n>>> +    uint8_t i;\n>>> +    uint32_t crc = 0xffffffff; // Initial value\n>>> +    while (length--) {\n>>> +        crc ^= (uint32_t)(*data++) << 24;\n>>> +#pragma GCC unroll 0\n>>> +        for (i = 0; i < 8; ++i) {\n>>> +            if (crc & 0x80000000)\n>>> +                crc = (crc << 1) ^ 0x04C11DB7;\n>>> +            else\n>>> +                crc <<= 1;\n>>> +        }\n>>> +    }\n>>> +    return crc;\n>>> +}\n>>> +\n>>> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n>>> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-3.c\n>> b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n>>> new file mode 100644\n>>> index\n>> 0000000000000000000000000000000000000000..6f9900525d3f58cf6d7\n>> af32d98568924c66d89f7\n>>> --- /dev/null\n>>> +++ b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n>>> @@ -0,0 +1,24 @@\n>>> +/* { dg-do compile } */\n>>> +/* { dg-additional-options \"-O3 -march=armv8-a -fdump-tree-crc -std=c99\"\n>> } */\n>>> +\n>>> +#include <stdint.h>\n>>> +#include <stddef.h>\n>>> +\n>>> +uint32_t crc32(const uint8_t *data, size_t length)\n>>> +{\n>>> +    uint8_t i;\n>>> +    uint32_t crc = 0xffffffff; // Initial value\n>>> +    while (length--) {\n>>> +        crc ^= (uint32_t)(*data++) << 24;\n>>> +#pragma GCC unroll 0\n>>> +        for (i = 0; i < 8; ++i) {\n>>> +            if (crc & 0x80000000)\n>>> +                crc = (crc << 1) ^ 0x04C11DB7;\n>>> +            else\n>>> +                crc <<= 1;\n>>> +        }\n>>> +    }\n>>> +    return crc;\n>>> +}\n>>> +\n>>> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n>>> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-4.c\n>> b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n>>> new file mode 100644\n>>> index\n>> 0000000000000000000000000000000000000000..9a51856f44c86e47ee\n>> dc28af67e9f75231f87638\n>>> --- /dev/null\n>>> +++ b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n>>> @@ -0,0 +1,24 @@\n>>> +/* { dg-do compile } */\n>>> +/* { dg-additional-options \"-O3 -march=armv8-a+crypto -fdump-tree-crc -\n>> std=c99\" } */\n>>> +\n>>> +#include <stdint.h>\n>>> +#include <stddef.h>\n>>> +\n>>> +uint32_t crc32(const uint8_t *data, size_t length)\n>>> +{\n>>> +    uint8_t i;\n>>> +    uint32_t crc = 0xffffffff; // Initial value\n>>> +    while (length--) {\n>>> +        crc ^= (uint32_t)(*data++) << 24;\n>>> +#pragma GCC unroll 0\n>>> +        for (i = 0; i < 8; ++i) {\n>>> +            if (crc & 0x80000000)\n>>> +                crc = (crc << 1) ^ 0x04C11DB7;\n>>> +            else\n>>> +                crc <<= 1;\n>>> +        }\n>>> +    }\n>>> +    return crc;\n>>> +}\n>>> +\n>>> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n>>> \n>>> \n>>> \n>> \n>> --\n>> Richard Biener <rguenther@suse.de>\n>> SUSE Software Solutions Germany GmbH,\n>> Frankenstrasse 146, 90461 Nuernberg, Germany;\n>> GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG\n>> Nuernberg)","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=hKVyq5bV;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=nmDwM9kO;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=hKVyq5bV;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=nmDwM9kO;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=hKVyq5bV;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=nmDwM9kO;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=hKVyq5bV;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=nmDwM9kO","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=suse.de","sourceware.org; spf=pass smtp.mailfrom=suse.de","server2.sourceware.org;\n arc=none smtp.remote-ip=195.135.223.131","smtp-out2.suse.de;\n dkim=pass header.d=suse.de header.s=susede2_rsa header.b=hKVyq5bV;\n dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=nmDwM9kO"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxLy55jRNz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 01:09:01 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id E6D614BA23FB\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 15:08:59 +0000 (GMT)","from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])\n by sourceware.org (Postfix) with ESMTPS id 86ED34BA2E35\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 15:08:30 +0000 (GMT)","from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org\n [IPv6:2a07:de40:b281:104:10:150:64:97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out2.suse.de (Postfix) with ESMTPS id 590B15BD31;\n Thu, 16 Apr 2026 15:08:28 +0000 (UTC)","from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 48B30593A3;\n Thu, 16 Apr 2026 15:08:28 +0000 (UTC)","from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id kbS2EWz74Gl6PAAAD6G6ig\n (envelope-from <rguenther@suse.de>); Thu, 16 Apr 2026 15:08:28 +0000"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org E6D614BA23FB","OpenDKIM Filter v2.11.0 sourceware.org 86ED34BA2E35"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 86ED34BA2E35","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 86ED34BA2E35","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776352110; cv=none;\n b=YsWJDzvUDU6+QwIniAkWhaqPHvklPv2gJRnCrSO3QdspjNOui1LYjSTW/mPJRgbQlLgiTGCBR7pIAiEPSjI4TvFEtibR7TLJwvyv/0Obh4hRoKhJ5NxPkvrpY5/jzeT1rP94sluU/+bwbBoetKmEvVZW/6d9G6ZIeNl2c9c38n8=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776352110; c=relaxed/simple;\n bh=abUFHtAq14AjthsQwv56QO5Fr5Eb9MViat1V198ZeGQ=;\n h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From:\n Mime-Version:Subject:Date:Message-Id:To;\n b=bQHESK9cht8rBzZKWFaAAT+kRk5EtJZrRHA4KgcZFue/Lpv8bf7eYKxPHIHYHXG6Yx7L23gQz7KxxSqf0ofBhJU+bGBFM9iLqd6u58N3UF3FvlThnoZRWE6G/R4TGiN2XAueez0etIxpN5Fsx2AMkbnKnpJ6X+Bh7X4LhNZEapg=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776352108;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4KFcYJmZk+uyZS6IB0o2ceWEblnz+dYQyEYFEmhztg8=;\n b=hKVyq5bVl+W3up5q4qlpAXDAvZmo1dv0qL1q28WLdtNVt0VwJtGnos7XO5uL3WmPq15M5n\n CxVqPCUOB0vsJAkwdHjpCb5PiZJEzqLjh5UBPe7fYYr+w0xmJYOMui1vXGLerQa5UATVnF\n 9mJwjMDqnS9EWl3qmFZ1Ovxn635dnu8=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776352108;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4KFcYJmZk+uyZS6IB0o2ceWEblnz+dYQyEYFEmhztg8=;\n b=nmDwM9kO8BzM9RK5CjHqu36Joe6NM/J2L50pQBSbJwMryrfMduW46q2ivB3UppNDm7PTc7\n N7hXfkMlHoVhvdBQ==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776352108;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4KFcYJmZk+uyZS6IB0o2ceWEblnz+dYQyEYFEmhztg8=;\n b=hKVyq5bVl+W3up5q4qlpAXDAvZmo1dv0qL1q28WLdtNVt0VwJtGnos7XO5uL3WmPq15M5n\n CxVqPCUOB0vsJAkwdHjpCb5PiZJEzqLjh5UBPe7fYYr+w0xmJYOMui1vXGLerQa5UATVnF\n 9mJwjMDqnS9EWl3qmFZ1Ovxn635dnu8=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776352108;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4KFcYJmZk+uyZS6IB0o2ceWEblnz+dYQyEYFEmhztg8=;\n b=nmDwM9kO8BzM9RK5CjHqu36Joe6NM/J2L50pQBSbJwMryrfMduW46q2ivB3UppNDm7PTc7\n N7hXfkMlHoVhvdBQ=="],"Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","From":"Richard Biener <rguenther@suse.de>","Mime-Version":"1.0 (1.0)","Subject":"Re: [PATCH]middle-end: disable CRC pass when -Os and the target does\n not have CRC optabs [PR124900]","Date":"Thu, 16 Apr 2026 17:08:13 +0200","Message-Id":"<EBC71304-7410-4146-847F-FE366AD82E21@suse.de>","References":"\n <VI0PR08MB10392C96AD8A2CDCF4144C52BFF232@VI0PR08MB10392.eurprd08.prod.outlook.com>","Cc":"gcc-patches@gcc.gnu.org, nd <nd@arm.com>, jakub@redhat.com,\n Richard Earnshaw <richard.earnshaw@arm.com>,\n Jeffrey Law <jeffrey.law@oss.qualcomm.com>","In-Reply-To":"\n <VI0PR08MB10392C96AD8A2CDCF4144C52BFF232@VI0PR08MB10392.eurprd08.prod.outlook.com>","To":"Tamar Christina <tamar.christina@arm.com>","X-Mailer":"iPhone Mail (23E254)","X-Rspamd-Action":"no action","X-Rspamd-Server":"rspamd2.dmz-prg2.suse.org","X-Spamd-Result":"default: False [-4.51 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000];\n R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n MX_GOOD(-0.01)[];\n URIBL_BLOCKED(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:dkim,suse.de:mid,suse.de:email,arm.com:email,gnu.org:email,gimple-crc-optimization.cc:url,gcc.target:url];\n SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n MIME_TRACE(0.00)[0:+];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n FUZZY_RATELIMITED(0.00)[rspamd.com]; TO_DN_SOME(0.00)[];\n ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_FIVE(0.00)[6];\n MID_RHS_MATCH_FROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2];\n FROM_EQ_ENVFROM(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];\n RCVD_VIA_SMTP_AUTH(0.00)[]; DKIM_TRACE(0.00)[suse.de:+];\n APPLE_IOS_MAILER_COMMON(0.00)[]; RCVD_TLS_ALL(0.00)[];\n DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim, suse.de:mid, suse.de:email,\n gnu.org:email, imap1.dmz-prg2.suse.org:helo, imap1.dmz-prg2.suse.org:rdns]","X-Rspamd-Queue-Id":"590B15BD31","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3678494,"web_url":"http://patchwork.ozlabs.org/comment/3678494/","msgid":"<9524ropo-1r4q-qr2n-pr79-8808r7392r64@fhfr.qr>","list_archive_url":null,"date":"2026-04-17T06:12:19","subject":"Re: [PATCH v2]middle-end: disable CRC pass when -Os and the target\n does not have CRC optabs [PR124900]","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On Fri, 17 Apr 2026, Tamar Christina wrote:\n\n> The example\n> \n> #include <stdint.h>\n> #include <stddef.h>\n> \n> uint32_t crc32(const uint8_t *data, size_t length)\n> {\n>     uint8_t i;\n>     uint32_t crc = 0xffffffff; // Initial value\n>     while (length--) {\n>         crc ^= (uint32_t)(*data++) << 24;\n> #pragma GCC unroll 0\n>         for (i = 0; i < 8; ++i) {\n>             if (crc & 0x80000000)\n>                 crc = (crc << 1) ^ 0x04C11DB7;\n>             else\n>                 crc <<= 1;\n>         }\n>     }\n>     return crc;\n> }\n> \n> when compiled with -Os -march=armv8-a increases the codesize significantly\n> because it generates a loop that's as big as the original but adds a lookup\n> table of 255 bytes.  This means it's actively making codesize bigger and\n> introduces a codesize regression from before the pass was added.\n> \n> This patch disables the CRC table based expansion when compiling for size.\n> \n> Bootstrapped Regtested on aarch64-none-linux-gnu,\n> arm-none-linux-gnueabihf, x86_64-pc-linux-gnu\n> -m32, -m64 and no issues.\n> \n> Ok for master? and backport to GCC 15?\n\nOK for trunk and branch (after a while).\n\nRichard.\n\n> Thanks,\n> Tamar\n> \n> gcc/ChangeLog:\n> \n> \tPR middle-end/124900\n> \t* gimple-crc-optimization.cc (crc_optimization::optimize_crc_loop): Do\n> \tnot expand to table when compiling for size.\n> \t(class crc_optimization): Update prototype of optimize_crc_loop to\n> \tinclude loop.\n> \t(crc_optimization::execute): Pass loop to optimize_crc_loop.\n> \n> gcc/testsuite/ChangeLog:\n> \n> \tPR middle-end/124900\n> \t* gcc.target/aarch64/crc-1.c: New test.\n> \t* gcc.target/aarch64/crc-2.c: New test.\n> \t* gcc.target/aarch64/crc-3.c: New test.\n> \t* gcc.target/aarch64/crc-4.c: New test.\n> \n> ---\n> diff --git a/gcc/gimple-crc-optimization.cc b/gcc/gimple-crc-optimization.cc\n> index fe13390d95c782b7f58bdadee0b2a46778f186fd..e69bc2935eb07bc94623b84d952b48dc60ff3a8a 100644\n> --- a/gcc/gimple-crc-optimization.cc\n> +++ b/gcc/gimple-crc-optimization.cc\n> @@ -32,6 +32,8 @@ along with GCC; see the file COPYING3.  If not see\n>  #include \"cfgloop.h\"\n>  #include \"tree-scalar-evolution.h\"\n>  #include \"crc-verification.h\"\n> +#include \"internal-fn.h\"\n> +#include \"predict.h\"\n>  \n>  class crc_optimization {\n>   private:\n> @@ -225,10 +227,10 @@ class crc_optimization {\n>    /* Returns phi statement which may hold the calculated CRC.  */\n>    gphi *get_output_phi ();\n>  \n> -  /* Attempts to optimize a CRC calculation loop by replacing it with a call to\n> -     an internal function (IFN_CRC or IFN_CRC_REV).\n> +  /* Attempts to optimize a CRC calculation calculated by LOOP by replacing it\n> +     with a call to an internal function (IFN_CRC or IFN_CRC_REV).\n>       Returns true if replacement succeeded, otherwise false.  */\n> -  bool optimize_crc_loop (gphi *output_crc);\n> +  bool optimize_crc_loop (class loop *loop, gphi *output_crc);\n>  \n>   public:\n>    crc_optimization () : m_visited_stmts (BITMAP_ALLOC (NULL)),\n> @@ -1221,7 +1223,7 @@ crc_optimization::get_output_phi ()\n>     Returns true if replacement succeeded, otherwise false.  */\n>  \n>  bool\n> -crc_optimization::optimize_crc_loop (gphi *output_crc)\n> +crc_optimization::optimize_crc_loop (class loop *loop, gphi *output_crc)\n>  {\n>    if (!output_crc)\n>      {\n> @@ -1260,6 +1262,18 @@ crc_optimization::optimize_crc_loop (gphi *output_crc)\n>    location_t loc;\n>    loc = EXPR_LOCATION (phi_result);\n>  \n> +  /* If the target does not have an expansion for CRC optimally then the table\n> +     based lookup will need at least 255-bytes of RODATA and won't be smaller\n> +     than the original code itself.  */\n> +  if (!optimize_loop_for_speed_p (loop))\n> +    {\n> +      tree data_type = TREE_TYPE (m_data_arg);\n> +      tree result_type = TREE_TYPE (phi_result);\n> +      auto ty_pair = tree_pair (data_type, result_type);\n> +      if (!direct_internal_fn_supported_p (ifn, ty_pair, OPTIMIZE_FOR_BOTH))\n> +\treturn false;\n> +    }\n> +\n>    /* Add IFN call and write the return value in the phi_result.  */\n>    gcall *call = gimple_build_call_internal (ifn, 3, m_crc_arg, m_data_arg,\n>  \t\t\t\t\t    polynomial_arg);\n> @@ -1337,7 +1351,7 @@ crc_optimization::execute (function *fun)\n>  \t    fprintf (dump_file, \"The loop with %d header BB index \"\n>  \t\t\t\t\"calculates CRC!\\n\", m_crc_loop->header->index);\n>  \n> -\t  if (!optimize_crc_loop (output_crc))\n> +\t  if (!optimize_crc_loop (loop, output_crc))\n>  \t    {\n>  \t      if (dump_file)\n>  \t\tfprintf (dump_file, \"Couldn't generate faster CRC code.\\n\");\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-1.c b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..e47b73d02b74a74409db46574237423d76286b51\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-1.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-Os -march=armv8-a -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-not {\\.CRC } \"crc\" } } */\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-2.c b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..5cef000c9a6786c305da261d17f277660bc6c518\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-2.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-Os -march=armv8-a+crypto -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-3.c b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..6f9900525d3f58cf6d7af32d98568924c66d89f7\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-3.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-O3 -march=armv8-a -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> diff --git a/gcc/testsuite/gcc.target/aarch64/crc-4.c b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..9a51856f44c86e47eedc28af67e9f75231f87638\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/aarch64/crc-4.c\n> @@ -0,0 +1,24 @@\n> +/* { dg-do compile } */\n> +/* { dg-additional-options \"-O3 -march=armv8-a+crypto -fdump-tree-crc -std=c99\" } */\n> +\n> +#include <stdint.h>\n> +#include <stddef.h>\n> +\n> +uint32_t crc32(const uint8_t *data, size_t length)\n> +{\n> +    uint8_t i;\n> +    uint32_t crc = 0xffffffff; // Initial value\n> +    while (length--) {\n> +        crc ^= (uint32_t)(*data++) << 24;\n> +#pragma GCC unroll 0\n> +        for (i = 0; i < 8; ++i) {\n> +            if (crc & 0x80000000)\n> +                crc = (crc << 1) ^ 0x04C11DB7;\n> +            else\n> +                crc <<= 1;\n> +        }\n> +    }\n> +    return crc;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump-times {\\.CRC } 1 \"crc\" } } */\n> \n> \n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=uygYNi+r;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=EXTBS9hL;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=uygYNi+r;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=EXTBS9hL;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=uygYNi+r;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=EXTBS9hL;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=uygYNi+r;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=EXTBS9hL","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=suse.de","sourceware.org; spf=pass smtp.mailfrom=suse.de","server2.sourceware.org;\n arc=none smtp.remote-ip=195.135.223.131","smtp-out2.suse.de;\n\tnone"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxl103Jysz1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 16:12:51 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 272D04BB58C6\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 06:12:49 +0000 (GMT)","from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])\n by sourceware.org (Postfix) with ESMTPS id 37DAD4BA23FA\n for <gcc-patches@gcc.gnu.org>; Fri, 17 Apr 2026 06:12:21 +0000 (GMT)","from murzim.nue2.suse.org (unknown [10.168.4.243])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out2.suse.de (Postfix) with ESMTPS id 080D05BD5B;\n Fri, 17 Apr 2026 06:12:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 272D04BB58C6","OpenDKIM Filter v2.11.0 sourceware.org 37DAD4BA23FA"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 37DAD4BA23FA","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 37DAD4BA23FA","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776406341; cv=none;\n b=rEfuoLfNtefHTicvcUfh+Tcdxo9y6KUuYtW/0IDrCsQt8zJ8ZgTYq72i9edsDeBnLeNXHf8q0dxAygIdckFhih2HZS6qt77yloNYKkGrs2jNzNms3oUXNkbgj05S9xTARr7Tvwj7hcSNDJCCWIA3HUJaguUjxCSbYp5ZfNCBnDs=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776406341; c=relaxed/simple;\n bh=k0Sr7P8x//sFkFPRYuASj1h/YBUxqLRBQLF9TWUnjwc=;\n h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date:\n From:To:Subject:Message-ID:MIME-Version;\n b=NtgLWvReitMElki4CBngXYQ1olsTSJE9w9M5fWkjgakSRiELXZ4Xiq21PMymLVXzEFFZPwE6RnOC49R/wvyhU2VVlxRRhlh4ZmRf5SeWZx3mIMR+PvtjmflK1ZA6LPexy68mkpb60lYNlpoFt/DMFkoObXiiuyfmcjyCEj9OQso=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776406340;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=F892KA85OBNU9vzhCwetQglE/9/orvyKPiNdMprHCXI=;\n b=uygYNi+rmmeIuhJgDMSZmYpKCyroYw9okLcr/1VZC6WoORshJrlGyPlpW5DnZMzEMXZJKj\n V1wnbXWKyWTXFQoCLDyVMCtgF8LLtOZ93yYMQmsTwa2avUXoHx/UgoqRcrECHXsh9UrKsy\n xEqmhIeEO0GWc3JWEHw1ZXV+Ctgre9Q=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776406340;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=F892KA85OBNU9vzhCwetQglE/9/orvyKPiNdMprHCXI=;\n b=EXTBS9hL/n+XqmvTiGTZgtuIsEBJBXByjNKKEjsLJT8zbClrSp6uBzhv+Z4ohQbhqve4b9\n q8gQ/0cadye0LpCg==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776406340;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=F892KA85OBNU9vzhCwetQglE/9/orvyKPiNdMprHCXI=;\n b=uygYNi+rmmeIuhJgDMSZmYpKCyroYw9okLcr/1VZC6WoORshJrlGyPlpW5DnZMzEMXZJKj\n V1wnbXWKyWTXFQoCLDyVMCtgF8LLtOZ93yYMQmsTwa2avUXoHx/UgoqRcrECHXsh9UrKsy\n xEqmhIeEO0GWc3JWEHw1ZXV+Ctgre9Q=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776406340;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=F892KA85OBNU9vzhCwetQglE/9/orvyKPiNdMprHCXI=;\n b=EXTBS9hL/n+XqmvTiGTZgtuIsEBJBXByjNKKEjsLJT8zbClrSp6uBzhv+Z4ohQbhqve4b9\n q8gQ/0cadye0LpCg=="],"Date":"Fri, 17 Apr 2026 08:12:19 +0200 (CEST)","From":"Richard Biener <rguenther@suse.de>","To":"Tamar Christina <tamar.christina@arm.com>","cc":"gcc-patches@gcc.gnu.org, nd@arm.com","Subject":"Re: [PATCH v2]middle-end: disable CRC pass when -Os and the target\n does not have CRC optabs [PR124900]","In-Reply-To":"<patch-20476-tamar@arm.com>","Message-ID":"<9524ropo-1r4q-qr2n-pr79-8808r7392r64@fhfr.qr>","References":"<patch-20476-tamar@arm.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII","X-Spamd-Result":"default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000];\n NEURAL_HAM_SHORT(-0.20)[-0.994]; MIME_GOOD(-0.10)[text/plain];\n FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[];\n MISSING_XM_UA(0.00)[]; ARC_NA(0.00)[];\n RCVD_COUNT_ZERO(0.00)[0]; RCPT_COUNT_THREE(0.00)[3];\n FROM_EQ_ENVFROM(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com];\n TO_MATCH_ENVRCPT_ALL(0.00)[];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]