[{"id":3677982,"web_url":"http://patchwork.ozlabs.org/comment/3677982/","msgid":"<CAMZc-bzTWGTLcqiB7=PNm_8jwjNC-2RDP4CRw759NB_SD2airg@mail.gmail.com>","list_archive_url":null,"date":"2026-04-16T07:53:23","subject":"Re: [PATCH] i386: Fix up TARGET_AVOID_FALSE_DEP_FOR_BMI APX NF\n splitters [PR124892]","submitter":{"id":75791,"url":"http://patchwork.ozlabs.org/api/people/75791/","name":"Hongtao Liu","email":"crazylht@gmail.com"},"content":"On Thu, Apr 16, 2026 at 3:34 PM Jakub Jelinek <jakub@redhat.com> wrote:\n>\n> Hi!\n>\n> The following testcase is miscompiled because the 3\n> TARGET_AVOID_FALSE_DEP_FOR_BMI APX NF splitters use ix86_expand_clear.\n> All other uses of ix86_expand_clear are on either splitters where we know\n> something clobbers flags register or sets it at the end of pattern (so\n> clearly flags register is not live across the pattern) or in\n> define_peephole2 where we explicitly check peep2_regno_dead_p (?, FLAGS_REG).\n> Now, ix86_expand_clear handles right the QI/HImode cases by setting SImode\n> instead and based on TARGET_USE_MOV0 and/or optimize_insn_for_size_p\n> decides whether to use xor reg, reg form or mov $0, reg.\n> Now, for these 3 APX NF splitters there is actually no flags clobber nor set\n> in the pattern and because it is a splitter, we don't know if flags register\n> is live across it (likely yes, otherwise why the APX NF pattern would be\n> used) or not.  So, we can't use ix86_expand_clear which could clobber flags.\n> As the splitters are only SWI48, we don't have to worry about QI/HImode\n> clearing and so IMHO just want to always use the mov $0, reg form by hand.\n> If flags actually isn't live across it, we have\n> ;; Attempt to always use XOR for zeroing registers (including FP modes).\n> (define_peephole2\n>   [(set (match_operand 0 \"general_reg_operand\")\n>         (match_operand 1 \"const0_operand\"))]\n>   \"GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD\n>    && (! TARGET_USE_MOV0 || optimize_insn_for_size_p ())\n>    && peep2_regno_dead_p (0, FLAGS_REG)\"\n>   [(parallel [(set (match_dup 0) (const_int 0))\n>               (clobber (reg:CC FLAGS_REG))])]\n>   \"operands[0] = gen_lowpart (word_mode, operands[0]);\")\n> peephole2 which would turn the mov $0, reg back to xor reg, reg.\n>\n> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n\nOk, thanks.\n\n>\n> 2026-04-16  Jakub Jelinek  <jakub@redhat.com>\n>\n>         PR target/124892\n>         * config/i386/i386.md (clz<mode>2_lzcnt_nf,\n>         <lt_zcnt>_<mode>_nf, popcount<mode>2_nf): Emit explicit\n>         set of (match_dup 0) to (const_int 0) without flags clobber instead of\n>         using ix86_expand_clear.\n>\n>         * gcc.target/i386/apx-pr124892.c: New test.\n>\n> --- gcc/config/i386/i386.md.jj  2026-03-27 10:17:13.854335308 +0100\n> +++ gcc/config/i386/i386.md     2026-04-15 18:35:23.740482534 +0200\n> @@ -21859,11 +21859,12 @@ (define_insn_and_split \"clz<mode>2_lzcnt\n>    \"&& TARGET_AVOID_FALSE_DEP_FOR_BMI && epilogue_completed\n>     && optimize_function_for_speed_p (cfun)\n>     && !reg_mentioned_p (operands[0], operands[1])\"\n> -  [(parallel\n> +  [(set (match_dup 0) (const_int 0))\n> +   (parallel\n>      [(set (match_dup 0)\n>           (clz:SWI48 (match_dup 1)))\n>       (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)])]\n> -  \"ix86_expand_clear (operands[0]);\"\n> +  \"\"\n>    [(set_attr \"prefix_rep\" \"1\")\n>     (set_attr \"type\" \"bitmanip\")\n>     (set_attr \"mode\" \"<MODE>\")])\n> @@ -22020,11 +22021,12 @@ (define_insn_and_split \"<lt_zcnt>_<mode>\n>    \"&& TARGET_AVOID_FALSE_DEP_FOR_BMI && epilogue_completed\n>     && optimize_function_for_speed_p (cfun)\n>     && !reg_mentioned_p (operands[0], operands[1])\"\n> -  [(parallel\n> +  [(set (match_dup 0) (const_int 0))\n> +   (parallel\n>      [(set (match_dup 0)\n>           (unspec:SWI48 [(match_dup 1)] LT_ZCNT))\n>       (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)])]\n> -  \"ix86_expand_clear (operands[0]);\"\n> +  \"\"\n>    [(set_attr \"type\" \"<lt_zcnt_type>\")\n>     (set_attr \"prefix_0f\" \"1\")\n>     (set_attr \"prefix_rep\" \"1\")\n> @@ -22666,11 +22668,12 @@ (define_insn_and_split \"popcount<mode>2_\n>    \"&& TARGET_AVOID_FALSE_DEP_FOR_BMI && epilogue_completed\n>     && optimize_function_for_speed_p (cfun)\n>     && !reg_mentioned_p (operands[0], operands[1])\"\n> -  [(parallel\n> +  [(set (match_dup 0) (const_int 0))\n> +   (parallel\n>      [(set (match_dup 0)\n>           (popcount:SWI48 (match_dup 1)))\n>       (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)])]\n> -  \"ix86_expand_clear (operands[0]);\"\n> +  \"\"\n>    [(set_attr \"prefix_rep\" \"1\")\n>     (set_attr \"type\" \"bitmanip\")\n>     (set_attr \"mode\" \"<MODE>\")])\n> --- gcc/testsuite/gcc.target/i386/apx-pr124892.c.jj     2026-04-15 18:44:16.052606262 +0200\n> +++ gcc/testsuite/gcc.target/i386/apx-pr124892.c        2026-04-15 18:44:50.020039751 +0200\n> @@ -0,0 +1,20 @@\n> +/* PR target/124892 */\n> +/* { dg-do run { target { apxf && { lzcnt && { ! ia32 } } } } } */\n> +/* { dg-options \"-O2 -frename-registers\" } */\n> +\n> +[[gnu::noipa, gnu::target (\"apxf\"), gnu::target (\"lzcnt\")]] char\n> +foo (unsigned u)\n> +{\n> +  return __builtin_stdc_bit_ceil (u);\n> +}\n> +\n> +int\n> +main ()\n> +{\n> +  if (!__builtin_cpu_supports (\"apxf\"))\n> +    return 0;\n> +  if (!__builtin_cpu_supports (\"lzcnt\"))\n> +    return 0;\n> +  if (foo (7) != 8)\n> +    __builtin_abort ();\n> +}\n>\n>         Jakub\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 (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=A6nqTxlm;\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 (2048-bit key,\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=A6nqTxlm","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=209.85.219.47"],"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 4fx9JR5BT6z1yG9\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 17:54:15 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A7D114BA2E07\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 07:54:12 +0000 (GMT)","from mail-qv1-f47.google.com (mail-qv1-f47.google.com\n [209.85.219.47])\n by sourceware.org (Postfix) with ESMTPS id 4F5924BA2E3E\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 07:53:36 +0000 (GMT)","by mail-qv1-f47.google.com with SMTP id\n 6a1803df08f44-8a032383008so85499146d6.1\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 00:53:36 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org A7D114BA2E07","OpenDKIM Filter v2.11.0 sourceware.org 4F5924BA2E3E"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 4F5924BA2E3E","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 4F5924BA2E3E","ARC-Seal":["i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1776326016; cv=pass;\n b=f1M8q843cxXTAhxutKuL5a6DC08e+EviRCOHkO+dcBQ4rrJHW7VtPDvAaAGmgoouTWcZey0gH42zZ7JIA+VzY1MwkiviYP+7g3hea4GlF4KtC7nJyaL5xWiTGHy0ustOIIneHuE+US5OFeLHlukBMVw6wubctvO8DOiMuX1qE9g=","i=1; a=rsa-sha256; t=1776326016; cv=none;\n d=google.com; s=arc-20240605;\n b=M5SMKPdsDVXY9oK5V4I/7owdtq/lC+1QwTZL/F5TJo8tgeDYbngdTMyXCEUFQQLzgu\n yTfQrfsT0Flsr5289FdXnU9zipJoyCnCFcSHm/htNFJnRGqJ3ftDw3vls047PlBWtGaJ\n 7rR45hGA/iM8XNbRkHvXsfcJVUmXz3MJpmI7qYHV9L7moDILYoesl7MbJHJ5c9c/sPlp\n choOV/tCV/QfPX0F1nNuT4CT8kNMzOE7Vu21KbBT98Zhv3yIEYGy0dL2S0JFfJ+2Z5gf\n mZfsCg4/20TVnGi4xPaOCI9lUTSY17/f17V8bAxMVV++jhKMsCFxrRb1wc5G4dn03NzU\n ewgQ=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776326016; c=relaxed/simple;\n bh=PBo2pNlbVXxnOeF+rcAqyUuWwoVumjYX6qZDCvcVF6w=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=qZpivzhrjbz49/w34PP63mh0YV034VmCuWVOts6b2Z6Ex21FLC8vMoqG5/Ixfow3RzGiox8LqDP1EU6kTICusdld0X5haEmuwHgagcoqtnj6sSF8IZ0up027WqypGfy0j5pJBuzqpEMv+rBdWzx4zX1/H0XHH8Dsbg2WTUMlOmQ=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:dkim-signature;\n bh=/szR6ONreW8wdEmMx6ccwbV1TFo3JSmOJmMhX9O3gl8=;\n fh=nzivDl9Doke2dvJC9ELr9Lp8OGpx//AsQZvCv5Y0xDs=;\n b=Wr0fD7fBPigSTfeB6UKat3ANCFKfjf8LrAE4f+6N5qTsulM4RYdx3gRF0vDJs4qDWb\n mxkqWyINstgUeBMOU+sMPYqfxR3PFw66XIsat9qNmUZ2d5p5mfBEF5uaj/hxW7ZwO+rL\n GPp5HmrWlOKctjj7MYFj/oR40iwN1NBx1MdRPjKMXYIrBY37Bss8IR2gaYJhHhLUDNIz\n LyB3eidk6jmjJE4AFysHSV7iK/VUSYn51O5vqToCN2sNhNZ8K0ImAD6LM/2gI3wHcrN6\n mrjMUrs5BxsjxDOLQQl1s/V6Wv6PAtR9+f3QkZQitbJXP6KSssNSnZXrnuyHBslxAXuF\n hoBQ==; 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=1776326016; x=1776930816; darn=gcc.gnu.org;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:from:to:cc:subject:date\n :message-id:reply-to;\n bh=/szR6ONreW8wdEmMx6ccwbV1TFo3JSmOJmMhX9O3gl8=;\n b=A6nqTxlme7uRK/BGDqz36T0N9gYvvllyHYf8VQsA9UCCQRRDIx/ld9GaV/ibux92en\n w9LYXFXkZSv1J3f/Zd20XQ20E3rRqU0C4vJwybQix3yGIcb3MXGE4PTh+Ln+6MjYVg9G\n 2OiTNvPxX/rEyOWw/ku0sl22rpEWQxa/n/QYjg2mNOpWr0/IDDWDSYbnTdu2ZPi5SNq0\n c07RD/y5BSdbAWGnsRhwUcRKvoMlcxaXi10J6EZqLkJtcWsZKNCB68GJoAEd48Oxxi6i\n 5tG9KMT3P/1ytFMatvaYbUfZYf4ocHkUQzsmdolX7DC1OLo35s4Pyohsye5yHMLrl+z2\n ExYA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776326016; x=1776930816;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=/szR6ONreW8wdEmMx6ccwbV1TFo3JSmOJmMhX9O3gl8=;\n b=IvbZRPqWttjZgDpx4AIxf3YoVRabuO6ypgcnZtxvdXClPP6Wd/jYW+LtdxTqJBDenH\n T67m5saViCHsjP4db5+1Y1Uc4wgjXKq//OWj+yLvx98H+3AZXF4moOsxDOFtLaZr5LML\n ZOVDuxpy63r9YhArEUQpLbd2MN9N15MZtzCuS8oUi92tdSAjqGFGt1XS1YNqEW4FIclR\n V+SX+ZOztPcmRsaRXI0MBOi08vIm0unVMKBB2nz2iQV6NnUVlRMgcgurFMFU5ypBqoWF\n otwwgMPu6B6R5bLJ+Cpxn1aOjRIsMznN8HFmEtstydxr0FudGUpB9hSYxUG+pOoUlw8p\n FrAQ==","X-Forwarded-Encrypted":"i=1;\n AFNElJ+y3hsnl2ScVZifK5ttxAqzrIsa8oR8LehLzExUoeXnvwaVymMXtaGUgCXJ/L2Nr3AvWPZUHOZQdKNZ5w==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YxojfykdxWj04o7F/NxtXJV4jHNyJC5JbhNiq70TJPDvURWxb2o\n YDJLVc+Qh4KTtoA89fPfsdQ4QQreIDYL3Ld70Kx4iWNEeDcj2+l5IZHBb0XJt/OUbCAZVmWb9+8\n pg2BJMNHRALI6AiSlf+KMk+e4/SWjcU6ZaQKw1/4=","X-Gm-Gg":"AeBDiesaCs0+pLI34B0UPBepi7KcmXAXP879yWnh3ERKXW3paAgvYMTUi4WuY6fc0MZ\n Gh3C8/Su3fMp2pzfsBAkCrhD1CSz3z2HifnWVajaNGG6RuKvrGEKpNlAlI1qZx9pgaarfTSmMCx\n 2B5Upp9FfBCh+30C3nXKQ9B1iTd4oXBJOIhVntMk1vWMW87sqM3AdSO8X1RklLkLJ9XFrMvtQfX\n qXcJg8NfE6oF8yEnMggXrAoJXxPMI8r0aZkdCEQiru32NEBviatM59TTf6ErXgNx9oRtjKMiuSy\n UKdmMZgL","X-Received":"by 2002:a05:6214:29c4:b0:89c:d7e3:7f01 with SMTP id\n 6a1803df08f44-8ac862f1472mr379706596d6.48.1776326015675; Thu, 16 Apr 2026\n 00:53:35 -0700 (PDT)","MIME-Version":"1.0","References":"<aeCQ_tJTTwe51o3B@tucnak>","In-Reply-To":"<aeCQ_tJTTwe51o3B@tucnak>","From":"Hongtao Liu <crazylht@gmail.com>","Date":"Thu, 16 Apr 2026 15:53:23 +0800","X-Gm-Features":"AQROBzBmFw4UUp6RpdP3xRWNamDmgSEdHxKGA4PfT-YO7nQgEqKc3z3dNSa9voY","Message-ID":"\n <CAMZc-bzTWGTLcqiB7=PNm_8jwjNC-2RDP4CRw759NB_SD2airg@mail.gmail.com>","Subject":"Re: [PATCH] i386: Fix up TARGET_AVOID_FALSE_DEP_FOR_BMI APX NF\n splitters [PR124892]","To":"Jakub Jelinek <jakub@redhat.com>","Cc":"Uros Bizjak <ubizjak@gmail.com>, Hongtao Liu <hongtao.liu@intel.com>,\n gcc-patches@gcc.gnu.org","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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"}}]