This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix usage of REG_BR_PROBs (PR target/82927).


Hello.

Quite obvious fix for SH target. Joseph can you please continue with testing?
I don't have a machine to test the patch.

Ready for trunk?
Thanks,
Martin

gcc/ChangeLog:

2017-11-14  Martin Liska  <mliska@suse.cz>

	PR target/82927
	* config/sh/sh-mem.cc: Initialize probabilities.
	(sh_expand_cmpstr): Use to_reg_br_prob_note function for them.
	(sh_expand_cmpnstr): Likewise.
	(sh_expand_strlen): Likewise.
	(sh_expand_setmem): Likewise.
---
 gcc/config/sh/sh-mem.cc | 75 +++++++++++++++++++++++++++++--------------------
 1 file changed, 45 insertions(+), 30 deletions(-)


diff --git a/gcc/config/sh/sh-mem.cc b/gcc/config/sh/sh-mem.cc
index 8fce9799921..39d11fe6458 100644
--- a/gcc/config/sh/sh-mem.cc
+++ b/gcc/config/sh/sh-mem.cc
@@ -183,8 +183,11 @@ expand_block_move (rtx *operands)
   return false;
 }
 
-static const int prob_unlikely = REG_BR_PROB_BASE / 10;
-static const int prob_likely = REG_BR_PROB_BASE / 4;
+static const profile_probability prob_unlikely
+  = profile_probability::from_reg_br_prob_base (REG_BR_PROB_BASE / 10);
+static const profile_probability prob_likely
+  = profile_probability::from_reg_br_prob_base (REG_BR_PROB_BASE / 4);
+
 
 /* Emit code to perform a strcmp.
 
@@ -219,19 +222,19 @@ sh_expand_cmpstr (rtx *operands)
       emit_insn (gen_iorsi3 (tmp1, s1_addr, s2_addr));
       emit_insn (gen_tstsi_t (tmp1, GEN_INT (3)));
       jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+      add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
     }
   else if (addr1_alignment < 4 && addr2_alignment >= 4)
     {
       emit_insn (gen_tstsi_t (s1_addr, GEN_INT (3)));
       jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+      add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
     }
   else if (addr1_alignment >= 4 && addr2_alignment < 4)
     {
       emit_insn (gen_tstsi_t (s2_addr, GEN_INT (3)));
       jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+      add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
     }
 
   addr1 = adjust_automodify_address (addr1, SImode, s1_addr, 0);
@@ -255,7 +258,7 @@ sh_expand_cmpstr (rtx *operands)
 
   emit_insn (gen_cmpstr_t (tmp0, tmp3));
   jump = emit_jump_insn (gen_branch_true (L_end_loop_long));
-  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ());
 
   emit_insn (gen_cmpeqsi_t (tmp1, tmp2));
 
@@ -264,7 +267,7 @@ sh_expand_cmpstr (rtx *operands)
   emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, 4));
 
   jump = emit_jump_insn (gen_branch_true (L_loop_long));
-  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
   /* end loop.  */
 
   /* Fallthu, substract words.  */
@@ -303,13 +306,13 @@ sh_expand_cmpstr (rtx *operands)
 
   emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx));
   jump = emit_jump_insn (gen_branch_true (L_end_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ());
 
   emit_insn (gen_cmpeqsi_t (tmp1, tmp2));
   if (flag_delayed_branch)
     emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2)));
   jump = emit_jump_insn (gen_branch_true (L_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
   /* end loop.  */
 
   emit_label (L_end_loop_byte);
@@ -378,19 +381,22 @@ sh_expand_cmpnstr (rtx *operands)
 	      emit_insn (gen_iorsi3 (tmp1, s1_addr, s2_addr));
 	      emit_insn (gen_tstsi_t (tmp1, GEN_INT (3)));
 	      jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-	      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+	      add_int_reg_note (jump, REG_BR_PROB,
+				prob_likely.to_reg_br_prob_note ());
 	    }
 	  else if (addr1_alignment < 4 && addr2_alignment >= 4)
 	    {
 	      emit_insn (gen_tstsi_t (s1_addr, GEN_INT (3)));
 	      jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-	      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+	      add_int_reg_note (jump, REG_BR_PROB,
+				prob_likely.to_reg_br_prob_note ());
 	    }
 	  else if (addr1_alignment >= 4 && addr2_alignment < 4)
 	    {
 	      emit_insn (gen_tstsi_t (s2_addr, GEN_INT (3)));
 	      jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-	      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+	      add_int_reg_note (jump, REG_BR_PROB,
+				prob_likely.to_reg_br_prob_note ());
 	    }
 
 	  /* word count. Do we have iterations ?  */
@@ -414,11 +420,13 @@ sh_expand_cmpnstr (rtx *operands)
 
 	  emit_insn (gen_cmpstr_t (tmp0, tmp3));
 	  jump = emit_jump_insn (gen_branch_true (L_end_loop_long));
-	  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+	  add_int_reg_note (jump, REG_BR_PROB,
+			    prob_unlikely.to_reg_br_prob_note ());
 
 	  emit_insn (gen_cmpeqsi_t (tmp1, tmp2));
 	  jump = emit_jump_insn (gen_branch_false (L_end_loop_long));
-	  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+	  add_int_reg_note (jump, REG_BR_PROB,
+			    prob_unlikely.to_reg_br_prob_note ());
 
 	  if (TARGET_SH2)
 	    emit_insn (gen_dect (lenw, lenw));
@@ -429,7 +437,8 @@ sh_expand_cmpnstr (rtx *operands)
 	    }
 
 	  jump = emit_jump_insn (gen_branch_false (L_loop_long));
