{"id":2226895,"url":"http://patchwork.ozlabs.org/api/covers/2226895/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/cover/bmm.hhupmirk34.gcc.gcc-TEST.rearnsha.130.2.0@forge-stage.sourceware.org/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/projects/17/?format=json","name":"GNU Compiler Collection","link_name":"gcc","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<bmm.hhupmirk34.gcc.gcc-TEST.rearnsha.130.2.0@forge-stage.sourceware.org>","list_archive_url":null,"date":"2026-04-22T19:07:15","name":"[v2,0/1] arm: avoid invalid shift in arm_canonicalize_comparison [PR122999]","submitter":{"id":92169,"url":"http://patchwork.ozlabs.org/api/people/92169/?format=json","name":"Richard Earnshaw via Sourceware Forge","email":"forge-bot+rearnsha@forge-stage.sourceware.org"},"mbox":"http://patchwork.ozlabs.org/project/gcc/cover/bmm.hhupmirk34.gcc.gcc-TEST.rearnsha.130.2.0@forge-stage.sourceware.org/mbox/","series":[{"id":501111,"url":"http://patchwork.ozlabs.org/api/series/501111/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=501111","date":"2026-04-22T19:07:15","name":"arm: avoid invalid shift in arm_canonicalize_comparison [PR122999]","version":2,"mbox":"http://patchwork.ozlabs.org/series/501111/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/covers/2226895/comments/","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 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; dmarc=none (p=none dis=none)\n header.from=forge-stage.sourceware.org","sourceware.org;\n spf=pass smtp.mailfrom=forge-stage.sourceware.org","server2.sourceware.org;\n arc=none smtp.remote-ip=38.145.34.39"],"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 4g1Bw22zkcz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 07:20:34 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 68F5645804BC\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:20:32 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 92C38435EC5B\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 19:08:33 +0000 (GMT)","from forge-stage.sourceware.org (localhost [IPv6:::1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256)\n (No client certificate requested)\n by forge-stage.sourceware.org (Postfix) with ESMTPS id 6DA294363D\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 19:08:33 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 68F5645804BC","OpenDKIM Filter v2.11.0 sourceware.org 92C38435EC5B"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 92C38435EC5B","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 92C38435EC5B","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776884913; cv=none;\n b=VnOzkD47B9ZqUcYrit1Nqt4yoAuxCPCdB3oN98npM7wMn8MjNDmrnElbYTkhQFe9XBdxauw4nWIpFBRggVg8WOVKAH5bO6LrxfNeptER4dX3t2OfWyytfgXSrcoM+5yoI+FxfJ8WR/lg4xP0rNfje/s+Dq2kzYsQcVqxcE7vA+M=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776884913; c=relaxed/simple;\n bh=cTX2DezduF6RAB+c8lzkDh3wswU70X6/wffjg9kC2qo=;\n h=From:Date:Subject:To:Message-ID;\n b=fXtbMNFnwogxpV8MaVI6VY+xw3cd6qiaRdMq/fIosj86qenX2HAfyoxZQRkvIgh1dRfrP8QUZtZ8qBj9Y1mhWHylQTPs96sB6dABcWIsZTjGhLgPpyl3B1a0/QRwRHHqDuApWqWIUYlPqnq+sgv6oU5OmyBkyFbrhxGdGDtkvjM=","ARC-Authentication-Results":"i=1; server2.sourceware.org","From":"Richard Earnshaw via Sourceware Forge\n <forge-bot+rearnsha@forge-stage.sourceware.org>","Date":"Wed, 22 Apr 2026 19:07:15 +0000","Subject":"[PATCH v2 0/1] arm: avoid invalid shift in\n arm_canonicalize_comparison [PR122999]","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Message-ID":"\n <bmm.hhupmirk34.gcc.gcc-TEST.rearnsha.130.2.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/130","References":"\n <bmm.hdmg46dt56.gcc.gcc-TEST.rearnsha.130.1.0@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hdmg46dt56.gcc.gcc-TEST.rearnsha.130.1.0@forge-stage.sourceware.org>","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>","Reply-To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>, rearnsha@arm.com","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"},"content":"Hi gcc-patches mailing list,\nRichard Earnshaw via Sourceware Forge <forge-bot+rearnsha@forge-stage.sourceware.org> has requested that the following forgejo pull request\nbe published on the mailing list.\n\nCreated on: 2025-12-05 16:36:37+00:00\nLatest update: 2025-12-05 17:32:58+00:00\nChanges: 0 changed files, 0 additions, 0 deletions\nHead revision: rearnsha/gcc-TEST ref refs/pull/130/head commit 550fab1f5100bff8773ec4b6838d51e3f41b3d5d\nBase revision: gcc/gcc-TEST ref trunk commit c48b55fa7764477008fbf187fadb352e3391a3f5 r16-5914-gc48b55fa776447\nMerge base: c48b55fa7764477008fbf187fadb352e3391a3f5\nFull diff url: https://forge.sourceware.org/gcc/gcc-TEST/pulls/130.diff\nDiscussion:  https://forge.sourceware.org/gcc/gcc-TEST/pulls/130\nRequested Reviewers:\n\nThere was UB in arm_canonicalize_comparison if it is called with\nboth operands of type VOIDmode.  Avoid this by first handling\nfloating-point types, then returning if we are left with anything\nother than an integer mode.  For belt-and-braces also check that\nthe mode does not require a mask larger than HOST_WIDE_INT.\n\ngcc/ChangeLog:\n\n\tPR target/122999\n\t* config/arm/arm.cc (arm_canonicalize_comparison): Defer\n\tinitializing maxval until we know we are dealing with an\n\tinteger mode.\n\nThanks for taking the time to contribute to GCC!\n\nPlease be advised that https://forge.sourceware.org/ is currently a trial\nthat is being used by the GCC community to experiment with a new workflow\nbased on pull requests.\n\nPull requests sent here may be forgotten or ignored. Patches that you want to\npropose for inclusion in GCC should use the existing email-based workflow,\nsee https://gcc.gnu.org/contribute.html\n\n\nChanged files:\n\n\nRichard Earnshaw (1):\n  arm: avoid invalid shift in arm_canonicalize_comparison [PR122999]\n\n\nRange-diff against v1:\n1:  068d8c06acb9 ! 1:  550fab1f5100 arm: avoid invalid shift in arm_canonicalize_comparison [PR122999]\n    @@ Commit message\n                 * config/arm/arm.cc (arm_canonicalize_comparison): Defer\n                 initializing maxval until we know we are dealing with an\n                 integer mode.\n    -\n    - ## gcc/config/arm/arm.cc ##\n    -@@ gcc/config/arm/arm.cc: arm_canonicalize_comparison (int *code, rtx *op0, rtx *op1,\n    -   if (mode == VOIDmode)\n    -     mode = GET_MODE (*op1);\n    - \n    --  maxval = (HOST_WIDE_INT_1U << (GET_MODE_BITSIZE (mode) - 1)) - 1;\n    --\n    -   /* For floating-point comparisons, prefer >= and > over <= and < since\n    -      the former are supported by VSEL on some architectures.  Only do this\n    -      if both operands are registers.  */\n    -@@ gcc/config/arm/arm.cc: arm_canonicalize_comparison (int *code, rtx *op0, rtx *op1,\n    -       return;\n    -     }\n    - \n    -+  /* Everything below assumes an integer mode.  */\n    -+  if (GET_MODE_CLASS (mode) != MODE_INT\n    -+      || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT)\n    -+    return;\n    -+\n    -+  maxval = (HOST_WIDE_INT_1U << (GET_MODE_BITSIZE (mode) - 1)) - 1;\n    -+\n    -   /* For DImode, we have GE/LT/GEU/LTU comparisons (with cmp/sbc).  In\n    -      ARM mode we can also use cmp/cmpeq for GTU/LEU.  GT/LE must be\n    -      either reversed or (for constant OP1) adjusted to GE/LT."}