From a36b8a1ee87bc9b3be13bc70108e7f03d74cd4ad Mon Sep 17 00:00:00 2001
From: Jan Hubicka <jh@suse.cz>
Date: Wed, 5 Sep 2007 12:49:01 +0200
Subject: [PATCH] regrename.c (pass_regrename, [...]): Add RTL sharing
 verifier.

	* regrename.c (pass_regrename, pass_cprop_hardreg): Add RTL sharing
	verifier.
	* fwprop.c (pass_rtl_fwprop, pass_rtl_fwprop_add): Likewise.
	* see.c (pass_see): Likewise.
	* tracer.c (pass_tracer): Likewise.
	* postreload-gcse.c (pass_gcse2): Likewise.
	* postreload.c (pass_postreload_cse): Likewise.
	* mode-switching.c (pass_mode_switching): Likewise.
	* modulo-sched.c (pass_sms): Likewise.
	* cse.c (cse_insn): Likewise.
	* web.c (pass_web): Likweise.
	* combine-stack-adj.c (pass_stack_adjustments): Likewise.
	* dce.c (pass_ud_rtl_dce, pass_fast_rtl_dce): Likewise.
	* loop-init.c (pass_rtl_loop_init): Likewise.
	(pass_rtl_loop_done, pass_rtl_move_loop_, pass_rtl_unswitch,
	pass_rtl_unroll_and, pass_rtl_doloop): Likewise.
	* global.c (pass_global_alloc): Likewise.
	* ifcvt.c (pass_rtl_ifcvt, pass_if_after_combine,
	pass_if_after_reload): Likewise.
	* reload.c (pass_peephole2, pass_split_for_shoren_branches): Likewise.
	* dse.c (pass_rtl_dse1, pass_rtl_dse2): Likewise.
	* regmove.c (pass_regmove): Likewise.
	* function.c (pass_thread_prologugues_epilogues): Likewise.
	* gcse.c (pass_gcse): Likewise.
	* rtl-factoring.c (pass_rtl_seqabstr): Likewise.
	* lower-subreg.c (pass_lower_subreg2): Likewise.
	* bt-load.c (pass_branch_target_load): Likewise.
	* emit-rtl.c (pass_unshare_all_rtl): Likewise.
	* cfgcleanup.c (pass_jump, pass_jump2): Likewise.
	* combine.c (pass_combine): Likewise.
	* bb-reorder.c (pass_duplicate_comp, pass_reorder_blocks): Likewise.
	(pass_partition_blocks): Likewise.
	* var-tracking.c (pass_variable_track): Likewise.
	* reg-stack.c (pass_stack_regs_run): Likewise.
	* sched-rgn.c (pass_sched, pass_sched2): Likewise.
	* passes.c (pass_postreload): Likewise.
	(execute_function_todo): Add TODO_verify_rtl_sharing handling code.
	* tree-pass.h (TODO_verify_rtl_sharing): New.
	(TODO_update_ssa, TODO_update_ssa_no_phi, TODO_update_ssa_full_phi,
	TODO_update_ssa_only_virtuals, TODO_remove_unused_locals,
	TODO_set_props, TODO_df_finish, TODO_df_verify,
	TODO_mark_first_instance, TODO_rebuild_alias): Renumber.

From-SVN: r128126
---
 gcc/ChangeLog           | 45 +++++++++++++++++++++++++++++++++++++++++
 gcc/bb-reorder.c        |  6 +++---
 gcc/bt-load.c           |  1 +
 gcc/cfgcleanup.c        |  3 +--
 gcc/combine-stack-adj.c |  2 +-
 gcc/combine.c           |  2 +-
 gcc/cse.c               | 10 ++++-----
 gcc/dce.c               |  4 ++--
 gcc/dse.c               |  4 ++--
 gcc/emit-rtl.c          |  2 +-
 gcc/function.c          |  2 +-
 gcc/fwprop.c            |  4 ++--
 gcc/gcse.c              |  2 +-
 gcc/global.c            |  4 ++--
 gcc/ifcvt.c             |  6 +++---
 gcc/loop-init.c         | 12 +++++------
 gcc/lower-subreg.c      |  2 +-
 gcc/mode-switching.c    |  2 +-
 gcc/modulo-sched.c      |  2 +-
 gcc/passes.c            |  4 +++-
 gcc/postreload-gcse.c   |  4 ++--
 gcc/postreload.c        |  2 +-
 gcc/recog.c             |  4 ++--
 gcc/reg-stack.c         |  2 +-
 gcc/regmove.c           |  2 +-
 gcc/regrename.c         |  4 ++--
 gcc/rtl-factoring.c     |  2 +-
 gcc/sched-rgn.c         |  4 ++--
 gcc/see.c               |  2 +-
 gcc/tracer.c            |  2 +-
 gcc/tree-pass.h         | 21 ++++++++++---------
 gcc/var-tracking.c      |  2 +-
 gcc/web.c               |  2 +-
 33 files changed, 110 insertions(+), 62 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab495fee0561..7ff57f4bfedb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,48 @@
