On Fri, Aug 7, 2026 at 4:40 PM Liu, Hongtao <[email protected]> wrote:
>
>
>
> > -----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?

MayShao,  can you help with this?

Thanks.

>
> >
> > --
> > 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.



-- 
H.J.

Reply via email to