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
78
public
:
79
/* The root of the compilation pass tree, once constructed. */
80
opt_pass
*
all_passes
;
81
opt_pass
*
all_small_ipa_passes
;
82
opt_pass
*
all_lowering_passes
;
83
opt_pass
*
all_regular_ipa_passes
;
84
opt_pass
*
all_lto_gen_passes
;
85
opt_pass
*
all_late_ipa_passes
;
86
87
/* A map from static pass id to optimization pass. */
88
opt_pass
**
passes_by_id
;
89
int
passes_by_id_size
;
90
91
opt_pass
**
pass_lists
[
PASS_LIST_NUM
];
92
93
private
:
94
void
set_pass_for_id
(
int
id
,
opt_pass
*pass);
95
int
register_dump_files_1
(
struct
opt_pass
*pass,
int
properties);
96
void
register_dump_files
(
struct
opt_pass
*pass,
int
properties);
97
98
private
:
99
context
*
ctxt_
;
100
101
/* References to all of the individual passes.
102
These fields are generated via macro expansion.
103
104
For example:
105
NEXT_PASS (pass_build_cfg, 1);
106
within pass-instances.def means that there is a field:
107
opt_pass *pass_build_cfg_1;
108
109
Similarly, the various:
110
NEXT_PASS (pass_copy_prop, 1);
111
...
112
NEXT_PASS (pass_copy_prop, 8);
113
in pass-instances.def lead to fields:
114
opt_pass *pass_copy_prop_1;
115
...
116
opt_pass *pass_copy_prop_8; */
117
118
#define INSERT_PASSES_AFTER(PASS)
119
#define PUSH_INSERT_PASSES_WITHIN(PASS)
120
#define POP_INSERT_PASSES()
121
#define NEXT_PASS(PASS, NUM) opt_pass *PASS ## _ ## NUM
122
#define TERMINATE_PASS_LIST()
123
124
#include "pass-instances.def"
125
126
#undef INSERT_PASSES_AFTER
127
#undef PUSH_INSERT_PASSES_WITHIN
128
#undef POP_INSERT_PASSES
129
#undef NEXT_PASS
130
#undef TERMINATE_PASS_LIST
131
132
};
// class pass_manager
133
134
}
// namespace gcc
135
136
#endif
/* ! GCC_PASS_MANAGER_H */
137
gcc
pass_manager.h
Generated by
1.8.1.1