+2007-09-05  Jan Hubicka  <jh@suse.cz>
+
+	* regrename.c (pass_regrename, pass_cprop_hardreg): Add RTL sharing
+	verifier.
+	* fwprop.c (pass_rtl_fwprop, pass_rtl_fwprop_add): Likewise.
+	* see.c (pass_see): Likewise.
+	* tracer.c (pass_tracer): Likewise.
+	* postreload-gcse.c (pass_gcse2): Likewise.
+	* postreload.c (pass_postreload_cse): Likewise.
+	* mode-switching.c (pass_mode_switching): Likewise.
+	* modulo-sched.c (pass_sms): Likewise.
+	* cse.c (cse_insn): Likewise.
+	* web.c (pass_web): Likweise.
+	* combine-stack-adj.c (pass_stack_adjustments): Likewise.
+	* dce.c (pass_ud_rtl_dce, pass_fast_rtl_dce): Likewise.
+	* loop-init.c (pass_rtl_loop_init): Likewise.
+	(pass_rtl_loop_done, pass_rtl_move_loop_, pass_rtl_unswitch,
+	pass_rtl_unroll_and, pass_rtl_doloop): Likewise.
+	* global.c (pass_global_alloc): Likewise.
+	* ifcvt.c (pass_rtl_ifcvt, pass_if_after_combine,
+	pass_if_after_reload): Likewise.
+	* reload.c (pass_peephole2, pass_split_for_shoren_branches): Likewise.
+	* dse.c (pass_rtl_dse1, pass_rtl_dse2): Likewise.
+	* regmove.c (pass_regmove): Likewise.
+	* function.c (pass_thread_prologugues_epilogues): Likewise.
+	* gcse.c (pass_gcse): Likewise.
+	* rtl-factoring.c (pass_rtl_seqabstr): Likewise.
+	* lower-subreg.c (pass_lower_subreg2): Likewise.
+	* bt-load.c (pass_branch_target_load): Likewise.
+	* emit-rtl.c (pass_unshare_all_rtl): Likewise.
+	* cfgcleanup.c (pass_jump, pass_jump2): Likewise.
+	* combine.c (pass_combine): Likewise.
+	* bb-reorder.c (pass_duplicate_comp, pass_reorder_blocks): Likewise.
+	(pass_partition_blocks): Likewise.
+	* var-tracking.c (pass_variable_track): Likewise.
+	* reg-stack.c (pass_stack_regs_run): Likewise.
+	* sched-rgn.c (pass_sched, pass_sched2): Likewise.
+	* passes.c (pass_postreload): Likewise.
+	(execute_function_todo): Add TODO_verify_rtl_sharing handling code.
+	* tree-pass.h (TODO_verify_rtl_sharing): New.
+	(TODO_update_ssa, TODO_update_ssa_no_phi, TODO_update_ssa_full_phi,
+	TODO_update_ssa_only_virtuals, TODO_remove_unused_locals,
+	TODO_set_props, TODO_df_finish, TODO_df_verify,
+	TODO_mark_first_instance, TODO_rebuild_alias): Renumber.
+
 2007-09-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* fold-const.c (all_ones_mask_p, sign_bit_p, simple_operand_p,
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 9bf4086f5ae9..8f20f87ce097 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -2084,7 +2084,7 @@ struct tree_opt_pass pass_duplicate_computed_gotos =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing,/* todo_flags_finish */
   0                                     /* letter */
 };
 
