RE: [PATCH] x86: Update cpuid.h to pass leaf to __get_cpuid_max

"Liu, Hongtao" <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <DS4PPF240F42FB7177B3406B9A7F5A3A4D5E5D12@DS4PPF240F42FB7.namprd11.prod.outlook.com>

> -----Original Message-----
> From: H.J. Lu <[email protected]>
> Sent: Friday, August 7, 2026 4:30 PM
> To: Liu, Hongtao <[email protected]>
> Cc: Hongtao Liu <[email protected]>; [email protected]; GCC
> Patches <[email protected]>; Uros Bizjak <[email protected]>; Jiang,
> Haochen <[email protected]>
> Subject: [PATCH] x86: Update cpuid.h to pass leaf to __get_cpuid_max
> 
> On Fri, Aug 7, 2026 at 4:13 PM H.J. Lu <[email protected]> wrote:
> >
> > On Fri, Aug 7, 2026 at 3:14 PM Liu, Hongtao <[email protected]>
> wrote:
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: H.J. Lu <[email protected]>
> > > > Sent: Friday, August 7, 2026 2:51 PM
> > > > To: Hongtao Liu <[email protected]>
> > > > Cc: [email protected]; GCC Patches <[email protected]>;
> > > > Uros Bizjak <[email protected]>; Liu, Hongtao
> > > > <[email protected]>; Jiang, Haochen <[email protected]>
> > > > Subject: Re: [PATCH] tree-vect.h: Compile check_vect with -O0
> > > >
> > > > On Fri, Aug 7, 2026 at 2:19 PM Hongtao Liu <[email protected]>
> wrote:
> > > > >
> > > > > On Fri, Aug 7, 2026 at 10:59 AM H.J. Lu <[email protected]> wrote:
> > > > > >
> > > > > > On Fri, Aug 7, 2026 at 6:12 AM H.J. Lu <[email protected]> wrote:
> > > > > > >
> > > > > > > commit 44cc8e5718efd0cc1ef57c68052dbe33b047f158
> > > > > > > Author: Ewan <[email protected]>
> > > > > > > Date:   Tue Mar 17 16:12:15 2026 +0800
> > > > > > >
> > > > > > >     i386: Fix __get_cpuid() and __get_cpuid_count() for
> > > > > > > Centaur/Zhaoxin CPUID range
> > > > > > >
> > > > > > > caused many regressions, like
> > > > > > >
> > > > > > > FAIL: gcc.dg/vect/vect-100.c scan-tree-dump-not optimized
> > > > > > > "Invalid
> > > > sum"
> > > > > > >
> > > > > > > on Linux/x86-64 with -m32.  The commit above changed
> > > > > > > __get_cpuid_count which is used by check_vect in tree-vect.h.
> > > > > > > When GCC tried to vectorize check_vect, it outputted
> > > > > > >
> > > > > > > __attribute__((noinline))
> > > > > > > void check_vect ()
> > > > > > > {
> > > > > > > ...
> > > > > > > ;;   Invalid sum of incoming counts 966367640 (estimated locally,
> freq
> > > > > > > 0.9000), should be 719407024 (estimated locally, freq
> > > > > > > 0.6700)
> > > > > > >
> > > > > > > which failed
> > > > > > >
> > > > > > > /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized"
> > > > > > > } } */
> > > > > > >
> > > > > > > Compile check_vect with -O0 to avoid it.
> > > > > > >
> > > > > > > * gcc.dg/vect/tree-vect.h (check_vect): Compile with -O0.
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > H.J.
> > > > > >
> > > > > > This fixes:
> > > > > >
> > > > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126697
> > > > >
> > > > > Can we use
> > > > >
> > > > > unsigned int __ext = __leaf & 0xC0000000;
> > > > >
> > > > > Assume it can also support zhaoxin's maximum secondary extended
> > > > > level(0xC0000000);?
> > > >
> > > > Or we can fold it into __get_cpuid_max.
> > > That would be better, then we don't need 2 duplicated parts in
> > > __get_cpuid and __get_cpuid_count
> > >
> >
> > Should it be reverted for now and reimplement it in __get_cpuid_max?
> >
> 
> Or this patch.
@Ewanhai Could you help confirm if this patch can also address the issue for Centaur/Zhaoxin CPUID range?


> 
> --
> H.J.
> ---
> commit 44cc8e5718efd0cc1ef57c68052dbe33b047f158
> Author: Ewan <[email protected]>
> Date:   Tue Mar 17 16:12:15 2026 +0800
> 
>     i386: Fix __get_cpuid() and __get_cpuid_count() for Centaur/Zhaoxin CPUID
> ra nge
> 
> caused many regressions, like
> 
> FAIL: gcc.dg/vect/vect-100.c scan-tree-dump-not optimized "Invalid sum"
> 
> on Linux/x86-64 with -m32.  The commit above changed __get_cpuid_count
> which is used by check_vect in tree-vect.h.  When GCC tried to vectorize
> check_vect, it outputted
> 
> __attribute__((noinline))
> void check_vect ()
> {
> ...
> ;;   Invalid sum of incoming counts 966367640 (estimated locally, freq
> 0.9000),
> should be 719407024 (estimated locally, freq 0.6700)
> 
> which failed
> 
> /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> 
> Change __get_cpuid and __get_cpuid_count to pass the leaf argument directly
> to __get_cpuid_max and apply 0xC0000000 mask before passing it to CPUID.
> 
> PR testsuite/126697
> * config/i386/cpuid.h (__get_cpuid_max): Rename the first argument to
> __leaf and apply 0xC0000000 mask before passing it to CPUID.
> (__get_cpuid): Pass __leaf to __get_cpuid_max.
> (__get_cpuid_count): Likewise.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.