Hi,
On 11 December 2017 at 18:12, Sudakshina Das <sudi....@arm.com> wrote: > On 30/11/17 16:01, Sudakshina Das wrote: >> >> Hi >> >> This patch is the fix for gcc-7 for the same issue as mentioned in: >> https://gcc.gnu.org/ml/gcc-patches/2017-11/msg02209.html >> >> >> For the following test case: >> __fp16 >> test_select (__fp16 a, __fp16 b, __fp16 c) >> { >> return (a < b) ? b : c; >> } >> >> when compiled with -O2 -mfpu=fp-armv8 -march=armv8.2-a+fp16 -marm >> -mfloat-abi=hard generates wrong code: >> >> test_select: >> @ args = 0, pretend = 0, frame = 0 >> @ frame_needed = 0, uses_anonymous_args = 0 >> @ link register save eliminated. >> vcvtb.f32.f16 s0, s0 >> vcvtb.f32.f16 s15, s1 >> vmov.f16 r3, s2 @ __fp16 >> vcmpe.f32 s0, s15 >> vmrs APSR_nzcv, FPSCR >> // <------ No conditional branch >> vmov.f16 r3, s1 @ __fp16 >> .L1: >> vmov.f16 s0, r3 @ __fp16 >> bx lr >> >> There should have been a conditional branch there to skip one of the >> VMOVs. >> This patch fixes this problem by making *movhf_vfp_fp16 unconditional. >> >> Testing done: Add a new test case and checked for regressions on >> bootstrapped arm-none-linux-gnueabihf. >> >> Is this ok for gcc-7? >> >> Sudi >> >> ChangeLog entry are as follow: >> >> *** gcc/ChangeLog *** >> >> 2017-11-30 Sudakshina Das <sudi....@arm.com> >> >> * config/arm/vfp.md (*movhf_vfp_fp16): Add conds attribute. >> >> *** gcc/testsuite/ChangeLog *** >> >> 2017-11-30 Sudakshina Das <sudi....@arm.com> >> >> * gcc.target/arm/armv8_2-fp16-move-2.c: New test. > > > As per the trunk thread for this > (https://gcc.gnu.org/ml/gcc-patches/2017-11/msg02209.html) committed as > r255536 on gcc-7-branch for the backport. > I've noticed that this backport fails on arm-none-linux-gnueabi and arm-none-eabi. I suspect this is partly due to the fact that I use a "recent" dejagnu, and has to do with whether dg-add-options are appended or pre-pended. I'm seeing a compilation line with: -mfpu=fp-armv8 -march=armv8.2-a+fp16 -marm -mfloat-abi=hard -mfpu=fp-armv8 -mfloat-abi=softfp -march=armv8.2-a+fp16 leading to: FAIL: gcc.target/arm/armv8_2-fp16-move-2.c scan-assembler bpl I'm not sure why this works on trunk, but there I have only: -marm -mfloat-abi=softfp -march=armv8.2-a+fp16 Maybe this has to do with the new way cpu/fpu options are parsed on trunk. Christophe > Thanks > Sudi