@@ -2234,7 +2234,7 @@ struct tree_opt_pass pass_reorder_blocks =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing,/* todo_flags_finish */
   'B'                                   /* letter */
 };
 
@@ -2272,7 +2272,7 @@ struct tree_opt_pass pass_partition_blocks =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing,/* todo_flags_finish */
   0                                     /* letter */
 };
 
diff --git a/gcc/bt-load.c b/gcc/bt-load.c
index bf9214b1ae4d..c30f2c3342e7 100644
--- a/gcc/bt-load.c
+++ b/gcc/bt-load.c
@@ -1519,6 +1519,7 @@ struct tree_opt_pass pass_branch_target_load_optimize1 =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_dump_func |
+  TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'd'                                   /* letter */
 };
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 1f9304d43ba7..5086784cd4c4 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -2281,7 +2281,6 @@ struct tree_opt_pass pass_jump =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   TODO_ggc_collect,                     /* todo_flags_start */
-  TODO_dump_func |
   TODO_verify_flow,                     /* todo_flags_finish */
   'i'                                   /* letter */
 };
@@ -2312,7 +2311,7 @@ struct tree_opt_pass pass_jump2 =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   TODO_ggc_collect,                     /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing,/* todo_flags_finish */
   'j'                                   /* letter */
 };
 
diff --git a/gcc/combine-stack-adj.c b/gcc/combine-stack-adj.c
index fd6fd27c0c66..37942bc45192 100644
--- a/gcc/combine-stack-adj.c
+++ b/gcc/combine-stack-adj.c
@@ -485,7 +485,7 @@ struct tree_opt_pass pass_stack_adjustments =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   0                                     /* letter */
diff --git a/gcc/combine.c b/gcc/combine.c
index c8ed4402f931..133dfbe5433e 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -13001,7 +13001,7 @@ struct tree_opt_pass pass_combine =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_dump_func |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'c'                                   /* letter */
 };
diff --git a/gcc/cse.c b/gcc/cse.c
index c2b4d182bd0c..fc4f895c8b0c 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4786,14 +4786,14 @@ cse_insn (rtx insn, rtx libcall_insn)
 				  src_related_cost, src_related_regcost) <= 0
 		   && preferable (src_eqv_cost, src_eqv_regcost,
 				  src_elt_cost, src_elt_regcost) <= 0)
-	    trial = copy_rtx (src_eqv_here), src_eqv_cost = MAX_COST;
+	    trial = src_eqv_here, src_eqv_cost = MAX_COST;
 	  else if (src_related
 		   && preferable (src_related_cost, src_related_regcost,
 				  src_elt_cost, src_elt_regcost) <= 0)
-	    trial = copy_rtx (src_related), src_related_cost = MAX_COST;
+	    trial = src_related, src_related_cost = MAX_COST;
 	  else
 	    {
-	      trial = copy_rtx (elt->exp);
+	      trial = elt->exp;
 	      elt = elt->next_same_value;
 	      src_elt_cost = MAX_COST;
 	    }
@@ -7024,7 +7024,7 @@ struct tree_opt_pass pass_cse =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect |
   TODO_verify_flow,                     /* todo_flags_finish */
@@ -7082,7 +7082,7 @@ struct tree_opt_pass pass_cse2 =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect |
   TODO_verify_flow,                     /* todo_flags_finish */
diff --git a/gcc/dce.c b/gcc/dce.c
index c5af55ecc12e..dec86692bf61 100644
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -498,7 +498,7 @@ struct tree_opt_pass pass_ud_rtl_dce =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_dump_func |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'w'                                   /* letter */
 };
@@ -816,7 +816,7 @@ struct tree_opt_pass pass_fast_rtl_dce =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_dump_func |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'w'                                   /* letter */
 };
diff --git a/gcc/dse.c b/gcc/dse.c
index f8859f6c91d1..2226ae14dd24 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -3082,7 +3082,7 @@ struct tree_opt_pass pass_rtl_dse1 =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_dump_func |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'w'                                   /* letter */
 };
@@ -3101,7 +3101,7 @@ struct tree_opt_pass pass_rtl_dse2 =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_dump_func |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'w'                                   /* letter */
 };
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index cf6b2f3ccd7b..b3f21013a0bc 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2258,7 +2258,7 @@ struct tree_opt_pass pass_unshare_all_rtl =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   0                                     /* letter */
 };
 
