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] Remove dead rtl-profiling code


This removes dead code from profile.c and the rtl-profile.c file.

Bootstrapped and tested on x86_64-unknown-linux-gnu.

Ok for mainline?

Thanks,
Richard.

2006-04-11  Richard Guenther  <rguenther@suse.de>

	* profile.c (compute_branch_probabilities): Remove code
	encapsulated in !ir_type (), which are remanents of the
	removed RTL profiling code.
	* rtl-profile.c: Remove.

Index: profile.c
===================================================================
*** profile.c	(revision 112853)
--- profile.c	(working copy)
*************** compute_branch_probabilities (void)
*** 546,582 ****
  		index = 19;
  	      hist_br_prob[index]++;
  
- 	      /* Do this for RTL only.  */
- 	      if (!ir_type ())
- 		{
- 		  note = find_reg_note (BB_END (bb), REG_BR_PROB, 0);
- 		  /* There may be already note put by some other pass, such
- 		     as builtin_expect expander.  */
- 		  if (note)
- 		    XEXP (note, 0) = GEN_INT (prob);
- 		  else
- 		    REG_NOTES (BB_END (bb))
- 		      = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (prob),
- 					   REG_NOTES (BB_END (bb)));
- 		}
  	      num_branches++;
  	    }
  	}
-       /* Otherwise try to preserve the existing REG_BR_PROB probabilities
-          tree based profile guessing put into code.  BB can be the
- 	 ENTRY_BLOCK, and it can have multiple (fake) successors in
- 	 EH cases, but it still has no code; don't crash in this case.  */
-       else if (profile_status == PROFILE_ABSENT
- 	       && !ir_type ()
- 	       && EDGE_COUNT (bb->succs) > 1
- 	       && BB_END (bb)
- 	       && (note = find_reg_note (BB_END (bb), REG_BR_PROB, 0)))
- 	{
- 	  int prob = INTVAL (XEXP (note, 0));
- 
- 	  BRANCH_EDGE (bb)->probability = prob;
- 	  FALLTHRU_EDGE (bb)->probability = REG_BR_PROB_BASE - prob;
- 	}
        /* As a last resort, distribute the probabilities evenly.
  	 Use simple heuristics that if there are normal edges,
  	 give all abnormals frequency of 0, otherwise distribute the
--- 546,554 ----
*************** branch_prob (void)
*** 972,979 ****
  		    flag_bits |= GCOV_ARC_FALLTHROUGH;
  		  /* On trees we don't have fallthru flags, but we can
  		     recompute them from CFG shape.  */
! 		  if (ir_type ()
! 		      && e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)
  		      && e->src->next_bb == e->dest)
  		    flag_bits |= GCOV_ARC_FALLTHROUGH;
  
--- 944,950 ----
  		    flag_bits |= GCOV_ARC_FALLTHROUGH;
  		  /* On trees we don't have fallthru flags, but we can
  		     recompute them from CFG shape.  */
! 		  if (e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)
  		      && e->src->next_bb == e->dest)
  		    flag_bits |= GCOV_ARC_FALLTHROUGH;
  
*************** branch_prob (void)
*** 989,1104 ****
    /* Line numbers.  */
    if (coverage_begin_output ())
      {
        /* Initialize the output.  */
        output_location (NULL, 0, NULL, NULL);
  
!       if (!ir_type ())
  	{
! 	  gcov_position_t offset;
! 
! 	  FOR_EACH_BB (bb)
! 	    {
! 	      rtx insn = BB_HEAD (bb);
! 	      int ignore_next_note = 0;
! 
! 	      offset = 0;
! 
! 	      /* We are looking for line number notes.  Search backward
! 		 before basic block to find correct ones.  */
! 	      insn = prev_nonnote_insn (insn);
! 	      if (!insn)
! 		insn = get_insns ();
! 	      else
! 		insn = NEXT_INSN (insn);
  
! 	      while (insn != BB_END (bb))
! 		{
! 		  if (NOTE_P (insn))
! 		    {
! 		      /* Must ignore the line number notes that
! 			 immediately follow the end of an inline function
! 			 to avoid counting it twice.  There is a note
! 			 before the call, and one after the call.  */
! 		      if (NOTE_LINE_NUMBER (insn)
! 			  == NOTE_INSN_REPEATED_LINE_NUMBER)
! 			ignore_next_note = 1;
! 		      else if (NOTE_LINE_NUMBER (insn) <= 0)
! 			/*NOP*/;
! 		      else if (ignore_next_note)
! 			ignore_next_note = 0;
! 		      else
! 			{
! 		          expanded_location s;
! 		          NOTE_EXPANDED_LOCATION (s, insn);
! 			  output_location (s.file, s.line, &offset, bb);
! 			}
! 		    }
! 		  insn = NEXT_INSN (insn);
! 		}
  
! 	      if (offset)
! 		{
! 		  /* A file of NULL indicates the end of run.  */
! 		  gcov_write_unsigned (0);
! 		  gcov_write_string (NULL);
! 		  gcov_write_length (offset);
! 		}
  	    }
- 	}
-       else
- 	{
- 	  gcov_position_t offset;
  
! 	  FOR_EACH_BB (bb)
  	    {
! 	      block_stmt_iterator bsi;
! 
! 	      offset = 0;
! 
! 	      if (bb == ENTRY_BLOCK_PTR->next_bb)
! 		{
! 		  expanded_location curr_location = 
! 		    expand_location (DECL_SOURCE_LOCATION
! 				     (current_function_decl));
! 		  output_location (curr_location.file, curr_location.line,
! 				   &offset, bb);
! 		}
  
! 	      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
! 		{
! 		  tree stmt = bsi_stmt (bsi);
! 		  if (EXPR_HAS_LOCATION (stmt))
! 		    output_location (EXPR_FILENAME (stmt), 
! 				     EXPR_LINENO (stmt),
! 				     &offset, bb);
! 		}
! 
! 	      /* Notice GOTO expressions we eliminated while constructing the
! 		 CFG.  */
! 	      if (single_succ_p (bb) && single_succ_edge (bb)->goto_locus)
! 		{
! 		  /* ??? source_locus type is marked deprecated in input.h.  */
! 		  source_locus curr_location = single_succ_edge (bb)->goto_locus;
! 		  /* ??? The FILE/LINE API is inconsistent for these cases.  */
  #ifdef USE_MAPPED_LOCATION 
! 		  output_location (LOCATION_FILE (curr_location),
! 				   LOCATION_LINE (curr_location),
! 				   &offset, bb);
  #else
! 		  output_location (curr_location->file, curr_location->line,
! 				   &offset, bb);
  #endif
! 		}
  
! 	      if (offset)
! 		{
! 		  /* A file of NULL indicates the end of run.  */
! 		  gcov_write_unsigned (0);
! 		  gcov_write_string (NULL);
! 		  gcov_write_length (offset);
! 		}
  	    }
! 	 }
      }
  
    ENTRY_BLOCK_PTR->index = ENTRY_BLOCK;
