On 10 December 2015 at 14:14, Kyrill Tkachov <kyrylo.tkac...@arm.com> wrote:
>
> On 10/12/15 13:04, Christophe Lyon wrote:
>>
>> On 10 December 2015 at 13:30, Kyrill Tkachov <kyrylo.tkac...@arm.com>
>> wrote:
>>>
>>> Hi Christophe,
>>>
>>>
>>> On 08/12/15 11:18, Christophe Lyon wrote:
>>>>
>>>> On 8 December 2015 at 11:50, Kyrill Tkachov <kyrylo.tkac...@arm.com>
>>>> wrote:
>>>>>
>>>>> Hi Christophe,
>>>>>
>>>>>
>>>>> On 27/11/15 13:00, Christophe Lyon wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> After the recent commits from Christian adding target attributes
>>>>>> support for ARM FPU settings,  I've noticed that some of the tests
>>>>>> were failing because of incorrect assumptions wrt to the default
>>>>>> cpu/fpu/float-abi of the compiler.
>>>>>>
>>>>>> This patch fixes the problems I've noticed in the following way:
>>>>>> - do not force -mfloat-abi=softfp in dg-options, to avoid conflicts
>>>>>> when gcc is configured --with-float=hard
>>>>>>
>>>>>> - change arm_vfp_ok such that it tries several -mfpu/-mfloat-abi
>>>>>> flags, checks that __ARM_FP is defined and __ARM_NEON_FP is not
>>>>>> defined
>>>>>>
>>>>>> - introduce arm_fp_ok, which is similar but does not enforce fpu
>>>>>> setting
>>>>>>
>>>>>> - add a new effective_target: arm_crypto_pragma_ok to check that
>>>>>> setting this fpu via a pragma is actually supported by the current
>>>>>> "multilib". This is different from checking the command-line option
>>>>>> because the pragma might conflict with the command-line options in
>>>>>> use.
>>>>>>
>>>>>> The updates in the testcases are as follows:
>>>>>> - attr-crypto.c, we have to make sure that the defaut fpu does not
>>>>>> conflict with the one forced by pragma. That's why I use the arm_vfp
>>>>>> options/effective_target. This is needed if gcc has been configured
>>>>>> --with-fpu=neon-fp16, as the pragma fpu=crypto-neon-fp-armv8 would
>>>>>> conflict.
>>>>>>
>>>>>> - attr-neon-builtin-fail.c: use arm_fp to force the appropriate
>>>>>> float-abi setting. Enforcing fpu is not needed here.
>>>>>>
>>>>>> - attr-neon-fp16.c: similar, I also removed arm_neon_ok since it was
>>>>>> not necessary to make the test pass in my testing. On second thought,
>>>>>> I'm wondering whether I should leave it and make the test unsupported
>>>>>> in more cases (such as when forcing -march=armv5t, although it does
>>>>>> pass with this patch)
>>>>>>
>>>>>> - attr-neon2.c: use arm_vfp to force the appropriate float-abi
>>>>>> setting. Enforcing mfpu=vfp is needed to avoid conflict with the
>>>>>> pragma target fpu=neon (for instance if the toolchain default is
>>>>>> neon-fp16)
>>>>>>
>>>>>> - attr-neon3.c: similar
>>>>>>
>>>>>> Tested on a variety of configurations, see:
>>>>>>
>>>>>>
>>>>>>
>>>>>> http://people.linaro.org/~christophe.lyon/cross-validation/gcc-test-patches/230929-target-attr/report-build-info.html
>>>>>>
>>>>>> Note that the regressions reported fall into 3 categories:
>>>>>> - when forcing march=armv5t: tests are now unsupported because I
>>>>>> modified arm_crypto_ok to require arm_v8_neon_ok instead of arm32.
>>>>>>
>>>>>> - the warning reported by attr-neon-builtin-fail.c moved from line 12
>>>>>> to 14 and is thus seen as a regression + one improvement
>>>>>>
>>>>>> - finally, attr-neon-fp16.c causes an ICE on armeb compilers, for
>>>>>> which I need to post a bugzilla.
>>>>>>
>>>>>>
>>>>>> TBH, I'm a bit concerned by the complexity of all these multilib-like
>>>>>> conditions. I'm confident that I'm still missing some combinations :-)
>>>>>>
>>>>>> And with new target attributes coming, new architectures etc... all
>>>>>> this logic is likely to become even more complex.
>>>>>>
>>>>>> That being said, OK for trunk?
>>>>>
>>>>>
>>>>> I'd like us to clean up and reorganise the gcc.target/arm testsuite
>>>>> at some point to make it more robust with respect to the tons of
>>>>> multilib
>>>>> options and configurations we can have for arm. It's becoming very
>>>>> frustrating
>>>>> to test feature-specific stuff :(
>>>>>
>>>>> This is ok in the meantime.
>>>>> Sorry for the delay.
>>>>>
>>>> Thanks for the approval, glad to see I'm not the only one willing to see
>>>> improvements in this area :)
>>>>
>>>> Committed as r231403.
>>>
>>>
>>> With this patch we're seeing legitimate PASSes go to NA.
>>> For example:
>>>
>>> gcc.target/arm/vfp-1.c
>>> gcc.target/arm/vfp-ldmdbs.c
>>> and other vfp tests in arm.exp.
>>> This is, for example, for the
>>> variant-mthumb/-march=armv8-a/-mfpu=crypto-neon-fp-armv8/-mfloat-abi=hard
>>>
>> Hmm I'm attempting to cover such a configuration in my matrix of
>> validations:
>>
>> http://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/231403/report-build-info.html
>>
>> The difference is that I use similar flags at GCC configure time, while
>> you
>> override them when running the testsuite:
>> --target arm-none-linux-gnueabihf --with-mode=thum --with-cpu=cortex-a57
>> --with-fpu=crypto-neon-fp-armv8
>>
>> I this case, I do not see the regressions.
>
>
> My gcc is arm-none-eabi configured with
> --with-float=hard --with-cpu=cortex-a15 --with-fpu=neon-vfpv4
> --with-float=hard
>
>>> I suspect under your new predicates they'd need to be changed to check
>>> for
>>> arm_fp_ok rather than arm_vfp_ok.
>>
>> Probably, yes.
>>
>
> In the test log where it checks the effective target it fails due to:
> arm_vfp_ok27268.c:6:4: error: #error __ARM_NEON_FP defined
> it's compiling the check with
> -mthumb -march=armv8-a -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard -o
> arm_vfp_ok27268.o arm_vfp_ok27268.c
>
>>> We want to avoid removing any PASSes.
>>> Can you please test some more to make sure we don't remove any legitimate
>>> passes with your patch?
>>
>> Is that the only combination in which you saw less PASSes?
>
>
> That's the one that was brought to my attention, but I think the issue here
> is just the
> tests that check for arm_vfp_ok rather than the new arm_fp_ok and set
> -mfpu=vfp explicitly.
> They appear unsupported if testing with an explicit neon option in mfpu, I
> think.
>
>>> Also, Ramana reminded me offline that any new predicates in
>>> target-supports.exp
>>> need documenting in sourcebuild.txt.
>>>
>>> In light of that, can you please revert your patch and address the issues
>>> above
>>> so that we can be confident we don't lose existing legitimate test
>>> coverage?
>>
>> OK.
>>
>>> Sorry for not catching these sooner.
>>
>> No problem, there are so many combinations.
>> I'm not sure how to define a reasonable set.
>
>
> So, I think the action plan here is to audit the tests that need to be
> changed
> to arm_fp_ok and add the documentation for the new predicate checks.
>

