public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/wschmidt/heads/sibfix)] tree-optimization/96579 - another special-operands fix in reassoc
@ 2020-08-28 13:43 William Schmidt
  0 siblings, 0 replies; only message in thread
From: William Schmidt @ 2020-08-28 13:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:ff7463172e564c5dd2432d7af8eaa0124cbd4af7

commit ff7463172e564c5dd2432d7af8eaa0124cbd4af7
Author: Richard Biener <rguenther@suse.de>
Date:   Thu Aug 27 10:02:22 2020 +0200

    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.

Diff:
---
 gcc/testsuite/gcc.dg/pr96579.c |  4 ++++
 gcc/tree-ssa-reassoc.c         | 13 +++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/pr96579.c b/gcc/testsuite/gcc.dg/pr96579.c
new file mode 100644
index 00000000000..49fdcb40359
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr96579.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fno-tree-forwprop -ffast-math -fno-tree-vrp" } */
+
+#include "pr96370.c"
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index fed463b0350..a5f5d52edab 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.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.  */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-08-28 13:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-28 13:43 [gcc(refs/users/wschmidt/heads/sibfix)] tree-optimization/96579 - another special-operands fix in reassoc William Schmidt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).