Hi Rene,

on 2024/5/31 22:57, Rene Rebe wrote:
> Hi Kewen,
> 
> thank you for your reply.
> 
>> on 2024/3/8 19:33, Rene Rebe wrote:
>>> This might not be the best timing -short before a major release-,
>>> however, Sam just commented on the bug I filled years ago [1], so here
>>> we go:
>>>
>>> Glibc uses .machine to determine assembler optimizations to use.
>>> However, since reworking the rs6000 .machine output selection in
>>> commit e154242724b084380e3221df7c08fcdbd8460674 22 May 2019, G5 as
>>> well as Cell, and even power4 w/ -maltivec currently resulted in
>>> power7. Mask _ALTIVEC away as the .machine selection already did for
>>> GFX and GPOPT.
>>
>> Thanks for fixing, this fix looks reasonable to me, OPTION_MASK_ALTIVEC
>> is a part of POWERPC_7400_MASK so any specified cpu type which has this
>> POWERPC_7400_MASK by default and isn't handled early in function
>> rs6000_machine_from_flags can suffer from this issue.
>>
>>>
>>> powerpc64-t2-linux-gnu-gcc  test.c -S -o - -mcpu=G5
>>>     .file   "test.c"
>>>     .machine power7
>>>     .abiversion 2
>>>     .section        ".text"
>>>     .ident  "GCC: (GNU) 10.2.0"
>>>     .section        .note.GNU-stack,"",@progbits
>>>
>>
>> Nit: Could you also add one test case for this?
>>
>> btw, -mdejagnu-cpu=G5 can force the cpu type in dg-options.
> 
> It took me a while to allocate enough time to study dejagnu and write
> a suitable test, I hope this suits your needs:
> 
> --- ./gcc/testsuite/gcc.target/powerpc/pr97367.c.vanilla      2024-05-30 
> 18:26:29.839784279 +0200
> +++ ./gccc/testsuite/gcc.target/powerpc/pr97367.c     2024-05-30 
> 18:20:34.873818482 +0200
> @@ -0,0 +1,5 @@
> +/* { dg-do compile } */
> +/* { dg-require-effective-target lp64 } */

Nit: I think this require-effective-target line isn't needed.

> +/* { dg-options "-S -mcpu=G5" } */

"dg-do compile" ensures "Compile with ‘-S’ to produce an assembly
code file.", so "-S" is redundant.  As hinted before, we want
-mdejagnu-cpu=G5 here rather than -mcpu=G5 because for some old
versions of dejagnu the command line arguments you set in RUNTESTFLAGS
will override the one set in dg-option, -mdejagnu-cpu= is one internal
option only for test suite (also powerpc specific).

Nit: I prefer to have one dummy function here to avoid some
possible failure if users specify some options which forbids
an empty translation unit.  Maybe something like:

int dummy ()
{
  return 0;
}

> +
> +/* { dg-final { scan-assembler "power4" } } */
> 
> I double checked it works and fails as expected.
> 
>>> We ship this in T2/Linux [2] since 2020 and it is tested on G5, Cell
>>> and Power8.
>>>
>>> Signed-of-by: René Rebe <r...@exactcode.de>
>>>
>>> [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97367
>>> [2] https://t2sde.org
>>>
>>> --- gcc-11.1.0-RC-20210423/gcc/config/rs6000/rs6000.cc.vanilla      
>>> 2021-04-25 22:57:16.964223106 +0200
>>> +++ gcc-11.1.0-RC-20210423/gcc/config/rs6000/rs6000.cc      2021-04-25 
>>> 22:57:27.193223841 +0200
>>> @@ -5765,7 +5765,7 @@
>>>    HOST_WIDE_INT flags = rs6000_isa_flags;
>>>  
>>>    /* Disable the flags that should never influence the .machine selection. 
>>>  */
>>> -  flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | 
>>> OPTION_MASK_ISEL);
>>> +  flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | 
>>> OPTION_MASK_ALTIVEC | OPTION_MASK_ISEL);
>>
>> Nit: This line is too long and needs re-format.
> 
> While I don't really find ~100 chars too long for modern standards,

It's required by https://gcc.gnu.org/codingconventions.html#C_Formatting
and there is one script for the check contrib/check_GNU_style.sh,
as https://gcc.gnu.org/contribute.html#standards.

BR,
Kewen

> I'm happy to line break that for you once the above test is approved.
> 
> Thank you so much,
> 
>       René
> 

Reply via email to