From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com [IPv6:2607:f8b0:4864:20::f30]) by sourceware.org (Postfix) with ESMTPS id B773C3857C60 for ; Fri, 25 Jun 2021 07:50:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B773C3857C60 Received: by mail-qv1-xf30.google.com with SMTP id m15so4713728qvc.9 for ; Fri, 25 Jun 2021 00:50:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=P77jc8hFNGaaRCvfBD1H2kR5ebC8VpCIey/R8T451XI=; b=ac2NSSbu2jMRz/ldKT3MbleT8IGlvBd7jdU9bBBlhRrjFepWZLQvUjqBg/OOotiDAr tQamBN1/EmtAJHBqtTAsAbIw7jOOMsoxLiOQonXTX47hHrL/g0ZwrIGinezioaYYxTJD PD5VqS7AEtKV4OiLYFe4pqGemTiduG/YVHBGME9KW/P9Ya61BrTehvXmggagxGpFPHml ZVdvEfeq1GZ65OY7/O8qYCV4mXJSHVkCKZq40U6NkH4+PtIV1y8ijllg0yAvsCloURjT ucC96pF2gY9LQFiCZ2d/ywJ8YgHUcXfKUT0ZhajmzjWvDlWlnJETAE+tZS28Cyg3NcX3 QJWA== X-Gm-Message-State: AOAM530ytb/+fd4yiH/76HgAasB9l/TOeKT0tLx7dsD0Ubla5AxbODck bs73g745BXKdNZuITAZuf2Aw1w988n6V330gQEI= X-Google-Smtp-Source: ABdhPJwLLuwD1Unoy2lHyk4qec6xeuIs5dGo8U7VK5wrdW6GhJjoRqrIwXvz6o7AHe1nSmssfOP/yCUq08Ol0Uv8lBE= X-Received: by 2002:a0c:85c2:: with SMTP id o60mr9592007qva.30.1624607402962; Fri, 25 Jun 2021 00:50:02 -0700 (PDT) MIME-Version: 1.0 References: <20210624121213.3469943-1-hjl.tools@gmail.com> In-Reply-To: From: Uros Bizjak Date: Fri, 25 Jun 2021 09:49:56 +0200 Message-ID: Subject: Re: [PATCH] x86: Compile CPUID functions with -mgeneral-regs-only To: Hongtao Liu Cc: "H.J. Lu" , Hongtao Liu , "gcc-patches@gcc.gnu.org" Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Jun 2021 07:50:06 -0000 On Fri, Jun 25, 2021 at 4:51 AM Hongtao Liu wrote: > > On Fri, Jun 25, 2021 at 12:13 AM Uros Bizjak via Gcc-patches > wrote: > > > > On Thu, Jun 24, 2021 at 2:12 PM H.J. Lu wrote: > > > > > > CPUID functions are used to detect CPU features. If vector ISAs > > > are enabled, compiler is free to use them in these functions. Add > > > __attribute__ ((target("general-regs-only"))) to CPUID functions > > > to avoid vector instructions. > > > > These functions are intended to be inlined, so how does target > > attribute affect inlining? > I guess w/ -O0. they may not be inlined, that's why H.J adds those > attributes to those functions. The problem is not with these functions, but with surrounding checks for cpuid features. These checks are implemented with logic instructions, and nothing prevents RA from allocating mask registers, and consequently mask insn is emitted. Regarding mentioned functions, cpuid insn pattern has four GPR single-reg constraints, so mask registers can't be allocated here. > pr96814.dump: > 0804aa40
: > 804aa40: 8d 4c 24 04 lea 0x4(%esp),%ecx > ... > 804aa63: 6a 07 push $0x7 > 804aa65: e8 e0 e7 ff ff call 804924a <__get_cpuid_count> > > Also we need to add a target attribute to avx512f_os_support (), and > that would be enough to fix the AVX512 part. > > Moreover, all check functions in below files may also need to deal with: > adx-check.h > aes-avx-check.h > aes-check.h > amx-check.h > attr-nocf-check-1a.c > attr-nocf-check-3a.c > avx2-check.h > avx2-vpop-check.h > avx512bw-check.h > avx512-check.h > avx512dq-check.h > avx512er-check.h > avx512f-check.h > avx512vl-check.h > avx-check.h > bmi2-check.h > bmi-check.h > cf_check-1.c > cf_check-2.c > cf_check-3.c > cf_check-4.c > cf_check-5.c > f16c-check.h > fma4-check.h > fma-check.h > isa-check.h > lzcnt-check.h > m128-check.h > m256-check.h > m512-check.h > mmx-3dnow-check.h > mmx-check.h > pclmul-avx-check.h > pclmul-check.h > pr39315-check.c > rtm-check.h > sha-check.h > spellcheck-options-1.c > spellcheck-options-2.c > spellcheck-options-3.c > spellcheck-options-4.c > spellcheck-options-5.c > sse2-check.h > sse3-check.h > sse4_1-check.h > sse4_2-check.h > sse4a-check.h > sse-check.h > ssse3-check.h > stack-check-11.c > stack-check-12.c > stack-check-17.c > stack-check-18.c > stack-check-19.c > xop-check.h True, but this would just paper over the real problem. Now, it is expected that the user decorates the function that checks CPUID features with the target attribute. I'm not sure if this is OK. Uros.