RE: [PATCH] tree-vect.h: Compile check_vect with -O0

"Liu, Hongtao" <[email protected]> Fri, 7 Aug 2026 07:14:34 +0000
Newsgroups gmane.comp.gcc.patches
Message-ID <IA3PR11MB8938FC29B4FD77F478C701E7E5D12@IA3PR11MB8938.namprd11.prod.outlook.com>

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

> 
> --
> H.J.