-	  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+	  add_int_reg_note (jump, REG_BR_PROB,
+			    prob_likely.to_reg_br_prob_note ());
 
 	  int sbytes = bytes % 4;
 
@@ -454,7 +463,8 @@ sh_expand_cmpnstr (rtx *operands)
 
 		  emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx));
 		  jump = emit_jump_insn (gen_branch_true (L_end_loop_byte));
-		  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+		  add_int_reg_note (jump, REG_BR_PROB,
+				    prob_unlikely.to_reg_br_prob_note ());
 
 		  emit_insn (gen_cmpeqsi_t (tmp1, tmp2));
 		  if (flag_delayed_branch)
@@ -462,7 +472,8 @@ sh_expand_cmpnstr (rtx *operands)
 						     gen_lowpart (QImode,
 								  tmp2)));
 		  jump = emit_jump_insn (gen_branch_false (L_end_loop_byte));
-		  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+		  add_int_reg_note (jump, REG_BR_PROB,
+				    prob_unlikely.to_reg_br_prob_note ());
 
 		  addr1 = adjust_address (addr1, QImode,
 					  GET_MODE_SIZE (QImode));
@@ -496,14 +507,16 @@ sh_expand_cmpnstr (rtx *operands)
 
 	  emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx));
 	  jump = emit_jump_insn (gen_branch_true (L_end_loop_byte));
-	  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+	  add_int_reg_note (jump, REG_BR_PROB,
+			    prob_unlikely.to_reg_br_prob_note ());
 
 	  emit_insn (gen_cmpeqsi_t (tmp1, tmp2));
 	  if (flag_delayed_branch)
 	    emit_insn (gen_zero_extendqisi2 (tmp2,
 					     gen_lowpart (QImode, tmp2)));
 	  jump = emit_jump_insn (gen_branch_false (L_end_loop_byte));
-	  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+	  add_int_reg_note (jump, REG_BR_PROB,
+			    prob_unlikely.to_reg_br_prob_note ());
 
 	  addr1 = adjust_address (addr1, QImode, GET_MODE_SIZE (QImode));
 	  addr2 = adjust_address (addr2, QImode, GET_MODE_SIZE (QImode));
@@ -517,7 +530,8 @@ sh_expand_cmpnstr (rtx *operands)
       emit_insn (gen_cmpeqsi_t (len, const0_rtx));
       emit_move_insn (operands[0], const0_rtx);
       jump = emit_jump_insn (gen_branch_true (L_return));
-      add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+      add_int_reg_note (jump, REG_BR_PROB,
+			prob_unlikely.to_reg_br_prob_note ());
     }
 
   addr1 = adjust_automodify_address (addr1, QImode, s1_addr, 0);
@@ -533,13 +547,13 @@ sh_expand_cmpnstr (rtx *operands)
 
   emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx));
   jump = emit_jump_insn (gen_branch_true (L_end_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ());
 
   emit_insn (gen_cmpeqsi_t (tmp1, tmp2));
   if (flag_delayed_branch)
     emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2)));
   jump = emit_jump_insn (gen_branch_false (L_end_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ());
 
   if (TARGET_SH2)
     emit_insn (gen_dect (len, len));
@@ -550,7 +564,7 @@ sh_expand_cmpnstr (rtx *operands)
     }
 
   jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
   /* end byte loop.  */
 
   emit_label (L_end_loop_byte);
@@ -598,7 +612,7 @@ sh_expand_strlen (rtx *operands)
     {
       emit_insn (gen_tstsi_t (current_addr, GEN_INT (3)));
       jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+      add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
     }
 
   emit_move_insn (tmp0, operands[2]);
@@ -616,7 +630,7 @@ sh_expand_strlen (rtx *operands)
   emit_insn (gen_cmpstr_t (tmp0, tmp1));
 
   jump = emit_jump_insn (gen_branch_false (L_loop_long));
-  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
   /* end loop.  */
 
   emit_label (L_end_loop_long);
@@ -632,7 +646,7 @@ sh_expand_strlen (rtx *operands)
       emit_move_insn (current_addr, plus_constant (Pmode, current_addr, 1));
       emit_insn (gen_cmpeqsi_t (tmp1, const0_rtx));
       jump = emit_jump_insn (gen_branch_true (L_return));
-      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+      add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
     }
 
   emit_barrier_after (jump);
@@ -645,7 +659,7 @@ sh_expand_strlen (rtx *operands)
 
   emit_insn (gen_cmpeqsi_t (tmp1, const0_rtx));
   jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
 
   /* end loop.  */
 
@@ -690,7 +704,8 @@ sh_expand_setmem (rtx *operands)
 	{
 	  emit_insn (gen_tstsi_t (dest_addr, GEN_INT (3)));
 	  jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-	  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+	  add_int_reg_note (jump, REG_BR_PROB,
+			    prob_likely.to_reg_br_prob_note ());
 	}
 
       /* word count. Do we have iterations ?  */
@@ -715,7 +730,7 @@ sh_expand_setmem (rtx *operands)
 
 
       jump = emit_jump_insn (gen_branch_false (L_loop_word));
-      add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+      add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
       count = count % 4;
 
       dest = adjust_address (dest, QImode, 0);
@@ -752,7 +767,7 @@ sh_expand_setmem (rtx *operands)
                                             GET_MODE_SIZE (QImode)));
 
   jump = emit_jump_insn (gen_branch_false (L_loop_byte));
-  add_int_reg_note (jump, REG_BR_PROB, prob_likely);
+  add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ());
 
   emit_label (L_return);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]