On 08/03/18 13:32, James Greenhalgh wrote:
On Wed, Mar 07, 2018 at 05:39:41PM +0000, Kyrill Tkachov wrote:
Hi all,
In this wrong-code PR the combine pass ends up moving a CC-using instruction past a
*compare_cstore<mode>_insn
insn_and_split. After reload the *compare_cstore<mode>_insn splitter ends up
generating a SUBS instruction that
clobbers the condition flags, and things go bad.
The solution is simple, the *compare_cstore<mode>_insn pattern should specify
that it clobbers the CC register
so that combine (or any other pass) does not assume that it can move CC-using
patterns across it.
This patch does that and fixes the testcase.
The testcase FAILs on GCC 8 only, but the buggy pattern is in GCC 6 onwards, so
we should backport this as
a latent bug fix after it's had some time to bake in trunk.
Bootstrapped and tested on aarch64-none-linux-gnu.
Ok for trunk and later backports?
OK.
I've backported the patch to the GCC 6 and 7 branches after bootstrapping and
testing there.
Thanks,
Kyrill
Thanks,
James
2018-03-07 Kyrylo Tkachov <kyrylo.tkac...@arm.com>
PR target/84748
* config/aarch64/aarch64.md (*compare_cstore<mode>_insn): Mark pattern
as clobbering CC_REGNUM.
2018-03-07 Kyrylo Tkachov <kyrylo.tkac...@arm.com>
PR target/84748
* gcc.c-torture/execute/pr84748.c: New test.