On Thu, 7 Nov 2024 at 19:09, Torbjorn SVENSSON
<torbjorn.svens...@foss.st.com> wrote:
>
>
>
> On 2024-11-07 16:33, Richard Earnshaw (lists) wrote:
> > On 06/11/2024 19:50, Torbjorn SVENSSON wrote:
> >>
> >>
> >> On 2024-11-06 19:06, Richard Earnshaw (lists) wrote:
> >>> On 06/11/2024 13:50, Torbjorn SVENSSON wrote:
> >>>>
> >>>>
> >>>> On 2024-11-06 14:04, Richard Earnshaw (lists) wrote:
> >>>>> On 06/11/2024 12:23, Torbjorn SVENSSON wrote:
> >>>>>>
> >>>>>>
> >>>>>> On 2024-11-06 12:26, Richard Earnshaw (lists) wrote:
> >>>>>>> On 06/11/2024 07:44, Christophe Lyon wrote:
> >>>>>>>> On Wed, 6 Nov 2024 at 07:20, Torbjörn SVENSSON
> >>>>>>>> <torbjorn.svens...@foss.st.com> wrote:
> >>>>>>>>>
> >>>>>>>>> While the regression was reported on GCC15, I'm sure that same
> >>>>>>>>> regression will be seen on GCC14 when it's tested in the
> >>>>>>>>> arm-linux-gnueabihf configuration.
> >>>>>>>>>
> >>>>>>>>> Ok for trunk and releases/gcc-14?
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>>
> >>>>>>>>> This fixes reported regression at
> >>>>>>>>> https://linaro.atlassian.net/browse/GNU-1407.
> >>>>>>>>>
> >>>>>>>>> gcc/testsuite/ChangeLog:
> >>>>>>>>>
> >>>>>>>>>             * gcc.target/arm/pr68620.c: Use effective-target arm_fp.
> >>>>>>>>>
> >>>>>>>>> Signed-off-by: Torbjörn SVENSSON <torbjorn.svens...@foss.st.com>
> >>>>>>>>> ---
> >>>>>>>>>      gcc/testsuite/gcc.target/arm/pr68620.c | 4 +++-
> >>>>>>>>>      1 file changed, 3 insertions(+), 1 deletion(-)
> >>>>>>>>>
> >>>>>>>>> diff --git a/gcc/testsuite/gcc.target/arm/pr68620.c 
> >>>>>>>>> b/gcc/testsuite/gcc.target/arm/pr68620.c
> >>>>>>>>> index 6e38671752f..1ed84f4ac75 100644
> >>>>>>>>> --- a/gcc/testsuite/gcc.target/arm/pr68620.c
> >>>>>>>>> +++ b/gcc/testsuite/gcc.target/arm/pr68620.c
> >>>>>>>>> @@ -1,8 +1,10 @@
> >>>>>>>>>      /* { dg-do compile } */
> >>>>>>>>>      /* { dg-skip-if "-mpure-code supports M-profile without Neon 
> >>>>>>>>> only" { *-*-* } { "-mpure-code" } } */
> >>>>>>>>>      /* { dg-require-effective-target arm_arch_v7a_ok } */
> >>>>>>>>> -/* { dg-options "-mfp16-format=ieee -mfpu=auto -mfloat-abi=softfp" 
> >>>>>>>>> } */
> >>>>>>>>> +/* { dg-require-effective-target arm_fp_ok } */
> >>>>>>>>> +/* { dg-options "-mfp16-format=ieee -mfpu=auto" } */
> >>>>>>>>>      /* { dg-add-options arm_arch_v7a } */
> >>>>>>>>> +/* { dg-add-options arm_fp } */
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>> So... this partially reverts your previous patch (bringing back
> >>>>>>>> arm_fp). What is the problem now?
> >>>>>>>>
> >>>>>>>
> >>>>>>> Yeah, that sounds wrong.  arm_fp_ok tries to find options to add to 
> >>>>>>> the basic testsuite options, but it can't be combined with 
> >>>>>>> arm_arch_v7a as that picks a totally different set of flags for the 
> >>>>>>> architecture.
> >>>>>>
> >>>>>> The problem is that for arm-linux-gnueabihf, we cannot use 
> >>>>>> -mfloat-abi=softfp as there is no multilib available for that ABI, or 
> >>>>>> at least that's my interpretation of below error message.
> >>>>>>
> >>>>>> This is the output from the CI run:
> >>>>>>
> >>>>>> Executing on host: 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/bin/armv8l-unknown-linux-gnueabihf-gcc
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/gcc.target/arm/pr68620.c
> >>>>>>     -fdiagnostics-plain-output   -mfp16-format=ieee -mfpu=auto 
> >>>>>> -mfloat-abi=softfp -mcpu=unset -march=armv7-a+fp -S -o pr68620.s 
> >>>>>> (timeout = 600)
> >>>>>> spawn -ignore SIGHUP 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/bin/armv8l-unknown-linux-gnueabihf-gcc
> >>>>>>  
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/gcc.target/arm/pr68620.c
> >>>>>>  -fdiagnostics-plain-output -mfp16-format=ieee -mfpu=auto 
> >>>>>> -mfloat-abi=softfp -mcpu=unset -march=armv7-a+fp -S -o pr68620.s
> >>>>>> In file included from /usr/include/features.h:510,
> >>>>>>                     from 
> >>>>>> /usr/include/arm-linux-gnueabihf/bits/libc-header-start.h:33,
> >>>>>>                     from /usr/include/stdint.h:26,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/stdint.h:11,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/arm_fp16.h:34,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/arm_neon.h:41,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/gcc.target/arm/pr68620.c:7:
> >>>>>> /usr/include/arm-linux-gnueabihf/gnu/stubs.h:7:11: fatal error: 
> >>>>>> gnu/stubs-soft.h: No such file or directory
> >>>>>> compilation terminated.
> >>>>>> compiler exited with status 1
> >>>>>> output is:
> >>>>>> In file included from /usr/include/features.h:510,
> >>>>>>                     from 
> >>>>>> /usr/include/arm-linux-gnueabihf/bits/libc-header-start.h:33,
> >>>>>>                     from /usr/include/stdint.h:26,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/stdint.h:11,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/arm_fp16.h:34,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/arm_neon.h:41,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/gcc.target/arm/pr68620.c:7:
> >>>>>> /usr/include/arm-linux-gnueabihf/gnu/stubs.h:7:11: fatal error: 
> >>>>>> gnu/stubs-soft.h: No such file or directory
> >>>>>> compilation terminated.
> >>>>>>
> >>>>>> comp_output (pruned) is:
> >>>>>> In file included from /usr/include/features.h:510,
> >>>>>>                     from 
> >>>>>> /usr/include/arm-linux-gnueabihf/bits/libc-header-start.h:33,
> >>>>>>                     from /usr/include/stdint.h:26,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/stdint.h:11,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/arm_fp16.h:34,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/armv8l-unknown-linux-gnueabihf/lib/gcc/armv8l-unknown-linux-gnueabihf/15.0.0/include/arm_neon.h:41,
> >>>>>>                     from 
> >>>>>> /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/gcc.target/arm/pr68620.c:7:
> >>>>>> /usr/include/arm-linux-gnueabihf/gnu/stubs.h:7:11: fatal error: 
> >>>>>> gnu/stubs-soft.h: No such file or directory
> >>>>>> compilation terminated.
> >>>>>>
> >>>>>> FAIL: gcc.target/arm/pr68620.c (test for excess errors)
> >>>>>>
> >>>>>> So, if we cannot use arm_fp, what can we use instead to check if it 
> >>>>>> needs -mfloat-abi=softfp or -mfloat-abi=hard?
> >>>>>>
> >>>>>> Kind regards,
> >>>>>> Torbjörn
> >>>>>
> >>>>> Ah, got you.  Interestingly my ubuntu armhf instalation has booth 
> >>>>> stubs-soft.h and stubs-hard.h even though it's a hard-float 
> >>>>> environment, so I wouldn't see this error.  I'm not sure if that's 
> >>>>> something ubuntu has fixed, or whether it's because the tcwg install is 
> >>>>> slightly non-standard.
> >>>>>
> >>>>> Technically this isn't a multilib - because we aren't linking, but I 
> >>>>> see where you're coming from.  I need to think a bit about this one.  
> >>>>> What we really need is some way of checking if stdint.h works in a 
> >>>>> soft-fp environment; we might need a new check for this in 
> >>>>> target-supports.exp.
> >>>>
> >>>> An alternative is to add an entry in the list that is 
> >>>> arm_arch_v7a_softfp and then do dg-require-effective-target on it, but 
> >>>> then it will not be tested for HF only-targets. Is this a good enough 
> >>>> compromise? We could also go the other way and do the "hard" way, but 
> >>>> either way, one of them would not be tested in that case.
> >>>>
> >>>> Let me know what you think.
> >>>>
> >>>> It's the same problem in the attr-neon* patch that I have in parallell 
> >>>> to this one, but I'll wait for this one to have a way forward before 
> >>>> working more on that one.
> >>>>
> >>>> Kind regards,
> >>>> Torbjörn
> >>>
> >>> I think the attached is probably a better approach here.  It tries to 
> >>> find just the correct ABI flags to add while remaining compatible with 
> >>> the platform.
> >>>
> >>> It's not perfect: the compiler doesn't really support -mfloat-abi=softfp 
> >>> correctly when generating thumb1 code, but that's a different bug.
> >>
> >> I think I'm missing something here.
> >>
> >> As far as I can tell, your approach is more or less identical to the 
> >> arm_fp_ok check. The only difference is that you are including stdint.h, 
> >> while arm_fp_ok checks that __ARM_FP is defined. From my point of view, 
> >> they are both a bit flawed here.
> >> Wouldn't it be better to just add the include of stdint.h to arm_fp_ok?
> >
> > No, because we can use arm_fp_ok when we don't intend to include any 
> > headers, which makes it more compatible with a lot of tests.
>
> Ah, of course. I didn't think of that.
>
> >
> >>
> >> For easier reference, this is the implementation of arm_fp_ok in GCC15:
> >>
> >> proc check_effective_target_arm_fp_ok_nocache { } {
> >>      global et_arm_fp_flags
> >>      set et_arm_fp_flags ""
> >>      if { [check_effective_target_arm32] } {
> >>      foreach flags {"" "-mfloat-abi=softfp" "-mfloat-abi=hard"} {
> >>          if { [check_no_compiler_messages_nocache arm_fp_ok object {
> >>          #ifndef __ARM_FP
> >>          #error __ARM_FP not defined
> >>          #endif
> >>          } "$flags"] } {
> >>          set et_arm_fp_flags $flags
> >>          return 1
> >>          }
> >>      }
> >>      }
> >>
> >>      return 0
> >> }
> >
> > This is quite similar, but definitely not the same.  Firstly, it tries not 
> > adding any option at all (the ""); then it tries softfp and hard.  However, 
> > I very much doubt we ever end up with 'hard' here because either softfp 
> > will enable FP, or there's no FP features in the default flags anyway.
> >
> > My test will either select 'hard' or 'soft' but it won't ever select 
> > neither (well unless both flags lead to an error, but in that case we'd 
> > expect to skip the test).
> >
> >>
> >>
> >> When evaluating arm_libc_fp_abi_ok in the pr68620.c test case with your 
> >> patch, that's still in the context of what multilib flags that might have 
> >> been passed to dejagnu and not in the armv7-a context, right?
> >
> > Correct, which is why I don't look directly at __ARM_FP.  I'm just trying 
> > to find out whether the libc headers (stdint.h specifically at present) are 
> > compatible with adding softfp or hard as the float abi.
>
> Ok.
>
> >
> >>
> >>
> >> To me, it feels like the way we use dg-require-effective-target to check 
> >> various flags is not implemented in a way that would allow you to switch 
> >> target in a test case. Are we trying to achive something that is not 
> >> possible with the current design of the dg- comments?
> >
> > We could structure the testsuite so that test are only run if the base 
> > flags are compatible with the test and to never add additional 
> > (architecture-related) flags when building.  But that would require us to 
> > run the testsuite with hundreds, if not thousands of option permutations to 
> > get coverage of some corner cases.  So instead we try to coerce the command 
> > line to something that is appropriate for the test.  It generally works 
> > wihtout too much trouble, but a small number of cases (like this) can cause 
> > some problems.
> >
> > Idealy we'd only require one effective-target test and one add-options 
> > command (to add the options we've detected above), but that would end up 
> > with many more cases to add to target-supports.exp and I'm not convinced we 
> > really need that here.
>
> I think I might have been unclear of my thoughts here.
> I was not thinking that we should only run for a single target, I was
> more thinking that the dg-require-effective-target needs to take into
> consideration what flags has already been given via dg-options,
> dg-additional-options or dg-add-options in addition to the multilib
> flags provided to dejagnu. Currently, it's only the multilib flags given
> to dejagnu that matters, right?
> If we do more than one dg-require-effective-target + dg-add-options in a
> test case, where the 1st one do a change of target, then I think that
> the 2nd one would be evaluated in the wrong context and potentially give
> the wrong flags to be added.
>
> Maybe I'm overthinking this...
>
> Anyway, I've sent a v2 with your suggested solution.
> As I cannot see the reported failure locally, is there some way I can

Not sure what you mean?

> check the status myself of the patch in the pre-commit checks done in
> the linaro farm or does that require someone at Arm and/or linaro to
> check that for me?
Linaro precommit CI will send you a notification if it detects a
regression (but it only runs native aarch64-linux-gnu and
arm-linux-gnueabihf, postcommit CI has more targets, including several
arm-eabi).
But you can check the status on patchwork:
https://patchwork.sourceware.org/
then go to "view patches" under "GNU Compiler Collection"
The bots update the S/W/F column, hopefully you'll get 4 "green" from Linaro CI.

Thanks,
Christophe

>
> Kind regards,
> Torbjörn
>
> >
> > R.
> >>
> >> Kind regards,
> >> Torbjörn
> >
>

Reply via email to