Hi Richard, > On 29/07/13 14:58, Kyrylo Tkachov wrote: > > Hi all, > > > > Now that combine emits the canonical form for (eq (neg x) (y)) instead > of (eq > > (x) (neg y)), this patch fixes up the corresponding pattern in aarch64 > to > > match that. This enables combine to properly generate the cmn > instruction > > where appropriate. > > > > Tested aarch64-none-elf on model. > > > > Ok for trunk? > > > > No, this is wrong for inequalities, since in reality it's the second > operand that's inverted. > > You'll need to use CC_SWP mode and then arrange for this to be correctly > picked by select_cc_mode. > How's this? aarch64_select_cc_mode is updated to return CC_SWPmode for these comparisons and the MD pattern is updated accordingly. Tested aarch64-none-elf on a model. Is this ok? Thanks, Kyrill 2013-09-09 Kyrylo Tkachov * config/aarch64/aarch64.c (aarch64_select_cc_mode): Return CC_SWP for comparison with negated operand. * config/aarch64/aarch64.md (compare_neg): Match canonical RTL form. 2013-09-09 Kyrylo Tkachov * gcc.target/aarch64/cmn-neg.c: New test.