public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3359] Make the path solver's range_of_stmt() handle all statements.
@ 2021-09-05 16:12 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2021-09-05 16:12 UTC (permalink / raw)
  To: gcc-cvs

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

commit r12-3359-ga827909537cf085e5673ca7816b7bd7151d89fc5
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Sun Sep 5 16:53:31 2021 +0200

    Make the path solver's range_of_stmt() handle all statements.
    
    The path solver's range_of_stmt() was handcuffed to only fold
    GIMPLE_COND statements, since those were the only statements the
    backward threader needed to resolve.  However, there is no need for this
    restriction, as the folding code is perfectly capable of folding any
    statement.
    
    This can be the case when trying to fold other statements in the final
    block of a path (for instance, in the forward threader as it tries to
    fold candidate statements along a path).
    
    Tested on x86-64 Linux.
    
    gcc/ChangeLog:
    
            * gimple-range-path.cc (path_range_query::range_of_stmt): Remove
            GIMPLE_COND special casing.
            (path_range_query::range_defined_in_block): Use range_of_stmt
            instead of calling fold_range directly.

Diff:
---
 gcc/gimple-range-path.cc | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index f4509b5a726..a4fa3b296ff 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -155,7 +155,6 @@ path_range_query::unreachable_path_p ()
 }
 
 // Return the range of STMT at the end of the path being analyzed.
-// Anything but the final conditional in a BB will return VARYING.
 
 bool
 path_range_query::range_of_stmt (irange &r, gimple *stmt, tree)
@@ -165,10 +164,9 @@ path_range_query::range_of_stmt (irange &r, gimple *stmt, tree)
   if (!irange::supports_type_p (type))
     return false;
 
-  if (gimple_code (stmt) == GIMPLE_COND && fold_range (r, stmt, this))
-    return true;
+  if (!fold_range (r, stmt, this))
+    r.set_varying (type);
 
-  r.set_varying (type);
   return true;
 }
 
@@ -237,7 +235,7 @@ path_range_query::range_defined_in_block (irange &r, tree name, basic_block bb)
 
   if (gimple_code (def_stmt) == GIMPLE_PHI)
     ssa_range_in_phi (r, as_a<gphi *> (def_stmt));
-  else if (!fold_range (r, def_stmt, this))
+  else if (!range_of_stmt (r, def_stmt, name))
     r.set_varying (TREE_TYPE (name));
 
   if (bb)


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

only message in thread, other threads:[~2021-09-05 16:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-05 16:12 [gcc r12-3359] Make the path solver's range_of_stmt() handle all statements Aldy Hernandez

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