[gcc r17-3208] Use ssa-names rather than versions in the relation oracle.

Andrew Macleod via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:d829764aa95efc3795f3cc6d88d5e1303272d9c3

commit r17-3208-gd829764aa95efc3795f3cc6d88d5e1303272d9c3
Author: Andrew MacLeod <[email protected]>
Date:   Tue Aug 11 14:37:37 2026 -0400

    Use ssa-names rather than versions in the relation oracle.
    
    A couple of internal API calls were taking ssa version numbers rather
    than trees.  This just makes it consistent that its always an ssa_name.
    
            * value-relation.cc (dom_oracle::create_relation_in_bb): Adjust
            to use ssa_name instead of version.
            (dom_oracle::search_and_merge_relation): Likewise.
            (dom_oracle::find_relation_block): Likewise.
            (dom_oracle::find_relation_dom): Likewise.
            (dom_oracle::query): Likewise.
            * value-relation.h (find_relation_block): Use trees not unsigned.
            (find_relation_dom): Likewise.

Diff:
---
 gcc/value-relation.cc | 33 ++++++++++++++++++---------------
 gcc/value-relation.h  |  4 ++--
 2 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc
index 772bbc0ca11f..04e9cc198437 100644
--- a/gcc/value-relation.cc
+++ b/gcc/value-relation.cc
@@ -1213,7 +1213,9 @@ dom_oracle::create_relation_in_bb (basic_block bb, relation_kind k, tree op1,
   unsigned v1 = SSA_NAME_VERSION (op1);
   unsigned v2 = SSA_NAME_VERSION (op2);
 
-  gcc_checking_assert (find_relation_block (bbi, v1, v2, &ptr) == VREL_VARYING);
+  // Assert there is no existing relation.
+  gcc_checking_assert (find_relation_block (bbi, op1, op2, NULL)
+		       == VREL_VARYING);
 
   bitmap_set_bit (bm, v1);
   bitmap_set_bit (bm, v2);
@@ -1241,11 +1243,9 @@ dom_oracle::search_and_merge_relation (basic_block bb, relation_kind k,
 
   int bbi = bb->index;
 
-  unsigned v1 = SSA_NAME_VERSION (op1);
-  unsigned v2 = SSA_NAME_VERSION (op2);
   relation_kind curr;
   relation_chain *ptr;
-  curr = find_relation_block (bbi, v1, v2, &ptr);
+  curr = find_relation_block (bbi, op1, op2, &ptr);
   // There is an existing relation in this block, just intersect with it.
   if (curr != VREL_VARYING)
     {
@@ -1262,7 +1262,7 @@ dom_oracle::search_and_merge_relation (basic_block bb, relation_kind k,
       // By including dominating relations, The first one found in any search
       // will be the aggregate of all the previous ones.
       curr = find_relation_dom (get_immediate_dominator (CDI_DOMINATORS, bb),
-				v1, v2);
+				op1, op2);
       if (curr != VREL_VARYING)
 	k = relation_intersect (curr, k);
       ptr = create_relation_in_bb (bb, k, op1, op2);
@@ -1426,7 +1426,7 @@ dom_oracle::query (basic_block bb, const_bitmap b1, const_bitmap b2)
 // is found, return a pointer to the chain object in OBJ.
 
 relation_kind
-dom_oracle::find_relation_block (int bb, unsigned v1, unsigned v2,
+dom_oracle::find_relation_block (int bb, tree ssa1, tree ssa2,
 				     relation_chain **obj) const
 {
   if (bb >= (int)m_relations.length())
@@ -1436,6 +1436,9 @@ dom_oracle::find_relation_block (int bb, unsigned v1, unsigned v2,
   if (!bm)
     return VREL_VARYING;
 
+  unsigned v1 = SSA_NAME_VERSION (ssa1);
+  unsigned v2 = SSA_NAME_VERSION (ssa2);
+
   // If both b1 and b2 aren't referenced in this block, cant be a relation
   if (!bitmap_bit_p (bm, v1) || !bitmap_bit_p (bm, v2))
     return VREL_VARYING;
@@ -1443,15 +1446,15 @@ dom_oracle::find_relation_block (int bb, unsigned v1, unsigned v2,
   relation_chain *ptr;
   for (ptr = m_relations[bb].m_head; ptr ; ptr = ptr->m_next)
     {
-      unsigned op1 = SSA_NAME_VERSION (ptr->op1 ());
-      unsigned op2 = SSA_NAME_VERSION (ptr->op2 ());
-      if (v1 == op1 && v2 == op2)
+      tree op1 = ptr->op1 ();
+      tree op2 = ptr->op2 ();
+      if (ssa1 == op1 && ssa2 == op2)
 	{
 	  if (obj)
 	    *obj = ptr;
 	  return ptr->kind ();
 	}
-      if (v1 == op2 && v2 == op1)
+      if (ssa1 == op2 && ssa2 == op1)
 	{
 	  if (obj)
 	    *obj = ptr;
@@ -1589,20 +1592,20 @@ dom_oracle::recomputed_relation (basic_block orig_bb, edge e, tree ssa1,
 // starting with block BB
 
 relation_kind
-dom_oracle::find_relation_dom (basic_block start_bb, unsigned v1, unsigned v2) const
+dom_oracle::find_relation_dom (basic_block start_bb, tree ssa1, tree ssa2) const
 {
   relation_kind r;
+  unsigned v1 = SSA_NAME_VERSION (ssa1);
+  unsigned v2 = SSA_NAME_VERSION (ssa2);
   // IF either name does not occur in a relation anywhere, there isn't one.
   if (!bitmap_bit_p (m_relation_set, v1) || !bitmap_bit_p (m_relation_set, v2))
     return VREL_VARYING;
   edge outgoing_edge = NULL;
-  tree ssa1 = ssa_name (v1);
-  tree ssa2 = ssa_name (v2);
   for (basic_block bb = start_bb;
        bb;
        bb = get_immediate_dominator (CDI_DOMINATORS, bb))
     {
-      r = find_relation_block (bb->index, v1, v2);
+      r = find_relation_block (bb->index, ssa1, ssa2);
       // Now check if recomputed values on the outgoing edge might create
       // a relation.
       if (r == VREL_VARYING && outgoing_edge)
@@ -1649,7 +1652,7 @@ dom_oracle::query (basic_block bb, tree ssa1, tree ssa2)
     return kind;
 
   // Initially look for a direct relationship and just return that.
-  kind = find_relation_dom (bb, v1, v2);
+  kind = find_relation_dom (bb, ssa1, ssa2);
   if (kind != VREL_VARYING)
     return kind;
 
diff --git a/gcc/value-relation.h b/gcc/value-relation.h
index 4693b7cc0c46..eed79c5e83d8 100644
--- a/gcc/value-relation.h
+++ b/gcc/value-relation.h
@@ -245,9 +245,9 @@ protected:
   vec <relation_chain_head> m_relations;  // Index by BB, list of relations.
   relation_kind find_relation_block (unsigned bb, const_bitmap b1,
 				     const_bitmap b2) const;
-  relation_kind find_relation_block (int bb, unsigned v1, unsigned v2,
+  relation_kind find_relation_block (int bb, tree ssa1, tree ssa2,
 				     relation_chain **obj = NULL) const;
-  relation_kind find_relation_dom (basic_block bb, unsigned v1, unsigned v2) const;
+  relation_kind find_relation_dom (basic_block bb, tree ssa1, tree ssa2) const;
   relation_chain *create_relation_in_bb (basic_block bb, relation_kind k,
 					 tree op1, tree op2);
   relation_chain *search_and_merge_relation (basic_block bb, relation_kind k,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.