public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-4878] phiopt: Improve value_replacement maybe equal phires range handling
@ 2022-12-23 15:22 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2022-12-23 15:22 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:3d6bb832022160b00e7001ac5b467e201ab4a9ac

commit r13-4878-g3d6bb832022160b00e7001ac5b467e201ab4a9ac
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Fri Dec 23 16:19:08 2022 +0100

    phiopt: Improve value_replacement maybe equal phires range handling
    
    My previous patch added throwing away of SSA_NAME_RANGE_INFO of
    phires when we have phires = x != carg ? x : oarg, but that could
    throw away useful range info, all we need is merge phires current
    range info with the carg constant which can newly appear there
    (and the optimization proved the single user doesn't care about that).
    
    2022-12-23  Jakub Jelinek  <jakub@redhat.com>
                Aldy Hernandez  <aldyh@redhat.com>
    
            * tree-ssa-phiopt.cc (value_replacement): Instead of resetting
            phires range info, union it with carg.

Diff:
---
 gcc/tree-ssa-phiopt.cc | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc
index 906b406970f..59dc21cee50 100644
--- a/gcc/tree-ssa-phiopt.cc
+++ b/gcc/tree-ssa-phiopt.cc
@@ -1492,11 +1492,25 @@ value_replacement (basic_block cond_bb, basic_block middle_bb,
 		    break;
 		  }
 	      if (equal_p)
-		/* After the optimization PHI result can have value
-		   which it couldn't have previously.
-		   We could instead of resetting it union the range
-		   info with oarg.  */
-		reset_flow_sensitive_info (gimple_phi_result (phi));
+		{
+		  tree phires = gimple_phi_result (phi);
+		  if (SSA_NAME_RANGE_INFO (phires))
+		    {
+		      /* After the optimization PHI result can have value
+			 which it couldn't have previously.  */
+		      int_range_max r;
+		      if (get_global_range_query ()->range_of_expr (r, phires,
+								    phi))
+			{
+			  int_range<2> tmp (carg, carg);
+			  r.union_ (tmp);
+			  reset_flow_sensitive_info (phires);
+			  set_range_info (phires, r);
+			}
+		      else
+			reset_flow_sensitive_info (phires);
+		    }
+		}
 	      if (equal_p && MAY_HAVE_DEBUG_BIND_STMTS)
 		{
 		  imm_use_iterator imm_iter;

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

only message in thread, other threads:[~2022-12-23 15:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-23 15:22 [gcc r13-4878] phiopt: Improve value_replacement maybe equal phires range handling Jakub Jelinek

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).