diff --git a/gcc/function.c b/gcc/function.c
index ec7c2e36f717..f4fc6a3ced69 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5513,7 +5513,7 @@ struct tree_opt_pass pass_thread_prologue_and_epilogue =
   TODO_verify_flow,                     /* todo_flags_start */
   TODO_dump_func |
   TODO_df_verify |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'w'                                   /* letter */
 };
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index 859fba5837e0..ff3123fe9e38 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -999,7 +999,7 @@ struct tree_opt_pass pass_rtl_fwprop =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   0                                     /* letter */
 };
@@ -1041,7 +1041,7 @@ struct tree_opt_pass pass_rtl_fwprop_addr =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   0                                     /* letter */
 };
diff --git a/gcc/gcse.c b/gcc/gcse.c
index af10db685301..b6b7c5e410cb 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -6746,7 +6746,7 @@ struct tree_opt_pass pass_gcse =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_verify_flow | TODO_ggc_collect,  /* todo_flags_finish */
   'G'                                   /* letter */
diff --git a/gcc/global.c b/gcc/global.c
index c346e6ad5f2b..b74629381dee 100644
--- a/gcc/global.c
+++ b/gcc/global.c
@@ -2108,8 +2108,8 @@ struct tree_opt_pass pass_global_alloc =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func |
-  TODO_ggc_collect,                     /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing
+  | TODO_ggc_collect,                   /* todo_flags_finish */
   'g'                                   /* letter */
 };
 
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 644a5e1c6ed4..7810d7e96168 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -4088,7 +4088,7 @@ struct tree_opt_pass pass_rtl_ifcvt =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   'C'                                   /* letter */
 };
@@ -4122,7 +4122,7 @@ struct tree_opt_pass pass_if_after_combine =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'C'                                   /* letter */
@@ -4156,7 +4156,7 @@ struct tree_opt_pass pass_if_after_reload =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'E'                                   /* letter */
diff --git a/gcc/loop-init.c b/gcc/loop-init.c
index 79d9056f2b36..57f9768b3772 100644
--- a/gcc/loop-init.c
+++ b/gcc/loop-init.c
@@ -185,7 +185,7 @@ struct tree_opt_pass pass_rtl_loop_init =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'L'                                   /* letter */
 };
 
@@ -218,7 +218,7 @@ struct tree_opt_pass pass_rtl_loop_done =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'L'                                   /* letter */
 };
 
@@ -252,7 +252,7 @@ struct tree_opt_pass pass_rtl_move_loop_invariants =
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */ 
   TODO_df_verify |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   'L'                                   /* letter */
 };
@@ -286,7 +286,7 @@ struct tree_opt_pass pass_rtl_unswitch =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'L'                                   /* letter */
 };
 
@@ -332,7 +332,7 @@ struct tree_opt_pass pass_rtl_unroll_and_peel_loops =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'L'                                   /* letter */
 };
 
@@ -371,7 +371,7 @@ struct tree_opt_pass pass_rtl_doloop =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'L'                                   /* letter */
 };
 
diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c
index 696ec61e58d5..b8e2eb658424 100644
--- a/gcc/lower-subreg.c
+++ b/gcc/lower-subreg.c
@@ -1457,7 +1457,7 @@ struct tree_opt_pass pass_lower_subreg2 =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect |
   TODO_verify_flow,                     /* todo_flags_finish */
diff --git a/gcc/mode-switching.c b/gcc/mode-switching.c
index dc05208d3cdd..5f4f95fa8995 100644
--- a/gcc/mode-switching.c
+++ b/gcc/mode-switching.c
@@ -769,7 +769,7 @@ struct tree_opt_pass pass_mode_switching =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   0                                     /* letter */
 };
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index bb940a72a2bb..37c92048b41f 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -2653,7 +2653,7 @@ struct tree_opt_pass pass_sms =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   TODO_dump_func,                       /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'm'                                   /* letter */
diff --git a/gcc/passes.c b/gcc/passes.c
index e2f0676e192e..db6128e9b869 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -320,7 +320,7 @@ struct tree_opt_pass pass_postreload =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_ggc_collect,                     /* todo_flags_finish */
+  TODO_ggc_collect | TODO_verify_rtl_sharing, /* todo_flags_finish */
   0					/* letter */
 };
 
