[committed] RISC-V: Factor out vector manager code in vsetvli insertion pass. [NFC]

Message ID 20230508143816.45084-1-kito.cheng@sifive.com
State Repeat Merge
Headers
Series [committed] RISC-V: Factor out vector manager code in vsetvli insertion pass. [NFC] |

Checks

Context Check Description
snail/gcc-patch-check warning Git am fail log

Commit Message

Kito Cheng May 8, 2023, 2:38 p.m. UTC
  gcc/ChangeLog:

	* config/riscv/riscv-vsetvl.cc (pass_vsetvl::get_vector_info):
	New.
	(pass_vsetvl::get_block_info): New.
	(pass_vsetvl::update_vector_info): New.
	(pass_vsetvl::simple_vsetvl): Use get_vector_info.
	(pass_vsetvl::compute_local_backward_infos): Ditto.
	(pass_vsetvl::transfer_before): Ditto.
	(pass_vsetvl::transfer_after): Ditto.
	(pass_vsetvl::emit_local_forward_vsetvls): Ditto.
	(pass_vsetvl::local_eliminate_vsetvl_insn): Ditto.
	(pass_vsetvl::cleanup_insns): Ditto.
	(pass_vsetvl::compute_local_backward_infos): Use
	update_vector_info.
---
 gcc/config/riscv/riscv-vsetvl.cc | 87 ++++++++++++++++++++++++--------
 1 file changed, 67 insertions(+), 20 deletions(-)
  

Patch

diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc
index f55907a410e6..d4d6f336ef99 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -2596,7 +2596,15 @@  const pass_data pass_data_vsetvl = {
 class pass_vsetvl : public rtl_opt_pass
 {
 private:
-  class vector_infos_manager *m_vector_manager;
+  vector_infos_manager *m_vector_manager;
+
+  const vector_insn_info &get_vector_info (const rtx_insn *) const;
+  const vector_insn_info &get_vector_info (const insn_info *) const;
+  const vector_block_info &get_block_info (const basic_block) const;
+  const vector_block_info &get_block_info (const bb_info *) const;
+  vector_block_info &get_block_info (const basic_block);
+  vector_block_info &get_block_info (const bb_info *);
+  void update_vector_info (const insn_info *, const vector_insn_info &);
 
   void simple_vsetvl (void) const;
   void lazy_vsetvl (void);
@@ -2647,6 +2655,49 @@  public:
   virtual unsigned int execute (function *) final override;
 }; // class pass_vsetvl
 
+const vector_insn_info &
+pass_vsetvl::get_vector_info (const rtx_insn *i) const
+{
+  return m_vector_manager->vector_insn_infos[INSN_UID (i)];
+}
+
+const vector_insn_info &
+pass_vsetvl::get_vector_info (const insn_info *i) const
+{
+  return m_vector_manager->vector_insn_infos[i->uid ()];
+}
+
+const vector_block_info &
+pass_vsetvl::get_block_info (const basic_block bb) const
+{
+  return m_vector_manager->vector_block_infos[bb->index];
+}
+
+const vector_block_info &
+pass_vsetvl::get_block_info (const bb_info *bb) const
+{
+  return m_vector_manager->vector_block_infos[bb->index ()];
+}
+
+vector_block_info &
+pass_vsetvl::get_block_info (const basic_block bb)
+{
+  return m_vector_manager->vector_block_infos[bb->index];
+}
+
+vector_block_info &
+pass_vsetvl::get_block_info (const bb_info *bb)
+{
+  return m_vector_manager->vector_block_infos[bb->index ()];
+}
+
+void
+pass_vsetvl::update_vector_info (const insn_info *i,
+				 const vector_insn_info &new_info)
+{
+  m_vector_manager->vector_insn_infos[i->uid ()] = new_info;
+}
+
 /* Simple m_vsetvl_insert vsetvl for optimize == 0.  */
 void
 pass_vsetvl::simple_vsetvl (void) const
@@ -2667,8 +2718,7 @@  pass_vsetvl::simple_vsetvl (void) const
 	    continue;
 	  if (has_vtype_op (rinsn))
 	    {
-	      const auto info
-		= m_vector_manager->vector_insn_infos[INSN_UID (rinsn)];
+	      const auto info = get_vector_info (rinsn);
 	      emit_vsetvl_insn (VSETVL_DISCARD_RESULT, EMIT_BEFORE, info,
 				NULL_RTX, rinsn);
 	    }
@@ -2688,11 +2738,11 @@  pass_vsetvl::compute_local_backward_infos (const bb_info *bb)
 
   for (insn_info *insn : bb->reverse_real_nondebug_insns ())
     {
-      auto &info = m_vector_manager->vector_insn_infos[insn->uid ()];
+      auto &info = get_vector_info (insn);
 
       if (info.uninit_p ())
 	/* If it is uninitialized, propagate it directly.  */
-	info = change;
+	update_vector_info (insn, change);
       else if (info.unknown_p ())
 	change = info;
       else
@@ -2704,7 +2754,7 @@  pass_vsetvl::compute_local_backward_infos (const bb_info *bb)
 		    && !reg_available_p (insn, change))
 		  && change.compatible_p (info))
 		{
-		  info = change.merge (info, LOCAL_MERGE);
+		  update_vector_info (insn, change.merge (info, LOCAL_MERGE));
 		  /* Fix PR109399, we should update user vsetvl instruction
 		     if there is a change in demand fusion.  */
 		  if (vsetvl_insn_p (insn->rtl ()))
@@ -2744,8 +2794,7 @@  pass_vsetvl::transfer_before (vector_insn_info &info, insn_info *insn) const
   if (!has_vtype_op (insn->rtl ()))
     return;
 
-  const vector_insn_info require
-    = m_vector_manager->vector_insn_infos[insn->uid ()];
+  const vector_insn_info require = get_vector_info (insn);
   if (info.valid_p () && !need_vsetvl (require, info))
     return;
   info = require;
@@ -2759,7 +2808,7 @@  pass_vsetvl::transfer_after (vector_insn_info &info, insn_info *insn) const
 {
   if (vector_config_insn_p (insn->rtl ()))
     {
-      info = m_vector_manager->vector_insn_infos[insn->uid ()];
+      info = get_vector_info (insn);
       return;
     }
 
@@ -2795,8 +2844,7 @@  pass_vsetvl::emit_local_forward_vsetvls (const bb_info *bb)
 	  if (static_cast<const vl_vtype_info &> (prev_info)
 	      != static_cast<const vl_vtype_info &> (curr_info))
 	    {
-	      const auto require
-		= m_vector_manager->vector_insn_infos[insn->uid ()];
+	      const auto require = get_vector_info (insn);
 	      if (!require.compatible_p (
 		    static_cast<const vl_vtype_info &> (prev_info)))
 		type = insert_vsetvl (EMIT_BEFORE, insn->rtl (), require,
@@ -3735,7 +3783,7 @@  pass_vsetvl::refine_vsetvls (void) const
   basic_block cfg_bb;
   FOR_EACH_BB_FN (cfg_bb, cfun)
     {
-      auto info = m_vector_manager->vector_block_infos[cfg_bb->index].local_dem;
+      auto info = get_block_info(cfg_bb).local_dem;
       insn_info *insn = info.get_insn ();
       if (!info.valid_p ())
 	continue;
@@ -3782,7 +3830,7 @@  pass_vsetvl::cleanup_vsetvls ()
   FOR_EACH_BB_FN (cfg_bb, cfun)
     {
       auto &info
-	= m_vector_manager->vector_block_infos[cfg_bb->index].reaching_out;
+	= get_block_info(cfg_bb).reaching_out;
       gcc_assert (m_vector_manager->expr_set_num (
 		    m_vector_manager->vector_del[cfg_bb->index])
 		  <= 1);
@@ -3795,7 +3843,7 @@  pass_vsetvl::cleanup_vsetvls ()
 	      else
 		{
 		  const auto dem
-		    = m_vector_manager->vector_block_infos[cfg_bb->index]
+		    = get_block_info(cfg_bb)
 			.local_dem;
 		  gcc_assert (dem == *m_vector_manager->vector_exprs[i]);
 		  insn_info *insn = dem.get_insn ();
@@ -3864,7 +3912,7 @@  pass_vsetvl::commit_vsetvls (void)
     {
       basic_block cfg_bb = bb->cfg_bb ();
       const auto reaching_out
-	= m_vector_manager->vector_block_infos[cfg_bb->index].reaching_out;
+	= get_block_info(cfg_bb).reaching_out;
       if (!reaching_out.dirty_p ())
 	continue;
 
@@ -3992,8 +4040,7 @@  pass_vsetvl::local_eliminate_vsetvl_insn (const vector_insn_info &dem) const
 	      if (def->insn () != insn)
 		return;
 
-	      vector_insn_info new_info
-		= m_vector_manager->vector_insn_infos[i->uid ()];
+	      vector_insn_info new_info = get_vector_info (i);
 	      if (!new_info.skip_avl_compatible_p (dem))
 		return;
 
@@ -4030,7 +4077,7 @@  pass_vsetvl::cleanup_insns (void) const
       for (insn_info *insn : bb->real_nondebug_insns ())
 	{
 	  rtx_insn *rinsn = insn->rtl ();
-	  const auto &dem = m_vector_manager->vector_insn_infos[insn->uid ()];
+	  const auto &dem = get_vector_info (insn);
 	  /* Eliminate local vsetvl:
 	       bb 0:
 	       vsetvl a5,a6,...
@@ -4265,7 +4312,7 @@  pass_vsetvl::compute_probabilities (void)
     {
       basic_block cfg_bb = bb->cfg_bb ();
       auto &curr_prob
-	= m_vector_manager->vector_block_infos[cfg_bb->index].probability;
+	= get_block_info(cfg_bb).probability;
 
       /* GCC assume entry block (bb 0) are always so
 	 executed so set its probability as "always".  */
@@ -4279,7 +4326,7 @@  pass_vsetvl::compute_probabilities (void)
       FOR_EACH_EDGE (e, ei, cfg_bb->succs)
 	{
 	  auto &new_prob
-	    = m_vector_manager->vector_block_infos[e->dest->index].probability;
+	    = get_block_info(e->dest).probability;
 	  if (!new_prob.initialized_p ())
 	    new_prob = curr_prob * e->probability;
 	  else if (new_prob == profile_probability::always ())