I came up with a new version where I now use only the new arm_fp_ok, so
it might be easier just to update arm_vfp_ok and not introduce arm_fp_ok.

However, I'm still not happy with this version because it has problems with
a few tests that use target attributes such as attr-crypto.c, which starts with:
#pragma GCC target ("fpu=crypto-neon-fp-armv8")

This pragma fails if the compiler+options have set an incompatible
fpu before processing the pragma.

So for instance, if gcc has been configured --with-fpu=neon, compiling the test
with no fpu option fails (neon is not compatible with crypto-neon-fp-armv8
because the latter has fp16)

Now, if we use effective_target arm_vfp_ok + dg_option to force -mfpu=vfp,
we end up compiling with -mfpu=vfp and the pragma passes.

But if, in addition, we force the testflags to set -mfpu=crypto-neon-fp-armv8
as you do, the effective_target arm_vfp_ok test now fails because it is
compiled with -mfpu=vfp -mfpu=crypto-neon-fp-armv8, which defines
__ARM_NEON_FP

In short, the problem is how to make sure that the fpu setting is always
compatible with the pragma, whatever the gcc configuration and multilib
options used.

Thanks,

Christophe.

> Thanks,
> Kyrill
>
>
>> Christophe.
>>
>>> Kyrill
>>>
>>>
>>>> Christophe.
>>>>
>>>>> Thanks for handling this!
>>>>> Kyrill
>>>>>
>>>>>
>>>>>> Christophe
>>>>>>
>>>>>>
>>>>>> 2015-11-27  Christophe Lyon  <christophe.l...@linaro.org>
>>>>>>
>>>>>>        * lib/target-supports.exp
>>>>>>        (check_effective_target_arm_vfp_ok_nocache): New.
>>>>>>        (check_effective_target_arm_vfp_ok): Call the new
>>>>>>        check_effective_target_arm_vfp_ok_nocache function.
>>>>>>        (check_effective_target_arm_fp_ok_nocache): New.
>>>>>>        (check_effective_target_arm_fp_ok): New.
>>>>>>        (add_options_for_arm_fp): New.
>>>>>>        (check_effective_target_arm_crypto_ok_nocache): Require
>>>>>>        target_arm_v8_neon_ok instead of arm32.
>>>>>>        (check_effective_target_arm_crypto_pragma_ok_nocache): New.
>>>>>>        (check_effective_target_arm_crypto_pragma_ok): New.
>>>>>>        (add_options_for_arm_vfp): New.
>>>>>>        * gcc.target/arm/attr-crypto.c: Use arm_crypto_pragma_ok
>>>>>> effective
>>>>>>        target. Do not force -mfloat-abi=softfp, use arm_vfp effective
>>>>>>        target instead.
>>>>>>        * gcc.target/arm/attr-neon-builtin-fail.c: Do not force
>>>>>>        -mfloat-abi=softfp, use arm_fp effective target instead.
>>>>>>        * gcc.target/arm/attr-neon-fp16.c: Likewise. Remove arm_neon_ok
>>>>>>        dependency.
>>>>>>        * gcc.target/arm/attr-neon2.c: Do not force -mfloat-abi=softfp,
>>>>>>        use arm_vfp effective target instead.
>>>>>>        * gcc.target/arm/attr-neon3.c: Likewise.
>>>>>
>>>>>
>

Reply via email to