This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [testsuite][ARM target attributes] Fix effective_target tests


Hi Christophe,

On 12/17/2015 11:17 PM, Christophe Lyon wrote:
Hi,

Here is an updated version of this patch.
I did test it with
-mthumb/-march=armv8-a/-mfpu=crypto-neon-fp-armv8/-mfloat-abi=hard in
addition to my usual set of options.

Compared to the previous version:
- I added some doc in sourcebuild.texi
- I no longer modify arm_vfp_ok...
- I replaced all uses of arm_vfp with the new arm_fp because I found
that the existing tests do not actually need to pass -mfpu=vfp: this
is implicitly set as the default when using -mfloat-abi={softfp|hard}
- I chose not to remove arm_vfp_ok because we may need it in the
future, if a test really needs vfp (as opposed to neon for instance)
- in gcc.target/arm/attr-crypto.c I force the initial fpu to be vfp
via pragma instead, so that the next pragma fpu
fpu=crypto-neon-fp-armv8 is always compatible, regardless of the
command-line options/default fpu
- same for attr-neon2.c and attr-neon3.c
- I updated cmp-2.c, unsigned-float.c, vfp-1.c, vfp-ldmdbd.c,
vfp-ldmdbs.c, vfp-ldmiad.c, vfp-ldmias.c, vfp-stmdbd.c, vfp-stmdbs.c,
vfp-stmiad.c, vfp-stmias.c, vnmul-[1234].c to use the new arm_fp
effective target instead of arm_vfp. This is so that they don't need
to use -mfpu=vfp and can use the new dg-add-options arm_fp

The validation results show (in addition to what I originally reported):


- attr-crypto.c and attr-neon3.c now ICE in some cases. This is PR68895.
- depending on the GCC configuration (e.g. --with-fpu=neon)
attr-neon3.c may fail. This is PR68896.

Those last tests are invalid, as they use simd builtin type declaration in nosimd context (that was my fault originally). I'm rewriting those and a few others to be compliant. I'm also working on improving the reporting for invalid uses so you don't get this ICE anymore.




OK?

Christophe

2015-12-17  Christophe Lyon  <christophe.lyon@linaro.org>

     * doc/sourcebuild.texi (arm_fp_ok): Document new entry.
     (arm_fp): Likewise.
     * lib/target-supports.exp
     (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_fp_ok effective
     target instead. Force initial fpu to vfp.
     * gcc.target/arm/attr-neon-builtin-fail.c: Do not force
     -mfloat-abi=softfp, use arm_fp_ok 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. Force initial fpu to vfp.
     * gcc.target/arm/attr-neon3.c: Likewise.
     * gcc.target/arm/cmp-2.c: Use arm_fp_ok effective target instead of
     arm_vfp_ok.
     * gcc.target/arm/unsigned-float.c: Likewise.
     * gcc.target/arm/vfp-1.c: Likewise.
     * gcc.target/arm/vfp-ldmdbd.c: Likewise.
     * gcc.target/arm/vfp-ldmdbs.c: Likewise.
     * gcc.target/arm/vfp-ldmiad.c: Likewise.
     * gcc.target/arm/vfp-ldmias.c: Likewise.
     * gcc.target/arm/vfp-stmdbd.c: Likewise.
     * gcc.target/arm/vfp-stmdbs.c: Likewise.
     * gcc.target/arm/vfp-stmiad.c: Likewise.
     * gcc.target/arm/vfp-stmias.c: Likewise.
     * gcc.target/arm/vnmul-1.c: Likewise.
     * gcc.target/arm/vnmul-2.c: Likewise.
     * gcc.target/arm/vnmul-3.c: Likewise.
     * gcc.target/arm/vnmul-4.c: Likewise.



On 10 December 2015 at 20:52, Christophe Lyon
<christophe.lyon@linaro.org> wrote:
On 10 December 2015 at 14:14, Kyrill Tkachov <kyrylo.tkachov@arm.com> wrote:

On 10/12/15 13:04, Christophe Lyon wrote:

On 10 December 2015 at 13:30, Kyrill Tkachov <kyrylo.tkachov@arm.com>
wrote:

Hi Christophe,


On 08/12/15 11:18, Christophe Lyon wrote:

On 8 December 2015 at 11:50, Kyrill Tkachov <kyrylo.tkachov@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.lyon@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.





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]