Hi Andrew,

> On 25 Oct 2024, at 01:10, Andrew Pinski <pins...@gmail.com> wrote:
> 
> On Mon, Jun 3, 2024 at 2:23 AM Andrew Pinski (QUIC)
> <quic_apin...@quicinc.com> wrote:
>> 
>>> -----Original Message-----
>>> From: Andrew Pinski (QUIC) <quic_apin...@quicinc.com>
>>> Sent: Saturday, May 4, 2024 2:03 AM
>>> To: gcc-patches@gcc.gnu.org
>>> Cc: Andrew Pinski (QUIC) <quic_apin...@quicinc.com>
>>> Subject: [PATCH] aarch64: Support multiple variants including
>>> up to 3
>>> 
>>> On some of the Qualcomm's SoC that includes oryon-1 core,
>>> the variant will be different on the cores due to big.little
>>> config. Though the difference between big and little is not
>>> significant enough to have seperate cost/scheduling models
>>> for them and the feature set is the same across all variants.
>>> 
>>> Also on some SoCs, there are 3 variants of the core,
>>> big.middle.little so this increases the support there for up to 3
>>> cores and 3 variants in the original parsing loop but it does not
>>> change the support for max of 2 different cores.
>>> 
>>> After this patch and the patch that adds oryon-1, -
>>> mcpu=native works on the SoCs I am working with.
>>> 
>>> Bootstrapped and tested on aarch64-linux-gnu with no
>>> regressions.
>> 
>> Ping?
> 
> Ping?

Ok, sorry for the delay.
Thanks,
Kyrill


