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: [PATCH][ARM] Fix wrong code by arm_final_prescan with fp16 move instructions


Hi Kyrill

On 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

Thanks,
Kyrill

Sudi

ChangeLog entry are as follow:

*** gcc/ChangeLog ***

2017-11-24  Sudakshina Das  <sudi.das@arm.com>

        * config/arm/vfp.md (*movhf_vfp_fp16): Add conds attribute.

*** gcc/testsuite/ChangeLog ***

2017-11-24  Sudakshina Das  <sudi.das@arm.com>

        * gcc.target/arm/armv8_2-fp16-move-2.c: New test.



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