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] |
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 lrThere 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? 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] |