GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
value-prof.h
Go to the documentation of this file.
1
/* Definitions for transformations based on profile information for values.
2
Copyright (C) 2003-2013 Free Software Foundation, Inc.
3
4
This file is part of GCC.
5
6
GCC is free software; you can redistribute it and/or modify it under
7
the terms of the GNU General Public License as published by the Free
8
Software Foundation; either version 3, or (at your option) any later
9
version.
10
11
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12
WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
for more details.
15
16
You should have received a copy of the GNU General Public License
17
along with GCC; see the file COPYING3. If not see
18
<http://www.gnu.org/licenses/>. */
19
20
#ifndef GCC_VALUE_PROF_H
21
#define GCC_VALUE_PROF_H
22
23
/* Supported histogram types. */
24
enum
hist_type
25
{
26
HIST_TYPE_INTERVAL
,
/* Measures histogram of values inside a specified
27
interval. */
28
HIST_TYPE_POW2
,
/* Histogram of power of 2 values. */
29
HIST_TYPE_SINGLE_VALUE
,
/* Tries to identify the value that is (almost)
30
always constant. */
31
HIST_TYPE_CONST_DELTA
,
/* Tries to identify the (almost) always constant
32
difference between two evaluations of a value. */
33
HIST_TYPE_INDIR_CALL
,
/* Tries to identify the function that is (almost)
34
called in indirect call */
35
HIST_TYPE_AVERAGE
,
/* Compute average value (sum of all values). */
36
HIST_TYPE_IOR
,
/* Used to compute expected alignment. */
37
HIST_TYPE_MAX
38
};
39
40
#define COUNTER_FOR_HIST_TYPE(TYPE) ((int) (TYPE) + GCOV_FIRST_VALUE_COUNTER)
41
#define HIST_TYPE_FOR_COUNTER(COUNTER) \
42
((enum hist_type) ((COUNTER) - GCOV_FIRST_VALUE_COUNTER))
43
44
45
/* The value to measure. */
46
struct
histogram_value_t
47
{
48
struct
49
{
50
tree
value
;
/* The value to profile. */
51
gimple
stmt
;
/* Insn containing the value. */
52
gcov_type
*
counters
;
/* Pointer to first counter. */
53
struct
histogram_value_t
*
next
;
/* Linked list pointer. */
54
}
hvalue
;
55
enum
hist_type
type
;
/* Type of information to measure. */
56
unsigned
n_counters
;
/* Number of required counters. */
57
union
58
{
59
struct
60
{
61
int
int_start
;
/* First value in interval. */
62
unsigned
int
steps
;
/* Number of values in it. */
63
}
intvl
;
/* Interval histogram data. */
64
}
hdata
;
/* Profiled information specific data. */
65
};
66
67
typedef
struct
histogram_value_t
*
histogram_value
;
68
typedef
const
struct
histogram_value_t
*
const_histogram_value
;
69
70
71
typedef
vec<histogram_value>
histogram_values
;
72
73
extern
void
gimple_find_values_to_profile
(
histogram_values
*);
74
extern
bool
gimple_value_profile_transformations
(
void
);
75
76
histogram_value
gimple_histogram_value
(
struct
function
*,
gimple
);
77
histogram_value
gimple_histogram_value_of_type
(
struct
function
*,
gimple
,
78
enum
hist_type
);
79
void
gimple_add_histogram_value
(
struct
function
*,
gimple
, histogram_value);
80
void
dump_histograms_for_stmt
(
struct
function
*, FILE *,
gimple
);
81
void
gimple_remove_histogram_value
(
struct
function
*,
gimple
, histogram_value);
82
void
gimple_remove_stmt_histograms
(
struct
function
*,
gimple
);
83
void
gimple_duplicate_stmt_histograms
(
struct
function
*,
gimple
,
84
struct
function
*,
gimple
);
85
void
gimple_move_stmt_histograms
(
struct
function
*,
gimple
,
gimple
);
86
void
verify_histograms
(
void
);
87
void
free_histograms
(
void
);
88
void
stringop_block_profile
(
gimple
,
unsigned
int
*,
HOST_WIDE_INT
*);
89
gimple
gimple_ic
(
gimple
,
struct
cgraph_node
*,
int
,
gcov_type
,
gcov_type
);
90
91
92
/* In tree-profile.c. */
93
extern
void
gimple_init_edge_profiler
(
void
);
94
extern
void
gimple_gen_edge_profiler
(
int
,
edge
);
95
extern
void
gimple_gen_interval_profiler
(histogram_value,
unsigned
,
unsigned
);
96
extern
void
gimple_gen_pow2_profiler
(histogram_value,
unsigned
,
unsigned
);
97
extern
void
gimple_gen_one_value_profiler
(histogram_value,
unsigned
,
unsigned
);
98
extern
void
gimple_gen_ic_profiler
(histogram_value,
unsigned
,
unsigned
);
99
extern
void
gimple_gen_ic_func_profiler
(
void
);
100
extern
void
gimple_gen_const_delta_profiler
(histogram_value,
101
unsigned
,
unsigned
);
102
extern
void
gimple_gen_average_profiler
(histogram_value,
unsigned
,
unsigned
);
103
extern
void
gimple_gen_ior_profiler
(histogram_value,
unsigned
,
unsigned
);
104
extern
void
stream_out_histogram_value
(
struct
output_block
*, histogram_value);
105
extern
void
stream_in_histogram_value
(
struct
lto_input_block
*,
gimple
);
106
extern
struct
cgraph_node
*
find_func_by_profile_id
(
int
func_id);
107
108
109
/* In profile.c. */
110
extern
void
init_branch_prob
(
void
);
111
extern
void
branch_prob
(
void
);
112
extern
void
end_branch_prob
(
void
);
113
114
#endif
/* GCC_VALUE_PROF_H */
115
gcc
value-prof.h
Generated by
1.8.1.1