On 30/11/17 16:06, Sudakshina Das wrote:
Hi KyrillOn 27/11/17 12:25, Kyrill Tkachov wrote: > Hi Sudi, > > On 24/11/17 14:57, Sudi Das wrote: >> Hi >> >> For the following test case: >> __fp16 >> test_select (__fp16 a, __fp16 b, __fp16 c) >> { >> return (a < b) ? b : c; >> } >> >> when compiled with -mfpu=fp-armv8 -march=armv8.2-a+fp16 -marm >> -mfloat-abi=hard trunk 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 >> vcmpe.f32 s0, s15 >> vmrs APSR_nzcv, FPSCR >> // <------ No conditional branch! >> vmov s1, s2 @ __fp16 >> .L2: >> vmov s0, s1 @ __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 >> wherever needed. >> >> Testing done: Add a new test case and checked for regressions >> arm-none-linux-gnueabihf. >> >> Is this ok for trunk? >> > > This is ok after assuming a bootstrap on arm-none-linux-gnueabihf passes > as well. > Does this bug appear on the GCC 7 branch? > If so, could you please test this patch on that branch as well if so? > I have tested the patch and also sent a new patch request for gcc-7 https://gcc.gnu.org/ml/gcc-patches/2017-11/msg02577.html
Thanks Sudi, this is ok to commit to the branch after we let this patch bake on trunk for a week without problems.
Kyrill
Thanks Sudi > Thanks, > Kyrill > >> Sudi >> >> ChangeLog entry are as follow: >> >> *** gcc/ChangeLog *** >> >> 2017-11-24 Sudakshina Das <[email protected]> >> >> * config/arm/vfp.md (*movhf_vfp_fp16): Add conds attribute. >> >> *** gcc/testsuite/ChangeLog *** >> >> 2017-11-24 Sudakshina Das <[email protected]> >> >> * gcc.target/arm/armv8_2-fp16-move-2.c: New test. >
