[gcc(refs/users/aoliva/heads/testme)] hardcfr: add checking at exceptions and noreturn calls: tweaks

Alexandre Oliva aoliva@gcc.gnu.org
Thu Aug 11 01:57:50 GMT 2022


https://gcc.gnu.org/g:125b843bb77c74a9329fa1b1db4dfcc688b5a054

commit 125b843bb77c74a9329fa1b1db4dfcc688b5a054
Author: Alexandre Oliva <oliva@gnu.org>
Date:   Wed Aug 10 22:56:28 2022 -0300

    hardcfr: add checking at exceptions and noreturn calls: tweaks

Diff:
---
 gcc/gimple-harden-control-flow.cc | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/gcc/gimple-harden-control-flow.cc b/gcc/gimple-harden-control-flow.cc
index 5066a43fe6c..6d56e78dd8d 100644
--- a/gcc/gimple-harden-control-flow.cc
+++ b/gcc/gimple-harden-control-flow.cc
@@ -772,10 +772,6 @@ pass_harden_control_flow_redundancy::execute (function *fun)
 	      if (!bb_eh_cleanup)
 		{
 		  bb_eh_cleanup = create_empty_bb (bb);
-		  if (dom_info_available_p (CDI_DOMINATORS))
-		    set_immediate_dominator (CDI_DOMINATORS, bb_eh_cleanup, bb);
-		  if (current_loops)
-		    add_bb_to_loop (bb_eh_cleanup, current_loops->tree_root);
 
 		  /* Make the new block an EH cleanup for the call.  */
 		  eh_region new_r = gen_eh_region_cleanup (NULL);
@@ -791,15 +787,18 @@ pass_harden_control_flow_redundancy::execute (function *fun)
 		  gresx *resx = gimple_build_resx (new_r->index);
 		  gsi_insert_before (&ehgsi, resx, GSI_SAME_STMT);
 		}
-	      else
-		{
-		  // Update immedite dominator and loop?
-		}
 
 	      add_stmt_to_eh_lp (stmt, lp_eh_cleanup);
 	      /* Finally, wire the EH cleanup block into the CFG.  */
 	      make_eh_edges (stmt);		}
 	}
+
+      if (bb_eh_cleanup && dom_info_available_p (CDI_DOMINATORS))
+	{
+	  basic_block immdom;
+	  immdom = recompute_dominator (CDI_DOMINATORS, bb_eh_cleanup);
+	  set_immediate_dominator (CDI_DOMINATORS, bb_eh_cleanup, immdom);
+	}
     }
 
   /* We wish to add verification at blocks without successors, such as


More information about the Gcc-cvs mailing list