GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
pass_manager.h
Go to the documentation of this file.
1
/* pass_manager.h - The pipeline of optimization passes
2
Copyright (C) 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_PASS_MANAGER_H
21
#define GCC_PASS_MANAGER_H
22
23
class
opt_pass
;
24
struct
register_pass_info
;
25
26
/* Define a list of pass lists so that both passes.c and plugins can easily
27
find all the pass lists. */
28
#define GCC_PASS_LISTS \
29
DEF_PASS_LIST (all_lowering_passes) \
30
DEF_PASS_LIST (all_small_ipa_passes) \
31
DEF_PASS_LIST (all_regular_ipa_passes) \
32
DEF_PASS_LIST (all_lto_gen_passes) \
33
DEF_PASS_LIST (all_passes)
34
35
#define DEF_PASS_LIST(LIST) PASS_LIST_NO_##LIST,
36
enum
pass_list
37
{
38
GCC_PASS_LISTS
39
PASS_LIST_NUM
40
};
41
#undef DEF_PASS_LIST
42
43
namespace
gcc {
44
45
class
context;
46
47
class
pass_manager
48
{
49
public
:
50
void
*
operator
new
(
size_t
sz);
51
52
pass_manager
(
context
*ctxt);
53
54
void
register_pass
(
struct
register_pass_info
*pass_info);
55
void
register_one_dump_file
(
struct
opt_pass
*pass);
56
57
opt_pass
*
get_pass_for_id
(
int
id
)
const
;
58
59
void
dump_passes
()
const
;
60
61
void
dump_profile_report
()
const
;
62
63
void
finish_optimization_passes
();
64
65
/* Access to specific passes, so that the majority can be private. */
66
void
execute_early_local_passes
();
67
unsigned
int
execute_pass_mode_switching
();
68
69
/* Various passes are manually cloned by epiphany. */
70
opt_pass
*
get_pass_split_all_insns
()
const
{
71
return
pass_split_all_insns_1;
72
}
73
opt_pass
*
get_pass_mode_switching
()
const
{
74
return
pass_mode_switching_1;
75
}
76
opt_pass
*
get_pass_peephole2
()
const
{
return
pass_peephole2_1; }
77
opt_pass
*
get_pass_profile
()
const
{
return
pass_profile_1; }
78
79
public
:
80
/* The root of the compilation pass tree, once constructed. */
81
opt_pass
*
all_passes
;
82
opt_pass
*
all_small_ipa_passes
;
83
opt_pass
*
all_lowering_passes
;
84
opt_pass
*
all_regular_ipa_passes
;
85
opt_pass
*
all_lto_gen_passes
;
86
opt_pass
*
all_late_ipa_passes
;
87
88
/* A map from static pass id to optimization pass. */
89
opt_pass
**
passes_by_id
;
90
int
passes_by_id_size
;
91
92
opt_pass
**
pass_lists
[
PASS_LIST_NUM
];
93
94
private
:
95
void
set_pass_for_id
(
int
id
,
opt_pass
*pass);
96
int
register_dump_files_1
(
struct
opt_pass
*pass,
int
properties);
97
void
register_dump_files
(
struct
opt_pass
*pass,
int
properties);
98
99
private
:
100
context
*
m_ctxt
;
101
102
/* References to all of the individual passes.
103
These fields are generated via macro expansion.
104
105
For example:
106
NEXT_PASS (pass_build_cfg, 1);
107
within pass-instances.def means that there is a field:
108
opt_pass *pass_build_cfg_1;
109
110
Similarly, the various:
111
NEXT_PASS (pass_copy_prop, 1);
112
...
113
NEXT_PASS (pass_copy_prop, 8);
114
in pass-instances.def lead to fields:
115
opt_pass *pass_copy_prop_1;
116
...
117
opt_pass *pass_copy_prop_8; */
118
119
#define INSERT_PASSES_AFTER(PASS)
120
#define PUSH_INSERT_PASSES_WITHIN(PASS)
121
#define POP_INSERT_PASSES()
122
#define NEXT_PASS(PASS, NUM) opt_pass *PASS ## _ ## NUM
123
#define TERMINATE_PASS_LIST()
124
125
#include "pass-instances.def"
126
127
#undef INSERT_PASSES_AFTER
128
#undef PUSH_INSERT_PASSES_WITHIN
129
#undef POP_INSERT_PASSES
130
#undef NEXT_PASS
131
#undef TERMINATE_PASS_LIST
132
133
};
// class pass_manager
134
135
}
// namespace gcc
136
137
#endif
/* ! GCC_PASS_MANAGER_H */
138
gcc
pass_manager.h
Generated by
1.8.1.1