source: arduino-1-6-7/trunk/fuentes/arduino-ide-amd64/hardware/tools/avr/lib/gcc/avr/4.9.2/plugin/include/pass_manager.h @ 4837

Last change on this file since 4837 was 4837, checked in by daduve, 2 years ago

Adding new version

File size: 3.6 KB
Line 
1/* pass_manager.h - The pipeline of optimization passes
2   Copyright (C) 2013-2014 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along 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
23class opt_pass;
24struct 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_passes)
33
34#define DEF_PASS_LIST(LIST) PASS_LIST_NO_##LIST,
35enum pass_list
36{
37  GCC_PASS_LISTS
38  PASS_LIST_NUM
39};
40#undef DEF_PASS_LIST
41
42namespace gcc {
43
44class context;
45
46class pass_manager
47{
48public:
49  void *operator new (size_t sz);
50
51  pass_manager (context *ctxt);
52
53  void register_pass (struct register_pass_info *pass_info);
54  void register_one_dump_file (opt_pass *pass);
55
56  opt_pass *get_pass_for_id (int id) const;
57
58  void dump_passes () const;
59
60  void dump_profile_report () const;
61
62  void finish_optimization_passes ();
63
64  /* Access to specific passes, so that the majority can be private.  */
65  void execute_early_local_passes ();
66  unsigned int execute_pass_mode_switching ();
67
68  /* Various passes are manually cloned by epiphany. */
69  opt_pass *get_pass_split_all_insns () const {
70    return pass_split_all_insns_1;
71  }
72  opt_pass *get_pass_mode_switching () const {
73    return pass_mode_switching_1;
74  }
75  opt_pass *get_pass_peephole2 () const { return pass_peephole2_1; }
76  opt_pass *get_pass_profile () const { return pass_profile_1; }
77
78public:
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_late_ipa_passes;
85
86  /* A map from static pass id to optimization pass.  */
87  opt_pass **passes_by_id;
88  int passes_by_id_size;
89
90  opt_pass **pass_lists[PASS_LIST_NUM];
91
92private:
93  void set_pass_for_id (int id, opt_pass *pass);
94  int register_dump_files_1 (opt_pass *pass, int properties);
95  void register_dump_files (opt_pass *pass, int properties);
96
97private:
98  context *m_ctxt;
99
100  /* References to all of the individual passes.
101     These fields are generated via macro expansion.
102
103     For example:
104         NEXT_PASS (pass_build_cfg, 1);
105     within pass-instances.def means that there is a field:
106         opt_pass *pass_build_cfg_1;
107
108     Similarly, the various:
109        NEXT_PASS (pass_copy_prop, 1);
110        ...
111        NEXT_PASS (pass_copy_prop, 8);
112     in pass-instances.def lead to fields:
113        opt_pass *pass_copy_prop_1;
114        ...
115        opt_pass *pass_copy_prop_8;  */
116
117#define INSERT_PASSES_AFTER(PASS)
118#define PUSH_INSERT_PASSES_WITHIN(PASS)
119#define POP_INSERT_PASSES()
120#define NEXT_PASS(PASS, NUM) opt_pass *PASS ## _ ## NUM
121#define TERMINATE_PASS_LIST()
122
123#include "pass-instances.def"
124
125#undef INSERT_PASSES_AFTER
126#undef PUSH_INSERT_PASSES_WITHIN
127#undef POP_INSERT_PASSES
128#undef NEXT_PASS
129#undef TERMINATE_PASS_LIST
130
131}; // class pass_manager
132
133} // namespace gcc
134
135#endif /* ! GCC_PASS_MANAGER_H */
136
Note: See TracBrowser for help on using the repository browser.