--- 960,1016 ----
    /* Line numbers.  */
    if (coverage_begin_output ())
      {
+       gcov_position_t offset;
+ 
        /* Initialize the output.  */
        output_location (NULL, 0, NULL, NULL);
  
!       FOR_EACH_BB (bb)
  	{
! 	  block_stmt_iterator bsi;
  
! 	  offset = 0;
  
! 	  if (bb == ENTRY_BLOCK_PTR->next_bb)
! 	    {
! 	      expanded_location curr_location = 
! 		expand_location (DECL_SOURCE_LOCATION (current_function_decl));
! 	      output_location (curr_location.file, curr_location.line,
! 			       &offset, bb);
  	    }
  
! 	  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
  	    {
! 	      tree stmt = bsi_stmt (bsi);
! 	      if (EXPR_HAS_LOCATION (stmt))
! 		output_location (EXPR_FILENAME (stmt), EXPR_LINENO (stmt),
! 				 &offset, bb);
! 	    }
  
! 	  /* Notice GOTO expressions we eliminated while constructing the
! 	     CFG.  */
! 	  if (single_succ_p (bb) && single_succ_edge (bb)->goto_locus)
! 	    {
! 	      /* ??? source_locus type is marked deprecated in input.h.  */
! 	      source_locus curr_location = single_succ_edge (bb)->goto_locus;
! 	      /* ??? The FILE/LINE API is inconsistent for these cases.  */
  #ifdef USE_MAPPED_LOCATION 
! 	      output_location (LOCATION_FILE (curr_location),
! 			       LOCATION_LINE (curr_location), &offset, bb);
  #else
! 	      output_location (curr_location->file, curr_location->line,
! 			       &offset, bb);
  #endif
! 	    }
  
! 	  if (offset)
! 	    {
! 	      /* A file of NULL indicates the end of run.  */
! 	      gcov_write_unsigned (0);
! 	      gcov_write_string (NULL);
! 	      gcov_write_length (offset);
  	    }
! 	}
      }
  
    ENTRY_BLOCK_PTR->index = ENTRY_BLOCK;
*************** branch_prob (void)
*** 1133,1158 ****
  	instrument_values (values);
  
        /* Commit changes done by instrumentation.  */
!       if (ir_type ())
! 	bsi_commit_edge_inserts ();
!       else
! 	{
!           commit_edge_insertions_watch_calls ();
! 	  allocate_reg_info (max_reg_num (), FALSE, FALSE);
! 	}
      }
  
    free_aux_for_edges ();
  
-   if (!ir_type ())
-     {
-       /* Re-merge split basic blocks and the mess introduced by
- 	 insert_insn_on_edge.  */
-       cleanup_cfg (profile_arc_flag ? CLEANUP_EXPENSIVE : 0);
-       if (dump_file)
- 	dump_flow_info (dump_file, dump_flags);
-     }
- 
    free_edge_list (el);
    if (flag_branch_probabilities)
      profile_status = PROFILE_READ;
--- 1045,1055 ----
  	instrument_values (values);
  
        /* Commit changes done by instrumentation.  */
!       bsi_commit_edge_inserts ();
      }
  
    free_aux_for_edges ();
  
    free_edge_list (el);
    if (flag_branch_probabilities)
      profile_status = PROFILE_READ;


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