public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Richard Biener <rguenth@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r10-10767] tree-optimization/105163 - abnormal SSA coalescing and reassoc Date: Fri, 27 May 2022 13:15:32 +0000 (GMT) [thread overview] Message-ID: <20220527131532.D99AC395B457@sourceware.org> (raw) https://gcc.gnu.org/g:bdfe7e5510b28c3ab8f8cd0fd7f715f2da3af938 commit r10-10767-gbdfe7e5510b28c3ab8f8cd0fd7f715f2da3af938 Author: Richard Biener <rguenther@suse.de> Date: Wed Apr 6 09:36:38 2022 +0200 tree-optimization/105163 - abnormal SSA coalescing and reassoc The negate propagation optimizations in reassoc did not look out for abnormal SSA coalescing issues. The following fixes that. 2022-04-06 Richard Biener <rguenther@suse.de> PR tree-optimization/105163 * tree-ssa-reassoc.c (repropagate_negates): Avoid propagating negated abnormals. * gcc.dg/torture/pr105163.c: New testcase. (cherry picked from commit 44fe49401725055a740ce47e80561b6932b8cd01) Diff: --- gcc/testsuite/gcc.dg/torture/pr105163.c | 17 +++++++++++++++++ gcc/tree-ssa-reassoc.c | 25 +++++++++++++------------ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/gcc/testsuite/gcc.dg/torture/pr105163.c b/gcc/testsuite/gcc.dg/torture/pr105163.c new file mode 100644 index 00000000000..23e04107f68 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr105163.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target nonlocal_goto } */ + +#include <setjmp.h> + +extern int bar (unsigned int *); +extern jmp_buf *baz (void); +struct C { int c1; }; +void foo (struct C *x, int *z, int e) +{ + unsigned int d = 0; + long f; + setjmp (*baz()); + f = 1 + ~d; + d = 8; + if ((!0) && !e && bar(z)) *z = 1 + f; +} diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index ed6195dc7ab..3a4d7e046c5 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -5599,10 +5599,14 @@ repropagate_negates (void) FOR_EACH_VEC_ELT (plus_negates, i, negate) { gimple *user = get_single_immediate_use (negate); - if (!user || !is_gimple_assign (user)) continue; + tree negateop = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (negate)); + if (TREE_CODE (negateop) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (negateop)) + continue; + /* The negate operand can be either operand of a PLUS_EXPR (it can be the LHS if the RHS is a constant for example). @@ -5625,9 +5629,9 @@ repropagate_negates (void) if (gimple_assign_rhs2 (user) == negate) { tree rhs1 = gimple_assign_rhs1 (user); - tree rhs2 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (negate)); gimple_stmt_iterator gsi = gsi_for_stmt (user); - gimple_assign_set_rhs_with_ops (&gsi, MINUS_EXPR, rhs1, rhs2); + gimple_assign_set_rhs_with_ops (&gsi, MINUS_EXPR, rhs1, + negateop); update_stmt (user); } } @@ -5636,21 +5640,20 @@ repropagate_negates (void) if (gimple_assign_rhs1 (user) == negate) { /* We have - x = -a + x = -negateop y = x - b which we transform into - x = a + b + x = negateop + b y = -x . This pushes down the negate which we possibly can merge into some other operation, hence insert it into the plus_negates vector. */ gimple *feed = SSA_NAME_DEF_STMT (negate); - tree a = gimple_assign_rhs1 (feed); tree b = gimple_assign_rhs2 (user); gimple_stmt_iterator gsi = gsi_for_stmt (feed); gimple_stmt_iterator gsi2 = gsi_for_stmt (user); tree x = make_ssa_name (TREE_TYPE (gimple_assign_lhs (feed))); - gimple *g = gimple_build_assign (x, PLUS_EXPR, a, b); + gimple *g = gimple_build_assign (x, PLUS_EXPR, negateop, b); gsi_insert_before (&gsi2, g, GSI_SAME_STMT); gimple_assign_set_rhs_with_ops (&gsi2, NEGATE_EXPR, x); user = gsi_stmt (gsi2); @@ -5661,13 +5664,11 @@ repropagate_negates (void) } else { - /* Transform "x = -a; y = b - x" into "y = b + a", getting - rid of one operation. */ - gimple *feed = SSA_NAME_DEF_STMT (negate); - tree a = gimple_assign_rhs1 (feed); + /* Transform "x = -negateop; y = b - x" into "y = b + negateop", + getting rid of one operation. */ tree rhs1 = gimple_assign_rhs1 (user); gimple_stmt_iterator gsi = gsi_for_stmt (user); - gimple_assign_set_rhs_with_ops (&gsi, PLUS_EXPR, rhs1, a); + gimple_assign_set_rhs_with_ops (&gsi, PLUS_EXPR, rhs1, negateop); update_stmt (gsi_stmt (gsi)); } }
reply other threads:[~2022-05-27 13:15 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220527131532.D99AC395B457@sourceware.org \ --to=rguenth@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).