X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fprofile.h;h=fe3c2f997b710390d1d2e529050751670165ce11;hb=b74c019cc5ae3f52f30a39bff4d7a50417bdef74;hp=5d681e8f5db9ec14b7ecbb4f1a91ff61e8f8912a;hpb=77a89ce1ce0b877655e30319de586c09c1208637;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/profile.h b/gcc/profile.h index 5d681e8f5db..fe3c2f997b7 100644 --- a/gcc/profile.h +++ b/gcc/profile.h @@ -1,11 +1,14 @@ -/* profile.h - Defines data exported from profile.c to other passes. - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +/* Header file for minimum-cost maximal flow routines used to smooth basic + block and edge frequency counts. + Copyright (C) 2008 + Free Software Foundation, Inc. + Contributed by Paul Yuan (yingbo.com@gmail.com) + and Vinodha Ramasamy (vinodha@google.com). This file is part of GCC. - GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -14,49 +17,31 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ - -#ifndef GCC_PROFILE_H -#define GCC_PROFILE_H +along with GCC; see the file COPYING3. If not see +. */ -/* The number of different counter sections. */ -#define MAX_COUNTER_SECTIONS 1 +#ifndef PROFILE_H +#define PROFILE_H -/* Info about number of counters in the section. */ -struct section_info +/* Additional information about edges. */ +struct edge_info { - unsigned tag; /* Section tag. */ - int present; /* Are the data from this section read into gcc? */ - int n_counters; /* Total number of counters. */ - int n_counters_now; /* Number of counters in the current function. */ -}; + unsigned int count_valid:1; -struct profile_info - { - /* Information about numbers of counters in counter sections, for - allocating the storage and storing the sizes. */ - unsigned n_sections; - struct section_info section_info[MAX_COUNTER_SECTIONS]; - - /* Checksum of the cfg. Used for 'identification' of code. - Used by final. */ + /* Is on the spanning tree. */ + unsigned int on_tree:1; - unsigned current_function_cfg_checksum; - - /* Max. value of counter in program corresponding to the profile data - for the current function. */ - - gcov_type max_counter_in_program; + /* Pretend this edge does not exist (it is abnormal and we've + inserted a fake to compensate). */ + unsigned int ignore:1; +}; - /* The number of profiles merged to form the profile data for the current - function. */ - int count_profiles_merged; - }; +#define EDGE_INFO(e) ((struct edge_info *) (e)->aux) -extern struct profile_info profile_info; +/* Smoothes the initial assigned basic block and edge counts using + a minimum cost flow algorithm. */ +extern void mcf_smooth_cfg (void); -struct section_info *find_counters_section PARAMS ((unsigned)); +extern gcov_type sum_edge_counts (VEC (edge, gc) *edges); -#endif +#endif /* PROFILE_H */