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. 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.