optabs.c (shift_optab_p, [...]): New functions, split out from expand_binop.
commit62442ab9cb306b379718f9ed797b7c60c40df6c8
authorRichard Sandiford <richard@codesourcery.com>
Fri, 31 Aug 2007 14:10:35 +0000 (31 14:10 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 31 Aug 2007 14:10:35 +0000 (31 14:10 +0000)
treea3e7dbffe10f5bc993fb2609c29c08b9d3f44fbe
parent36ae8a61ad8812fa1c177213a44b182e156f717a
optabs.c (shift_optab_p, [...]): New functions, split out from expand_binop.

gcc/
* optabs.c (shift_optab_p, commutative_optab_p): New functions,
split out from expand_binop.
(avoid_expensive_constant): New function.
(expand_binop_directly): Remove commutative_op argument and
call cummutative_optab_p instead.  Do not change op0 or op1
when swapping xop0 and xop1.  Apply avoid_expensive_constant
to each argument after potential swapping.  Enforce the
canonical order of commutative operands.
(expand_binop): Use shift_optab_p and commutative_optab_p.
Update the calls to expand_binop_directly.  Only force constants
into registers when widening an operation.  Only swap operands
once a direct expansion has been rejected.
(expand_twoval_binop): Only force constants into registers when
using a direct expansion.

From-SVN: r127991
gcc/ChangeLog
gcc/optabs.c