[PATCH] [RISC-V] fix zcmp popretz [PR113715]

Jeff Law jeffreyalaw@gmail.com
Tue Jul 9 15:28:59 GMT 2024



On 7/8/24 11:30 PM, Fei Gao wrote:
> On 2024-07-09 01:49  Jeff Law <jeffreyalaw@gmail.com> wrote:
>>
>>
>>
>> On 7/8/24 2:39 AM, Fei Gao wrote:
>>> Root cause:
>>> https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=b27d323a368033f0b37e93c57a57a35fd9997864
>>> Commit above tries in targetm.gen_epilogue () to detect if
>>> there's li a0,0 insn at the end of insn chain, if so, cm.popret
>>> is replaced by cm.popretz and li a0,0 insn is deleted.
>>>
>>> Insertion of the generated epilogue sequence
>>> into the insn chain doesn't happen at this moment.
>>> If later shrink-wrap decides NOT to insert the epilogue sequence at the end
>>> of insn chain, then the li a0,0 insn has already been mistakeny removed.
>>>
>>> Fix this issue by removing generation of cm.popretz in epilogue,
>>> leaving the assignment to a0 and use insn with cm.popret.
>>>
>>> That's likely going to result in some kind of code size regression,
>>> but not a correctness regression.
>>>
>>> Optimization can be done in future.
>>>
>>> Signed-off-by: Fei Gao <gaofei@eswincomputing.com>
>>> gcc/ChangeLog:
>>>
>>> * config/riscv/riscv.cc (riscv_zcmp_can_use_popretz): Removed.
>>> (riscv_gen_multi_pop_insn): Remove generation of cm.popretz.
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> * gcc.target/riscv/rv32e_zcmp.c: Adapt TC.
>>> * gcc.target/riscv/rv32i_zcmp.c: Likewise.
>> OK.
>>
> 
> Shall I back port this fix to releases/gcc-14?
Yea, that's probably wise given its a correctness issue.

Thanks!

jeff


More information about the Gcc-patches mailing list