Hi Christoph,

> 
> Looking at the logs, I see strange command lines when trying to compile
> arm_neon_softfp_fp16_ok:
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabi/gcc3/gcc/xgcc
> -B/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabi/gcc3/gcc/
> -fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers
> -fdiagnostics-color=never -mfloat-abi=softfp -mfpu=neon-fp16 -mfloat-
> abi=softfp -c -o arm_neon_softfp_fp16_ok21466.o
> arm_neon_softfp_fp16_ok21466.c
> arm_neon_softfp_fp16_ok21466.c:3:3: error: unknown type name
> 'float16x4_t'; did you mean 'float32x4_t'?
> arm_neon_softfp_fp16_ok21466.c: In function 'foo':
> arm_neon_softfp_fp16_ok21466.c:6:26: warning: implicit declaration of
> function 'vcvt_f16_f32'; did you mean 'vcvt_u32_f32'?
> [-Wimplicit-function-declaration]
> compiler exited with status 1
> 
> [I don't know where the first 'mfloat-abi=softfp' comes from] 

It comes from the check for check_effective_target_arm_neon_ok,
The tests first try to determine what options are required to get neon to work,
The arm_neon test has decided that -mfloat-abi=softfp was enough to get it to 
pass in your case.

> /aci-gcc-
> fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabi/gcc3/gcc/xgcc
> -B/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabi/gcc3/gcc/
> -fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers
> -fdiagnostics-color=never -mfloat-abi=softfp -mfloat-abi=softfp -mfp16-
> format=ieee -c -o arm_neon_softfp_fp16_ok21466.o
> arm_neon_softfp_fp16_ok21466.c [succeeds]
> 
> then, when compiling the testcase:
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabi/gcc3/gcc/xgcc
> -B/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabi/gcc3/gcc/
> /gcc/testsuite/gcc.target/arm/pr88850-2.c -fno-diagnostics-show-caret -fno-
> diagnostics-show-line-numbers -fdiagnostics-color=never -ansi -pedantic-
> errors -O2 -march=armv7-a -fdump-rtl-final -mfloat-abi=softfp -mfloat-
> abi=softfp -mfp16-format=ieee -ffat-lto-objects -S -o pr88850-2.s In file
> included from /gcc/testsuite/gcc.target/arm/pr88850-2.c:7:
> /aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-
> gnueabi/gcc3/gcc/include/arm_neon.h:31:2:
> error: #error "NEON intrinsics not available with the soft-float ABI.
> Please use -mfloat-abi=softfp or -mfloat-abi=hard"
> /gcc/testsuite/gcc.target/arm/pr88850-2.c:9:21: error: unknown type name
> 'float16x4_t'
> /gcc/testsuite/gcc.target/arm/pr88850-2.c:11:9: error: unknown type name
> 'float16x4_t'
> 
> Why does the compiler think it's using float=abi=soft?

The error is rather misleading, the likely reason is that the -mfpu isn't a 
neon one?
I guess the difference is the -march=armv7-a that's being set must be changing 
the fpu.

In my case, the feature test only passes on the last alternative which returns 
"-mfpu=neon-fp16 -mfloat-abi=softfp -mfp16-format=ieee " which is why it passes 
locally.

Forcing the -mfpu seems a bit wrong to me, so I guess the right solution is to 
remove the second alternative from the feature test and always explicitly test 
the fpu. I'll write up a patch.

Thanks,
Tamar

> 
> 
> > The 02/13/2019 10:57, Kyrill Tkachov wrote:
> > > Hi Tamar
> > >
> > > On 2/13/19 10:33 AM, Tamar Christina wrote:
> > > > Hi All,
> > > >
> > > > The iterators ANY64 and ANY128 are used in various general split
> > > > patterns and are supposed to contain any 64 bit and 128 bit modes
> > > > respectively.
> > > >
> > > > For some reason these patterns had HI but not HF.  This adds HF so
> > > > that general
> > > > 64 and 128 bit splits are generated for these modes as well.
> > > > These are required by various split patterns that expect them to
> > > > be there.
> > > >
> > > > Bootstrapped Regtested on aarch64-none-linux-gnu and <native
> > > > regtest still running> issues.
> > > >
> > > Please do this on an arm-none-linux-gnueabihf target.
> > >
> > > Though I suspect this is just a placeholder from a boilerplate ;)
> > >
> > > > Ok for trunk?
> > > >
> > > > Thanks,
> > > > Tamar
> > > >
> > > > gcc/ChangeLog:
> > > >
> > > > 2019-02-13  Tamar Christina  <tamar.christ...@arm.com>
> > > >
> > > >         PR target/88850
> > > >         * config/arm/iterators.md (ANY64): Add V4HF,
> > > >         (ANY128): Add V8HF.
> > > >
> > > > gcc/testsuite/ChangeLog:
> > > >
> > > > 2019-02-13  Tamar Christina  <tamar.christ...@arm.com>
> > > >
> > > >         PR target/88850
> > > >         * gcc.target/arm/pr88850-2.c: New test.
> > > >
> > > > --
> > >
> > > diff --git a/gcc/config/arm/iterators.md
> > > b/gcc/config/arm/iterators.md index
> > >
> c33e572c3e89c3dc5848bd6b825d618481247558..4ac048a0c609273691c264c97c
> > > cf6cd47b43943b 100644
> > > --- a/gcc/config/arm/iterators.md
> > > +++ b/gcc/config/arm/iterators.md
> > > @@ -24,11 +24,11 @@
> > >
> > > ;;------------------------------------------------------------------
> > > ----------
> > >
> > >   ;; A list of modes that are exactly 64 bits in size. This is used
> > > to expand -;; some splits that are the same for all modes when
> > > operating on ARM
> > > +;; some splits that are the same for all modes when operating on
> > > +ARM
> > >   ;; registers.
> > > -(define_mode_iterator ANY64 [DI DF V8QI V4HI V2SI V2SF])
> > > +(define_mode_iterator ANY64 [DI DF V8QI V4HI V4HF V2SI V2SF])
> > >
> > > -(define_mode_iterator ANY128 [V2DI V2DF V16QI V8HI V4SI V4SF])
> > > +(define_mode_iterator ANY128 [V2DI V2DF V16QI V8HI V8HF V4SI V4SF])
> > >
> > >
> > > I see ANY128 is used in the move_hi_quad_<mode> and
> move_lo_quad_<mode> expanders in neon.md.
> > > Does the use of HF modes need guarding by TARGET_NEON_FP16INST
> there?
> > > Would be good to see a test exercising this change...
> > >
> > >
> > >   ;; A list of integer modes that are up to one word long
> > >   (define_mode_iterator QHSI [QI HI SI]) diff --git
> > > a/gcc/testsuite/gcc.target/arm/pr88850-2.c
> > > b/gcc/testsuite/gcc.target/arm/pr88850-2.c
> > > new file mode 100644
> > > index
> > >
> 0000000000000000000000000000000000000000..fee2a0fe3a227ea4652bea2aa
> 0
> > > e7335d20a7e9b5
> > > --- /dev/null
> > > +++ b/gcc/testsuite/gcc.target/arm/pr88850-2.c
> > > @@ -0,0 +1,19 @@
> > > +/* PR target/88850.  */
> > > +/* { dg-do compile } */
> > > +/* { dg-additional-options "-O2 -march=armv7-a -mfloat-abi=softfp
> > > +-fdump-rtl-final" } */
> > > +/* { dg-add-options arm_neon_fp16 } */
> > > +/* { dg-require-effective-target arm_soft_ok } */
> > > +/* { dg-require-effective-target arm_neon_fp16_ok } */
> > > +
> > >
> > > arm_soft_ok checks if it's okay to add -mfloat-abi=soft, but you're adding
> softfp.
> > > Is this right?
> > >
> > > Thanks,
> > > Kyrill
> > >
> > > +#include <arm_neon.h>
> > > +
> > > +extern void c (int, float16x4_t);
> > > +
> > > +void a (float16x4_t b)
> > > +{
> > > +  c (0, b);
> > > +}
> > > +
> > > +
> > > +/* Check that these 64-bit moves are done in SI.  */
> > > +/* { dg-final { scan-rtl-dump "_movsi_vfp" "final" } } *
> > >
> >
> > --

Reply via email to