On 03/02/2015 07:05, Andrew Pinski wrote: > Likewise of: > +(define_insn "abssi2" > + [(set (match_operand:SI 0 "register_operand" "=r") > + (abs:SI (match_operand:SI 1 "register_operand" "r"))) > + (clobber (match_scratch:SI 2 "=&r"))] > + "" > + "ashr.l\t%2,%1,31\;xor.l\t%0,%1,%2\;sub.l\t%0,%0,%2") >
optabs.c's expand_abs_nojump already knows this trick: /* If this machine has expensive jumps, we can do integer absolute value of X as (((signed) x >> (W-1)) ^ x) - ((signed) x >> (W-1)), where W is the width of MODE. */ So if you define BRANCH_COST to be 2 or more there should be no need for this pattern at all. Paolo