get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2232494/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2232494,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2232494/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/CAFULd4a86+wdgVt34CdSmNmfP6mzKN4KFQT=YmnLxyUZV-J97A@mail.gmail.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/17/?format=api",
        "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
    },
    "msgid": "<CAFULd4a86+wdgVt34CdSmNmfP6mzKN4KFQT=YmnLxyUZV-J97A@mail.gmail.com>",
    "date": "2026-05-04T15:35:39",
    "name": "[pushed] i386: Relax predicates in BT splitters",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "a50c311ca8d5e2864c2f369a5de4f88c0ad39114",
    "submitter": {
        "id": 808,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/808/?format=api",
        "name": "Uros Bizjak",
        "email": "ubizjak@gmail.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/CAFULd4a86+wdgVt34CdSmNmfP6mzKN4KFQT=YmnLxyUZV-J97A@mail.gmail.com/mbox/",
    "series": [
        {
            "id": 502684,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/502684/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=502684",
            "date": "2026-05-04T15:35:39",
            "name": "[pushed] i386: Relax predicates in BT splitters",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502684/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2232494/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2232494/checks/",
    "tags": {},
    "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=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=Wk8D35Qp;\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=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=Wk8D35Qp",
            "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com",
            "sourceware.org; spf=pass smtp.mailfrom=gmail.com",
            "server2.sourceware.org;\n arc=pass smtp.remote-ip=2a00:1450:4864:20::22b"
        ],
        "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 4g8QjP6mwPz1yJ0\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 05 May 2026 01:36:24 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A16EB4BAD171\n\tfor <incoming@patchwork.ozlabs.org>; Mon,  4 May 2026 15:36:22 +0000 (GMT)",
            "from mail-lj1-x22b.google.com (mail-lj1-x22b.google.com\n [IPv6:2a00:1450:4864:20::22b])\n by sourceware.org (Postfix) with ESMTPS id 8C6554BAD15A\n for <gcc-patches@gcc.gnu.org>; Mon,  4 May 2026 15:35:54 +0000 (GMT)",
            "by mail-lj1-x22b.google.com with SMTP id\n 38308e7fff4ca-3937ac12828so16562891fa.0\n for <gcc-patches@gcc.gnu.org>; Mon, 04 May 2026 08:35:54 -0700 (PDT)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org A16EB4BAD171",
            "OpenDKIM Filter v2.11.0 sourceware.org 8C6554BAD15A"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 8C6554BAD15A",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 8C6554BAD15A",
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1777908954; cv=pass;\n b=FpLfxONZM1xImgPu9RsSLvX7+weuGVBDOpkZC/6vZPd3XYg7HAA15GP3XwXkkFX4cWXT+k7p2xTHWy3YsArMYn2F87ZS1hLHYdmaE4RWVhZKNN43NE7LQ5DC7XrUhcOqYW/S14CzOPS0le6lLrQwJojNocbg2KjyAI1ooRFUBgw=",
            "i=1; a=rsa-sha256; t=1777908953; cv=none;\n d=google.com; s=arc-20240605;\n b=ASCGtUTESQwHSrY9OCUp/n5dMnCco/Vj6l7OkVrZlmJ6hx36tB31S46W5YGTM6VpKu\n 2NovbuOLqW9CDfWpiIsOSo2teFGJgEqi2EKS93jldwzP4X1uk+YtRY0hrbma77+UxL4n\n uIare/BJPFWFezLXIBL5tHrXTsYRUGyEBTtf7FKxjyXpeE04hkdOoGtk1yNeY7s3jdhC\n Z/VG/hoCXUUHqi9YuddIpDRAJPZEur+rIDpNImeaK3636zYcgYVSOUksYqvK4IKt2y6Y\n NWvRrAh1vBYoLMcIC0GosY34kYeFO+ovT9t29UgJeXsNdJX6XiB++wzm/7olYhKEsJxU\n DyWw=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777908954; c=relaxed/simple;\n bh=Jh6ZhibKcRvXuwSgHdbKxHQXI+/y453Y3zKE03Wlywo=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=cZulV22p3XbRVrTlMTjUFXaA4L0qT5PyjKJtc3rtzUDsk92zhEDHnkpfSRTyYqkQqWTBhJu5p3H4yn41BcWQBLyu5yGSN11aoQcgI4w61IlEUF95SIW1H29C7EL/t62r9tUL+M+fEov4LsuLSVNeN3Dq3zIMlFAEvF8Vu/w4BDg=",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=to:subject:message-id:date:from:mime-version:dkim-signature;\n bh=o0324qLCH60z80OQNXoH9EfIuULzlL+2u5SppyVpwHI=;\n fh=XNn3asQvIblazGK92GBt13dVv+YmGV3pBS0JC29ZQco=;\n b=WHpJL4uSSJAYrDQ6sPkBJEeT0fxzje916O5lFm+LEiNUlp0IZrvjBWbdkDsG/TPxWZ\n Zlfhu5+wlNRY1hixhJqDdnXwGV1qlD5+uy2zSOSPQL9xAEnTEdO7GoG7P8TOshCz/OfW\n I+ow6fzuaLab2G07XmiG5ZUPbcZKMzCkFTl7d4a/Q/fzdMmut0gK1NRkKWHp6bbpUY+D\n nk7LpqK+Hm3hgg1tUZ4oxMZx04l658apZnuFoZxeaREHbU0i7uzkvg6cqXCETiLce1mx\n w7bsGbKxLlMWoFV6ejoMLb/SSRceoQw8x+7uZ7DCcsBnGN+jhhfVHO7mB/IOqI9e0RJV\n hnYA==; darn=gcc.gnu.org"
        ],
        "ARC-Authentication-Results": [
            "i=2; server2.sourceware.org",
            "i=1; mx.google.com; arc=none"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777908953; x=1778513753; darn=gcc.gnu.org;\n h=to:subject:message-id:date:from:mime-version:from:to:cc:subject\n :date:message-id:reply-to;\n bh=o0324qLCH60z80OQNXoH9EfIuULzlL+2u5SppyVpwHI=;\n b=Wk8D35Qpf8v1/cipsJ+arP3KQXfOGKXqL38HiUpcnziMMewaz5glI2yyyDm+tOYYGI\n Al9eaxSJVUPg4Ms2CSNOVw4K+MPiDPp/pEXeuk2t1u3zqFROC118VTIm6Ip6lW9eaqo8\n 71/feyclrOB4U+YMP3kEAfz/MF9rZQ/ip1UPnbtFfk+7LQa59Qhn3z2fq5m0mhKSdoMl\n dJ4kc/OJDvZpC+uebHkvB7PYkaCJ7AXQyz6g/wVzMOssNJQvKwCNKSnJIlRuQ8zjncVS\n CXwJwa2eTfMVDv+28BD632dfUYnPpQcQHnO4FX/mrHTbygI9GzuF27+VJD2m8WteB+/p\n Vb3Q==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777908953; x=1778513753;\n h=to:subject:message-id:date:from:mime-version:x-gm-gg\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=o0324qLCH60z80OQNXoH9EfIuULzlL+2u5SppyVpwHI=;\n b=BMcnJCFCGDW6lTqF6jfpl34OqXYLp85FLQM42831gtj32NLdaxHsyY6tLMaGTdmL7x\n mX1cRN7RCJoJrAVAs9GGD6KH3tcHypxgnhktgZYtWwWRoev5s9PqKwNeD69dDtCLFxNe\n n+cgyHJx7lUzmjMxaxnG/axvx+25MNkqfnxFTF/aYK0QBjhrTP/peRpplXXFe3D/CoKz\n v4rvouoEit8954ADbCah1TQLMVI62aHu2PGjRllL6NXd5JDotchXMUvDYk8tDoupaNjq\n 0Fnfje+9MMDOpncdejCZGLp6UwYqqU6ognXkc30gysM/o0Xl2ibwp9Cy0rtb+w1l7VG0\n nnWQ==",
        "X-Gm-Message-State": "AOJu0YyaFgrj6sWmM8OmvIb/ytCcYSFO/B9fpE6bfskYQLwnaKvfY8WJ\n KTaDYrtCbEohKw740zgpta5q2h/0ni8WdVLUVFn38LgUlHaH78YCt1xq12QSFvo/dIfyminGU1s\n NWhzdAs6aaOm4PK22FbEij7Nxopk/EuI17qAdRQY=",
        "X-Gm-Gg": "AeBDietpV7R9fNcZYAxtF2rRFRWQ/FLxPGKZaxFrs0ArVAxs/cYa0e6Q3RxZfsAY5T5\n eG31YZU4nR2SAco0I2Ux5crKPLUTzQgEX3vco0JaF17+aguHeQxLElzwEDWoJAeF7CL39d5dX8E\n Q58zKBlxw8Gf8AHgrhg65iLV+5EyT7w3kR9SEz+eG0rHHGNV8bpydnrfOwbrTQ01EOULQWSyj4+\n iVEiUSZE60QCqukFgFIHWviYw+b/pmy2ejhcc2JEQ5mBmrRSDAL73k0LyM7jCyhmZ0YbwBxhl5F\n Hdx4uUMMVqcxTnu+J5qkNA2WFm8VUBR0nNo10Mdd7EzH4VmudzJg4V/i0Fe5yLlqw2HUdG3gK1r\n 4WpReQiN/22wXx8gHyeWgebUIu9hrNHtZmm3SOa6AFQMuwA==",
        "X-Received": "by 2002:a05:651c:4418:10b0:38e:96c4:9244 with SMTP id\n 38308e7fff4ca-393b2999bcfmr137621fa.9.1777908952294; Mon, 04 May 2026\n 08:35:52 -0700 (PDT)",
        "MIME-Version": "1.0",
        "From": "Uros Bizjak <ubizjak@gmail.com>",
        "Date": "Mon, 4 May 2026 17:35:39 +0200",
        "X-Gm-Features": "AVHnY4LFBY0neHGktN7fDxn9JyrEDOlSL9aryaOeBfUwdBXusIYy0N44EqnSQNE",
        "Message-ID": "\n <CAFULd4a86+wdgVt34CdSmNmfP6mzKN4KFQT=YmnLxyUZV-J97A@mail.gmail.com>",
        "Subject": "[pushed] i386: Relax predicates in BT splitters",
        "To": "\"gcc-patches@gcc.gnu.org\" <gcc-patches@gcc.gnu.org>",
        "Content-Type": "multipart/mixed; boundary=\"0000000000008b82aa0650ffafe1\"",
        "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"
    },
    "content": "Allow QImode subregs of AND results in HImode and SImode (and DImode\non 64-bit targets).  Also allow memory operands for the BT base operand\nto increase combine opportunities and enable better insn propagation.\n\nThe BT insn is slow when using a memory base with a variable bit index,\nbut the register allocator can reload a memory operand into a register to\nsatisfy BT pattern constraints.\n\nThe patch improves code generation for the included testcase from:\n\nmask_get_flag:\n        movl    %esi, %ecx\n        movl    $1, %eax\n        salq    %cl, %rax\n        testq   %rdi, %rax\n        setne   %al\n        ret\nto:\n\nmask_get_flag:\n        xorl    %eax, %eax\n        btq     %rsi, %rdi\n        setc    %al\n        ret\n\ngcc/ChangeLog:\n\n    * config/i386/i386.md (*bt<SWI48:mode>_mask): Use\n    int248_register_operand for operand 1 predicate.\n    (*jcc_bt<mode>_mask): Use nonimmediate_operand for operand 1 predicate.\n    (*jcc_bt<SWI48:mode>_mask_1): Use nonimmediate_operand for operand 1\n    predicate and int248_register_operand for operand 2 predicate.\n    (BT followed by CMOV splitter): Use nonimmediate_operand\n    for operand 1 predicate.\n    (*bt<mode>_setcqi): Ditto.\n    (*bt<mode>_setncqi): Ditto.\n    (*bt<mode>_setnc<mode>): Ditto.\n    (*bt<mode>_setncqi_2): Ditto.\n    (*bt<mode>_setc<mode>_mask): Use nonimmediate_operand for operand 1\n    predicate and int248_register_operand for operand 2 predicate.\n\ngcc/testsuite/ChangeLog:\n\n    * gcc.target/i386/bt-8.c: New test.\n\nBootstrapped and regression tested on x86_64-linux-gnu {,-m32}.\n\nUros.",
    "diff": "diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md\nindex e514809453d..b0990294b9a 100644\n--- a/gcc/config/i386/i386.md\n+++ b/gcc/config/i386/i386.md\n@@ -19573,8 +19573,8 @@ (define_insn_and_split \"*bt<SWI48:mode>_mask\"\n             (match_operand:SWI48 0 \"nonimmediate_operand\" \"r,m\")\n             (const_int 1)\n \t    (subreg:QI\n-\t      (and:SWI248\n-\t\t(match_operand:SWI248 1 \"register_operand\")\n+\t      (and\n+\t\t(match_operand 1 \"int248_register_operand\")\n \t\t(match_operand 2 \"const_int_operand\")) 0))))]\n   \"TARGET_USE_BT\n    && (INTVAL (operands[2]) & (GET_MODE_BITSIZE (<SWI48:MODE>mode)-1))\n@@ -19629,7 +19629,7 @@ (define_insn_and_split \"*jcc_bt<mode>_mask\"\n   [(set (pc)\n   \t(if_then_else (match_operator 0 \"bt_comparison_operator\"\n \t\t\t[(zero_extract:SWI48\n-\t\t\t   (match_operand:SWI48 1 \"register_operand\")\n+\t\t\t   (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t\t\t   (const_int 1)\n \t\t\t   (and:QI\n \t\t\t     (match_operand:QI 2 \"register_operand\")\n@@ -19665,11 +19665,11 @@ (define_insn_and_split \"*jcc_bt<SWI48:mode>_mask_1\"\n   [(set (pc)\n   \t(if_then_else (match_operator 0 \"bt_comparison_operator\"\n \t\t\t[(zero_extract:SWI48\n-\t\t\t   (match_operand:SWI48 1 \"register_operand\")\n+\t\t\t   (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t\t\t   (const_int 1)\n \t\t\t   (subreg:QI\n-\t\t\t     (and:SWI248\n-\t\t\t       (match_operand:SWI248 2 \"register_operand\")\n+\t\t\t     (and\n+\t\t\t       (match_operand 2 \"int248_register_operand\")\n \t\t\t       (match_operand 3 \"const_int_operand\")) 0))\n \t\t\t (const_int 0)])\n \t\t      (label_ref (match_operand 4))\n@@ -19704,7 +19704,7 @@ (define_split\n \t(if_then_else:SWI248\n \t (match_operator 5 \"bt_comparison_operator\"\n \t  [(zero_extract:SWI48\n-\t    (match_operand:SWI48 1 \"register_operand\")\n+\t    (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t    (const_int 1)\n \t    (match_operand:QI 2 \"register_operand\"))\n \t   (const_int 0)])\n@@ -19730,7 +19730,7 @@ (define_split\n (define_insn_and_split \"*bt<mode>_setcqi\"\n   [(set (subreg:SWI48 (match_operand:QI 0 \"register_operand\") 0)\n         (zero_extract:SWI48\n-         (match_operand:SWI48 1 \"register_operand\")\n+         (match_operand:SWI48 1 \"nonimmediate_operand\")\n          (const_int 1)\n          (match_operand:QI 2 \"register_operand\")))\n    (clobber (reg:CC FLAGS_REG))]\n@@ -19750,7 +19750,7 @@ (define_insn_and_split \"*bt<mode>_setncqi\"\n \t(and:QI\n \t (not:QI\n \t  (subreg:QI\n-\t   (lshiftrt:SWI48 (match_operand:SWI48 1 \"register_operand\")\n+\t   (lshiftrt:SWI48 (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t\t\t   (match_operand:QI 2 \"register_operand\")) 0))\n \t (const_int 1)))\n    (clobber (reg:CC FLAGS_REG))]\n@@ -19768,7 +19768,7 @@ (define_insn_and_split \"*bt<mode>_setnc<mode>\"\n   [(set (match_operand:SWI48 0 \"register_operand\")\n \t(and:SWI48\n \t (not:SWI48\n-\t  (lshiftrt:SWI48 (match_operand:SWI48 1 \"register_operand\")\n+\t  (lshiftrt:SWI48 (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t\t\t  (match_operand:QI 2 \"register_operand\")))\n \t (const_int 1)))\n    (clobber (reg:CC FLAGS_REG))]\n@@ -19789,7 +19789,7 @@ (define_insn_and_split \"*bt<mode>_setncqi_2\"\n   [(set (match_operand:QI 0 \"register_operand\")\n \t(eq:QI\n \t  (zero_extract:SWI48\n- \t    (match_operand:SWI48 1 \"register_operand\")\n+\t    (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t    (const_int 1)\n \t    (match_operand:QI 2 \"register_operand\"))\n \t  (const_int 0)))\n@@ -19808,11 +19808,11 @@ (define_insn_and_split \"*bt<mode>_setncqi_2\"\n (define_insn_and_split \"*bt<mode>_setc<mode>_mask\"\n   [(set (match_operand:SWI48 0 \"register_operand\")\n \t(zero_extract:SWI48\n- \t  (match_operand:SWI48 1 \"register_operand\")\n+\t  (match_operand:SWI48 1 \"nonimmediate_operand\")\n \t  (const_int 1)\n \t  (subreg:QI\n-\t    (and:SWI48\n-\t      (match_operand:SWI48 2 \"register_operand\")\n+\t    (and\n+\t      (match_operand 2 \"int248_register_operand\")\n \t      (match_operand 3 \"const_int_operand\")) 0)))\n    (clobber (reg:CC FLAGS_REG))]\n   \"TARGET_USE_BT\ndiff --git a/gcc/testsuite/gcc.target/i386/bt-8.c b/gcc/testsuite/gcc.target/i386/bt-8.c\nnew file mode 100644\nindex 00000000000..3cd75c850b4\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/i386/bt-8.c\n@@ -0,0 +1,10 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -mtune=core2\" } */\n+\n+_Bool mask_get_flag(long mask, int offset)\n+{\n+  return mask & 1ul << (offset % (__SIZEOF_LONG__ * __CHAR_BIT__));\n+}\n+\n+/* { dg-final { scan-assembler \"bt\\[lq\\]\\[ \\t\\]\" } } */\n+/* { dg-final { scan-assembler-not \"sal\\[lq\\]\\[ \\t\\]\" } } */\n",
    "prefixes": [
        "pushed"
    ]
}