@@ -959,6 +959,8 @@ execute_function_todo (void *data)
     verify_stmts ();
   if (flags & TODO_verify_loops)
     verify_loop_closed_ssa ();
+  if (flags & TODO_verify_rtl_sharing)
+    verify_rtl_sharing ();
 #endif
 
   cfun->last_verified = flags & TODO_verify_all;
diff --git a/gcc/postreload-gcse.c b/gcc/postreload-gcse.c
index 3cbd7ebae0d0..5f3192f083d0 100644
--- a/gcc/postreload-gcse.c
+++ b/gcc/postreload-gcse.c
@@ -1322,8 +1322,8 @@ struct tree_opt_pass pass_gcse2 =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func |
-  TODO_verify_flow | TODO_ggc_collect,  /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing
+  | TODO_verify_flow | TODO_ggc_collect,/* todo_flags_finish */
   'J'                                   /* letter */
 };
 
diff --git a/gcc/postreload.c b/gcc/postreload.c
index ff2356a76fbb..674160b09546 100644
--- a/gcc/postreload.c
+++ b/gcc/postreload.c
@@ -1598,7 +1598,7 @@ struct tree_opt_pass pass_postreload_cse =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   'o'                                   /* letter */
 };
diff --git a/gcc/recog.c b/gcc/recog.c
index 7ee2f97d3fe5..6a9ae4510c0d 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -3332,7 +3332,7 @@ struct tree_opt_pass pass_peephole2 =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   'z'                                   /* letter */
 };
@@ -3493,7 +3493,7 @@ struct tree_opt_pass pass_split_for_shorten_branches =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   0                                     /* letter */
 };
 
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index 1fbd322aaf43..f5d263fbff29 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -3242,7 +3242,7 @@ struct tree_opt_pass pass_stack_regs_run =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'k'                                   /* letter */
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 5cdd658a505c..4cb083cbd48d 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -2121,7 +2121,7 @@ struct tree_opt_pass pass_regmove =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'N'                                   /* letter */
diff --git a/gcc/regrename.c b/gcc/regrename.c
index 5ff3062503ed..a25319e2339b 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -1952,7 +1952,7 @@ struct tree_opt_pass pass_regrename =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,                       /* todo_flags_finish */
   'n'                                   /* letter */
 };
@@ -1985,7 +1985,7 @@ struct tree_opt_pass pass_cprop_hardreg =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'n'                                   /* letter */
 };
 
diff --git a/gcc/rtl-factoring.c b/gcc/rtl-factoring.c
index d0386d61c3e6..cf07db9607c1 100644
--- a/gcc/rtl-factoring.c
+++ b/gcc/rtl-factoring.c
@@ -1428,7 +1428,7 @@ struct tree_opt_pass pass_rtl_seqabstr = {
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_ggc_collect,                     /* todo_flags_finish */
   'Q'                                   /* letter */
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 760420be50b8..6df5c33ec254 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -3185,7 +3185,7 @@ struct tree_opt_pass pass_sched =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_verify_flow |
   TODO_ggc_collect,                     /* todo_flags_finish */
@@ -3205,7 +3205,7 @@ struct tree_opt_pass pass_sched2 =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func |
   TODO_verify_flow |
   TODO_ggc_collect,                     /* todo_flags_finish */
diff --git a/gcc/see.c b/gcc/see.c
index 7a351613b138..0302af2d94fb 100644
--- a/gcc/see.c
+++ b/gcc/see.c
@@ -3874,7 +3874,7 @@ struct tree_opt_pass pass_see =
   0,					/* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_df_verify |
-  TODO_df_finish |
+  TODO_df_finish | TODO_verify_rtl_sharing |
   TODO_dump_func,			/* todo_flags_finish */
   'u'					/* letter */
 };
diff --git a/gcc/tracer.c b/gcc/tracer.c
index 2f98c57b65c6..44a2e507e636 100644
--- a/gcc/tracer.c
+++ b/gcc/tracer.c
@@ -410,7 +410,7 @@ struct tree_opt_pass pass_tracer =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing, /* todo_flags_finish */
   'T'                                   /* letter */
 };
 
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index fc6f1359c4d0..45ea307df59d 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -169,6 +169,7 @@ struct dump_file_info
 #define TODO_dump_cgraph		(1 << 7)
 #define TODO_remove_functions		(1 << 8)
 #define TODO_rebuild_frequencies	(1 << 9)
