public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3329] Skip statements with no BB in ranger.
@ 2021-09-03 13:31 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2021-09-03 13:31 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:5db93cd083890b29262ab93bc8e692990b781002

commit r12-3329-g5db93cd083890b29262ab93bc8e692990b781002
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Fri Sep 3 10:42:37 2021 +0200

    Skip statements with no BB in ranger.
    
    The function postfold_gcond_edges() registers relations coming out of a
    GIMPLE_COND.  With upcoming changes, we may be called with statements
    not in the IL (for example, dummy statements created by the
    forward threader).  This patch avoids breakage by exiting if the
    statement does not have a defining basic block.  There is a similar
    change to the path solver.
    
    Tested on x86-64 Linux.
    
    gcc/ChangeLog:
    
            * gimple-range-fold.cc (fold_using_range::postfold_gcond_edges):
            Skip statements with no defining BB.
            * gimple-range-path.cc (path_range_query::range_defined_in_block):
            Do not get confused by statements with no defining BB.

Diff:
---
 gcc/gimple-range-fold.cc | 4 ++++
 gcc/gimple-range-path.cc | 9 +++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index 8be6d473f82..7cf8830fc5d 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -1360,6 +1360,10 @@ fold_using_range::postfold_gcond_edges (gcond *s, irange& lhs_range,
   range_operator *handler;
   basic_block bb = gimple_bb (s);
 
+  // We may get asked to fold an artificial statement not in the CFG.
+  if (!bb)
+    return;
+
   edge e0 = EDGE_SUCC (bb, 0);
   if (!single_pred_p (e0->dest))
     e0 = NULL;
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index a8226a6810f..77b823e7bd5 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -221,14 +221,19 @@ path_range_query::range_defined_in_block (irange &r, tree name, basic_block bb)
   else if (!fold_range (r, def_stmt, this))
     r.set_varying (TREE_TYPE (name));
 
-  if (DEBUG_SOLVER)
+  if (DEBUG_SOLVER && (bb || !r.varying_p ()))
     {
-      fprintf (dump_file, "range_defined_in_block (BB%d) for ", bb->index);
+      fprintf (dump_file, "range_defined_in_block (BB%d) for ", bb ? bb->index : -1);
       print_generic_expr (dump_file, name, TDF_SLIM);
       fprintf (dump_file, " is ");
       r.dump (dump_file);
       fprintf (dump_file, "\n");
     }
+
+  // We may have an artificial statement not in the IL.
+  if (!bb && r.varying_p ())
+    return false;
+
   return true;
 }


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

only message in thread, other threads:[~2021-09-03 13:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-03 13:31 [gcc r12-3329] Skip statements with no BB in ranger 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).