On Thu, 14 Feb 2019 at 17:52, Tamar Christina <tamar.christ...@arm.com> wrote: > > Hi Kyrill, > > I couldn't find a way to actually generate this case so I have instead removed > the entry from ANY128. New patch and changelog below. > > -- > > The iterator ANY64 are used in various general split patterns and is supposed > to contain all 64 bit modes. > > For some reason the pattern has HI but not HF. This adds HF so that general > 64 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 arm-none-gnueabihf and no issues. > > Ok for trunk? > > Thanks, > Tamar > > gcc/ChangeLog: > > 2019-02-14 Tamar Christina <tamar.christ...@arm.com> > > PR target/88850 > * config/arm/iterators.md (ANY64): Add V4HF. > > gcc/testsuite/ChangeLog: > > 2019-02-14 Tamar Christina <tamar.christ...@arm.com> > > PR target/88850 > * gcc.target/arm/pr88850-2.c: New test. > * lib/target-supports.exp > (check_effective_target_arm_neon_softfp_fp16_ok_nocache, > check_effective_target_arm_neon_softfp_fp16_ok, > add_options_for_arm_neon_softfp_fp16): New. > >
Hi, I've noticed strange things with this new testcase. I see it failing on target arm-none-linux-gnueabi --with-mode arm --with-cpu cortex-a9 and on target arm-none-eabi --with-mode arm --with-cpu cortex-a9 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] /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 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..4ac048a0c609273691c264c97ccf6cd47b43943b > > 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..fee2a0fe3a227ea4652bea2aa0e7335d20a7e9b5 > > --- /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" } } * > > > > --