+#define TODO_verify_rtl_sharing         (1 << 10)
 
 /* To-do flags for calls to update_ssa.  */
 
@@ -180,13 +181,13 @@ struct dump_file_info
    in blocks that have one or more edges with no incoming definition
    for O_j.  This would lead to uninitialized warnings for O_j's
    symbol.  */
-#define TODO_update_ssa			(1 << 10)
+#define TODO_update_ssa			(1 << 11)
 
 /* Update the SSA form without inserting any new PHI nodes at all.
    This is used by passes that have either inserted all the PHI nodes
    themselves or passes that need only to patch use-def and def-def
    chains for virtuals (e.g., DCE).  */
-#define TODO_update_ssa_no_phi		(1 << 11)
+#define TODO_update_ssa_no_phi		(1 << 12)
 
 /* Insert PHI nodes everywhere they are needed.  No pruning of the
    IDF is done.  This is used by passes that need the PHI nodes for
@@ -197,7 +198,7 @@ struct dump_file_info
    may be doing something wrong.  Inserting PHI nodes for an old name
    where not all edges carry a new replacement may lead to silent
    codegen errors or spurious uninitialized warnings.  */
-#define TODO_update_ssa_full_phi	(1 << 12)
+#define TODO_update_ssa_full_phi	(1 << 13)
 
 /* Passes that update the SSA form on their own may want to delegate
    the updating of virtual names to the generic updater.  Since FUD
@@ -205,30 +206,30 @@ struct dump_file_info
    to do.  NOTE: If this flag is used, any OLD->NEW mappings for real
    names are explicitly destroyed and only the symbols marked for
    renaming are processed.  */
-#define TODO_update_ssa_only_virtuals	(1 << 13)
+#define TODO_update_ssa_only_virtuals	(1 << 14)
 
 /* Some passes leave unused local variables that can be removed from
    cfun->unexpanded_var_list.  This reduces the size of dump files and
    the memory footprint for VAR_DECLs.  */
-#define TODO_remove_unused_locals	(1 << 14)
+#define TODO_remove_unused_locals	(1 << 15)
 
 /* Internally used for the first in a sequence of passes.  It is set
    for the passes that are handed to register_dump_files.  */
-#define TODO_set_props			(1 << 15)
+#define TODO_set_props			(1 << 16)
 
 /* Call df_finish at the end of the pass.  This is done after all of
    the dumpers have been allowed to run so that they have access to
    the instance before it is destroyed.  */
-#define TODO_df_finish                  (1 << 16)
+#define TODO_df_finish                  (1 << 17)
 
 /* Call df_verify at the end of the pass if checking is enabled.  */
-#define TODO_df_verify                  (1 << 17)
+#define TODO_df_verify                  (1 << 18)
 
 /* Internally used for the first instance of a pass.  */
-#define TODO_mark_first_instance	(1 << 18)
+#define TODO_mark_first_instance	(1 << 19)
 
 /* Rebuild aliasing info.  */
-#define TODO_rebuild_alias                (1 << 19)
+#define TODO_rebuild_alias                (1 << 20)
 
 #define TODO_update_ssa_any		\
     (TODO_update_ssa			\
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 92228672babf..97986b668866 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -3296,7 +3296,7 @@ struct tree_opt_pass pass_variable_tracking =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_dump_func,                       /* todo_flags_finish */
+  TODO_dump_func | TODO_verify_rtl_sharing,/* todo_flags_finish */
   'V'                                   /* letter */
 };
 
diff --git a/gcc/web.c b/gcc/web.c
index bd97ee555446..f45d344d9d5f 100644
--- a/gcc/web.c
+++ b/gcc/web.c
@@ -384,7 +384,7 @@ struct tree_opt_pass pass_web =
   0,                                    /* properties_provided */
   0,                                    /* properties_destroyed */
   0,                                    /* todo_flags_start */
-  TODO_df_finish | 
+  TODO_df_finish | TODO_verify_rtl_sharing | 
   TODO_dump_func,                       /* todo_flags_finish */
   'Z'                                   /* letter */
 };
-- 
GitLab