mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-11 12:54:00 +08:00
tree-optimization/96579 - another special-operands fix in reassoc
This makes sure to put special-ops expanded rhs left where expression rewrite expects it. 2020-08-27 Richard Biener <rguenther@suse.de> PR tree-optimization/96579 * tree-ssa-reassoc.c (linearize_expr_tree): If we expand rhs via special ops make sure to swap operands. * gcc.dg/pr96579.c: New testcase.
This commit is contained in:
parent
989bc4ca2f
commit
ff7463172e
4
gcc/testsuite/gcc.dg/pr96579.c
Normal file
4
gcc/testsuite/gcc.dg/pr96579.c
Normal file
@ -0,0 +1,4 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -fno-tree-forwprop -ffast-math -fno-tree-vrp" } */
|
||||
|
||||
#include "pr96370.c"
|
@ -5651,13 +5651,20 @@ linearize_expr_tree (vec<operand_entry *> *ops, gimple *stmt,
|
||||
|
||||
if (!binrhsisreassoc)
|
||||
{
|
||||
if (!try_special_add_to_ops (ops, rhscode, binrhs, binrhsdef))
|
||||
bool swap = false;
|
||||
if (try_special_add_to_ops (ops, rhscode, binrhs, binrhsdef))
|
||||
/* If we add ops for the rhs we expect to be able to recurse
|
||||
to it via the lhs during expression rewrite so swap
|
||||
operands. */
|
||||
swap = true;
|
||||
else
|
||||
add_to_ops_vec (ops, binrhs);
|
||||
|
||||
if (!try_special_add_to_ops (ops, rhscode, binlhs, binlhsdef))
|
||||
add_to_ops_vec (ops, binlhs);
|
||||
|
||||
return;
|
||||
if (!swap)
|
||||
return;
|
||||
}
|
||||
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
@ -5676,6 +5683,8 @@ linearize_expr_tree (vec<operand_entry *> *ops, gimple *stmt,
|
||||
fprintf (dump_file, " is now ");
|
||||
print_gimple_stmt (dump_file, stmt, 0);
|
||||
}
|
||||
if (!binrhsisreassoc)
|
||||
return;
|
||||
|
||||
/* We want to make it so the lhs is always the reassociative op,
|
||||
so swap. */
|
||||
|
Loading…
Reference in New Issue
Block a user