mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-26 07:40:26 +08:00
re PR tree-optimization/64910 (tree reassociation results in poor code)
PR tree-optimization/64910 * tree-ssa-reassoc.c (reassociate_bb): Restrict last change to cases where we have 3 or more operands. From-SVN: r251751
This commit is contained in:
parent
1d441507f7
commit
5aa102aa78
@ -1,3 +1,9 @@
|
||||
2017-09-05 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/64910
|
||||
* tree-ssa-reassoc.c (reassociate_bb): Restrict last change to
|
||||
cases where we have 3 or more operands.
|
||||
|
||||
2017-09-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/81768
|
||||
|
@ -5763,14 +5763,15 @@ reassociate_bb (basic_block bb)
|
||||
"Width = %d was chosen for reassociation\n", width);
|
||||
|
||||
|
||||
/* For binary bit operations, if the last operand in
|
||||
OPS is a constant, move it to the front. This
|
||||
helps ensure that we generate (X & Y) & C rather
|
||||
than (X & C) & Y. The former will often match
|
||||
a canonical bit test when we get to RTL. */
|
||||
if ((rhs_code == BIT_AND_EXPR
|
||||
|| rhs_code == BIT_IOR_EXPR
|
||||
|| rhs_code == BIT_XOR_EXPR)
|
||||
/* For binary bit operations, if there are at least 3
|
||||
operands and the last last operand in OPS is a constant,
|
||||
move it to the front. This helps ensure that we generate
|
||||
(X & Y) & C rather than (X & C) & Y. The former will
|
||||
often match a canonical bit test when we get to RTL. */
|
||||
if (ops.length () != 2
|
||||
&& (rhs_code == BIT_AND_EXPR
|
||||
|| rhs_code == BIT_IOR_EXPR
|
||||
|| rhs_code == BIT_XOR_EXPR)
|
||||
&& TREE_CODE (ops.last ()->op) == INTEGER_CST)
|
||||
std::swap (*ops[0], *ops[ops_num - 1]);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user