On Thu, Mar 21, 2013 at 6:09 PM, Kyrylo Tkachov <kyrylo.tkac...@arm.com> wrote: > Hi all, > > This patch adds a splitter variant of the minmax_arithsi pattern for when > the operator > is non-commutative (MINUS) and the ordering of the operands is not > canonical. > > That is, it will trigger for: > #define MAX(a, b) (a > b ? a : b) > int > foo (int a, int b, int c) > { > return c - MAX (a,b); > } > > and will generate: > cmp r1, r0 > rsbge r0, r1, r2 > rsblt r0, r0, r2 > > instead of the current: > cmp r0, r1 > movlt r0, r1 > rsb r0, r0, r2 > > No regressions on arm-none-eabi. > > Ok for trunk? >
Split after reload please into cond-exec or use if_then_else instead if you are splitting before reload - I originally thought it to be safe when you asked me, but then have gone back and corrected myself. Read this thread . http://patches.linaro.org/6469/ . regards Ramana > Thanks, > Kyrill > > gcc/ > 2013-03-21 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > * config/arm/arm.md (minmax_arithsi_non_canon): New pattern. > > gcc/testsuite > 2013-03-21 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > * gcc.target/arm/minmax_minus.c: New test.