]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Minor cleanup/prep in DOM
authorJeff Law <jeffreyalaw@gmail.com>
Fri, 30 Sep 2022 22:59:24 +0000 (18:59 -0400)
committerJeff Law <jeffreyalaw@gmail.com>
Fri, 30 Sep 2022 23:04:43 +0000 (19:04 -0400)
It's a bit weird that free_dom_edge_info leaves a dangling pointer in e->aux.
Not sure what I was thinking.

There's two callers.  One wipes e->aux immediately after the call, the other
attaches a newly created object immediately after the call.  So we can wipe
e->aux within the call and simplify one of the two call sites.

This is preparatory work for a minor optimization where we want to detect
another class of edge equivalences in DOM (until something better is available)
and either attach them an existing edge_info structure or create a new one if
one doesn't currently exist for a given edge.

gcc/
* tree-ssa-dom.cc (free_dom_edge_info): Clear e->aux too.
(free_all_edge_infos): Do not clear e->aux here.

gcc/tree-ssa-dom.cc

index 84bef798f52daca4b4b46e6963d65f2f61f914bd..fa43dbe6c44dbbd51b5e010e7153a2ad3ac14ae4 100644 (file)
@@ -393,7 +393,8 @@ edge_info::record_simple_equiv (tree lhs, tree rhs)
     simple_equivalences.safe_push (equiv_pair (lhs, rhs));
 }
 
-/* Free the edge_info data attached to E, if it exists.  */
+/* Free the edge_info data attached to E, if it exists and
+   clear e->aux.  */
 
 void
 free_dom_edge_info (edge e)
@@ -402,6 +403,7 @@ free_dom_edge_info (edge e)
 
   if (edge_info)
     delete edge_info;
+  e->aux = NULL;
 }
 
 /* Free all EDGE_INFO structures associated with edges in the CFG.
@@ -420,10 +422,7 @@ free_all_edge_infos (void)
   FOR_EACH_BB_FN (bb, cfun)
     {
       FOR_EACH_EDGE (e, ei, bb->preds)
-        {
-         free_dom_edge_info (e);
-         e->aux = NULL;
-       }
+       free_dom_edge_info (e);
     }
 }