> 
> Thanks,
> Andrew
> 
>> 
>>> 
>>> gcc/ChangeLog:
>>> 
>>>      * config/aarch64/driver-aarch64.cc
>>> (host_detect_local_cpu): Support
>>>      3 cores and 3 variants. If there is one core but multiple
>>> variant,
>>>      then treat the variant as being all.
>>> 
>>> gcc/testsuite/ChangeLog:
>>> 
>>>      * gcc.target/aarch64/cpunative/info_25: New file.
>>>      * gcc.target/aarch64/cpunative/info_26: New file.
>>>      * gcc.target/aarch64/cpunative/native_cpu_25.c: New
>>> test.
>>>      * gcc.target/aarch64/cpunative/native_cpu_26.c: New
>>> test.
>>> 
>>> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
>>> ---
>>> gcc/config/aarch64/driver-aarch64.cc          | 14 ++++++----
>>> .../gcc.target/aarch64/cpunative/info_25      | 17
>>> ++++++++++++
>>> .../gcc.target/aarch64/cpunative/info_26      | 26
>>> +++++++++++++++++++
>>> .../aarch64/cpunative/native_cpu_25.c         | 11 ++++++++
>>> .../aarch64/cpunative/native_cpu_26.c         | 11 ++++++++
>>> 5 files changed, 74 insertions(+), 5 deletions(-)  create mode
>>> 100644 gcc/testsuite/gcc.target/aarch64/cpunative/info_25
>>> create mode 100644
>>> gcc/testsuite/gcc.target/aarch64/cpunative/info_26
>>> create mode 100644
>>> gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_25.c
>>> create mode 100644
>>> gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_26.c
>>> 
>>> diff --git a/gcc/config/aarch64/driver-aarch64.cc
>>> b/gcc/config/aarch64/driver-aarch64.cc
>>> index b620351e572..abe6e7df7dc 100644
>>> --- a/gcc/config/aarch64/driver-aarch64.cc
>>> +++ b/gcc/config/aarch64/driver-aarch64.cc
>>> @@ -256,9 +256,9 @@ host_detect_local_cpu (int argc, const
>>> char **argv)
>>>   bool cpu = false;
>>>   unsigned int i = 0;
>>>   unsigned char imp = INVALID_IMP;
>>> -  unsigned int cores[2] = { INVALID_CORE, INVALID_CORE };
>>> +  unsigned int cores[3] = { INVALID_CORE, INVALID_CORE,
>>> INVALID_CORE };
>>>   unsigned int n_cores = 0;
>>> -  unsigned int variants[2] = { ALL_VARIANTS, ALL_VARIANTS };
>>> +  unsigned int variants[3] = { ALL_VARIANTS, ALL_VARIANTS,
>>> ALL_VARIANTS
>>> + };
>>>   unsigned int n_variants = 0;
>>>   bool processed_exts = false;
>>>   aarch64_feature_flags extension_flags = 0; @@ -314,7
>>> +314,7 @@ host_detect_local_cpu (int argc, const char
>>> **argv)
>>>        unsigned cvariant = parse_field (buf);
>>>        if (!contains_core_p (variants, cvariant))
>>>          {
>>> -              if (n_variants == 2)
>>> +           if (n_variants == 3)
>>>                 goto not_found;
>>> 
>>>               variants[n_variants++] = cvariant; @@ -326,7 +326,7
>>> @@ host_detect_local_cpu (int argc, const char **argv)
>>>        unsigned ccore = parse_field (buf);
>>>        if (!contains_core_p (cores, ccore))
>>>          {
>>> -           if (n_cores == 2)
>>> +           if (n_cores == 3)
>>>              goto not_found;
>>> 
>>>            cores[n_cores++] = ccore;
>>> @@ -383,11 +383,15 @@ host_detect_local_cpu (int argc,
>>> const char **argv)
>>>   /* Weird cpuinfo format that we don't know how to handle.
>>> */
>>>   if (n_cores == 0
>>>       || n_cores > 2
>>> -      || (n_cores == 1 && n_variants != 1)
>>>       || imp == INVALID_IMP
>>>       || !processed_exts)
>>>     goto not_found;
>>> 
>>> +  /* If we have one core type but multiple variants, consider
>>> +     that as one variant with ALL_VARIANTS instead.  */  if
>>> (n_cores ==
>>> + 1 && n_variants != 1)
>>> +    variants[0] = ALL_VARIANTS;
>>> +
>>>   /* Simple case, one core type or just looking for the arch. */
>>>   if (n_cores == 1 || arch)
>>>     {
>>> diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_25
>>> b/gcc/testsuite/gcc.target/aarch64/cpunative/info_25
>>> new file mode 100644
>>> index 00000000000..d6e83ccab09
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_25
>>> @@ -0,0 +1,17 @@
>>> +processor    : 0
>>> +BogoMIPS     : 38.40
>>> +Features     : fp asimd evtstrm aes pmull sha1 sha2 crc32
>>> atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop
>>> sha3 sm3 sm4 asimddp sha512 asimdfhm dit uscat ilrcpc flagm
>>> ssbs sb paca pacg dcpodp flagm2 frint i8mm bf16 rng bti ecv
>>> afp rpres
>>> +CPU implementer      : 0x51
>>> +CPU architecture: 8
>>> +CPU variant  : 0x2
>>> +CPU part     : 0x001
>>> +CPU revision : 1
>>> +
>>> +processor    : 1
>>> +BogoMIPS     : 38.40
>>> +Features     : fp asimd evtstrm aes pmull sha1 sha2 crc32
>>> atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop
>>> sha3 sm3 sm4 asimddp sha512 asimdfhm dit uscat ilrcpc flagm
>>> ssbs sb paca pacg dcpodp flagm2 frint i8mm bf16 rng bti ecv
>>> afp rpres
>>> +CPU implementer      : 0x51
>>> +CPU architecture: 8
>>> +CPU variant  : 0x1
>>> +CPU part     : 0x001
>>> +CPU revision : 1
>>> \ No newline at end of file
>>> diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_26
>>> b/gcc/testsuite/gcc.target/aarch64/cpunative/info_26
>>> new file mode 100644
>>> index 00000000000..7631baf3239
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_26
>>> @@ -0,0 +1,26 @@
>>> +processor    : 0
>>> +BogoMIPS     : 38.40
>>> +Features     : fp asimd evtstrm aes pmull sha1 sha2 crc32
>>> atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop
>>> sha3 sm3 sm4 asimddp sha512 asimdfhm dit uscat ilrcpc flagm
>>> ssbs sb paca pacg dcpodp flagm2 frint i8mm bf16 rng bti ecv
>>> afp rpres
>>> +CPU implementer      : 0x51
>>> +CPU architecture: 8
>>> +CPU variant  : 0x2
>>> +CPU part     : 0x001
>>> +CPU revision : 1
>>> +
>>> +processor    : 1
>>> +BogoMIPS     : 38.40
>>> +Features     : fp asimd evtstrm aes pmull sha1 sha2 crc32
>>> atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop
>>> sha3 sm3 sm4 asimddp sha512 asimdfhm dit uscat ilrcpc flagm
>>> ssbs sb paca pacg dcpodp flagm2 frint i8mm bf16 rng bti ecv
>>> afp rpres
>>> +CPU implementer      : 0x51
>>> +CPU architecture: 8
>>> +CPU variant  : 0x1
>>> +CPU part     : 0x001
>>> +CPU revision : 1
>>> +
>>> +processor    : 2
>>> +BogoMIPS     : 38.40
>>> +Features     : fp asimd evtstrm aes pmull sha1 sha2 crc32
>>> atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop
>>> sha3 sm3 sm4 asimddp sha512 asimdfhm dit uscat ilrcpc flagm
>>> ssbs sb paca pacg dcpodp flagm2 frint i8mm bf16 rng bti ecv
>>> afp rpres
>>> +CPU implementer      : 0x51
>>> +CPU architecture: 8
>>> +CPU variant  : 0x2
>>> +CPU part     : 0x001
>>> +CPU revision : 1
>>> \ No newline at end of file
>>> diff --git
>>> a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_25.c
>>> b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_25.
>>> c
>>> new file mode 100644
>>> index 00000000000..05c88a2edc8
>>> --- /dev/null
>>> +++
>>> b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_25.
>>> c
>>> @@ -0,0 +1,11 @@
>>> +/* { dg-do compile { target { { aarch64*-*-linux*} && native } }
>>> } */
>>> +/* { dg-set-compiler-env-var GCC_CPUINFO
>>> +"$srcdir/gcc.target/aarch64/cpunative/info_25" } */
>>> +/* { dg-additional-options "-mcpu=native --save-temps " } */
>>> +
>>> +int main()
>>> +{
>>> +  return 0;
>>> +}
>>> +
>>> +/* { dg-final { scan-assembler {\.arch
>>> +armv8.6-a\+rng\+sm4\+crc\+aes\+sha3\+fp16} } } */
>>> +/* Test that SoC with cores of 2 variants work.  */
>>> diff --git
>>> a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_26.c
>>> b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_26.
>>> c
>>> new file mode 100644
>>> index 00000000000..4eb943d5204
>>> --- /dev/null
>>> +++
>>> b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_26.
>>> c
>>> @@ -0,0 +1,11 @@
>>> +/* { dg-do compile { target { { aarch64*-*-linux*} && native } }
>>> } */
>>> +/* { dg-set-compiler-env-var GCC_CPUINFO
>>> +"$srcdir/gcc.target/aarch64/cpunative/info_26" } */
>>> +/* { dg-additional-options "-mcpu=native --save-temps " } */
>>> +
>>> +int main()
>>> +{
>>> +  return 0;
>>> +}
>>> +
>>> +/* { dg-final { scan-assembler {\.arch
>>> +armv8.6-a\+rng\+sm4\+crc\+aes\+sha3\+fp16} } } */
>>> +/* Test that SoC with cores of 3 variants work.  */
>>> \ No newline at end of file
>>> --
>>> 2.43.0
>> 

Reply via email to