root/scripts/gcc-plugins/gcc-generate-ipa-pass.h

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. _MAKE_PASS_NAME_PASS
  2. _MAKE_PASS_NAME_PASS

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Generator for IPA pass related boilerplate code/data
   4  *
   5  * Supports gcc 4.5-6
   6  *
   7  * Usage:
   8  *
   9  * 1. before inclusion define PASS_NAME
  10  * 2. before inclusion define NO_* for unimplemented callbacks
  11  *    NO_GENERATE_SUMMARY
  12  *    NO_READ_SUMMARY
  13  *    NO_WRITE_SUMMARY
  14  *    NO_READ_OPTIMIZATION_SUMMARY
  15  *    NO_WRITE_OPTIMIZATION_SUMMARY
  16  *    NO_STMT_FIXUP
  17  *    NO_FUNCTION_TRANSFORM
  18  *    NO_VARIABLE_TRANSFORM
  19  *    NO_GATE
  20  *    NO_EXECUTE
  21  * 3. before inclusion define PROPERTIES_* and *TODO_FLAGS_* to override
  22  *    the default 0 values
  23  * 4. for convenience, all the above will be undefined after inclusion!
  24  * 5. the only exported name is make_PASS_NAME_pass() to register with gcc
  25  */
  26 
  27 #ifndef PASS_NAME
  28 #error at least PASS_NAME must be defined
  29 #else
  30 #define __GCC_PLUGIN_STRINGIFY(n)       #n
  31 #define _GCC_PLUGIN_STRINGIFY(n)        __GCC_PLUGIN_STRINGIFY(n)
  32 #define _GCC_PLUGIN_CONCAT2(x, y)       x ## y
  33 #define _GCC_PLUGIN_CONCAT3(x, y, z)    x ## y ## z
  34 
  35 #define __PASS_NAME_PASS_DATA(n)        _GCC_PLUGIN_CONCAT2(n, _pass_data)
  36 #define _PASS_NAME_PASS_DATA            __PASS_NAME_PASS_DATA(PASS_NAME)
  37 
  38 #define __PASS_NAME_PASS(n)             _GCC_PLUGIN_CONCAT2(n, _pass)
  39 #define _PASS_NAME_PASS                 __PASS_NAME_PASS(PASS_NAME)
  40 
  41 #define _PASS_NAME_NAME                 _GCC_PLUGIN_STRINGIFY(PASS_NAME)
  42 
  43 #define __MAKE_PASS_NAME_PASS(n)        _GCC_PLUGIN_CONCAT3(make_, n, _pass)
  44 #define _MAKE_PASS_NAME_PASS            __MAKE_PASS_NAME_PASS(PASS_NAME)
  45 
  46 #ifdef NO_GENERATE_SUMMARY
  47 #define _GENERATE_SUMMARY NULL
  48 #else
  49 #define __GENERATE_SUMMARY(n)           _GCC_PLUGIN_CONCAT2(n, _generate_summary)
  50 #define _GENERATE_SUMMARY               __GENERATE_SUMMARY(PASS_NAME)
  51 #endif
  52 
  53 #ifdef NO_READ_SUMMARY
  54 #define _READ_SUMMARY NULL
  55 #else
  56 #define __READ_SUMMARY(n)               _GCC_PLUGIN_CONCAT2(n, _read_summary)
  57 #define _READ_SUMMARY                   __READ_SUMMARY(PASS_NAME)
  58 #endif
  59 
  60 #ifdef NO_WRITE_SUMMARY
  61 #define _WRITE_SUMMARY NULL
  62 #else
  63 #define __WRITE_SUMMARY(n)              _GCC_PLUGIN_CONCAT2(n, _write_summary)
  64 #define _WRITE_SUMMARY                  __WRITE_SUMMARY(PASS_NAME)
  65 #endif
  66 
  67 #ifdef NO_READ_OPTIMIZATION_SUMMARY
  68 #define _READ_OPTIMIZATION_SUMMARY NULL
  69 #else
  70 #define __READ_OPTIMIZATION_SUMMARY(n)  _GCC_PLUGIN_CONCAT2(n, _read_optimization_summary)
  71 #define _READ_OPTIMIZATION_SUMMARY      __READ_OPTIMIZATION_SUMMARY(PASS_NAME)
  72 #endif
  73 
  74 #ifdef NO_WRITE_OPTIMIZATION_SUMMARY
  75 #define _WRITE_OPTIMIZATION_SUMMARY NULL
  76 #else
  77 #define __WRITE_OPTIMIZATION_SUMMARY(n) _GCC_PLUGIN_CONCAT2(n, _write_optimization_summary)
  78 #define _WRITE_OPTIMIZATION_SUMMARY     __WRITE_OPTIMIZATION_SUMMARY(PASS_NAME)
  79 #endif
  80 
  81 #ifdef NO_STMT_FIXUP
  82 #define _STMT_FIXUP NULL
  83 #else
  84 #define __STMT_FIXUP(n)                 _GCC_PLUGIN_CONCAT2(n, _stmt_fixup)
  85 #define _STMT_FIXUP                     __STMT_FIXUP(PASS_NAME)
  86 #endif
  87 
  88 #ifdef NO_FUNCTION_TRANSFORM
  89 #define _FUNCTION_TRANSFORM NULL
  90 #else
  91 #define __FUNCTION_TRANSFORM(n)         _GCC_PLUGIN_CONCAT2(n, _function_transform)
  92 #define _FUNCTION_TRANSFORM             __FUNCTION_TRANSFORM(PASS_NAME)
  93 #endif
  94 
  95 #ifdef NO_VARIABLE_TRANSFORM
  96 #define _VARIABLE_TRANSFORM NULL
  97 #else
  98 #define __VARIABLE_TRANSFORM(n)         _GCC_PLUGIN_CONCAT2(n, _variable_transform)
  99 #define _VARIABLE_TRANSFORM             __VARIABLE_TRANSFORM(PASS_NAME)
 100 #endif
 101 
 102 #ifdef NO_GATE
 103 #define _GATE NULL
 104 #define _HAS_GATE false
 105 #else
 106 #define __GATE(n)                       _GCC_PLUGIN_CONCAT2(n, _gate)
 107 #define _GATE                           __GATE(PASS_NAME)
 108 #define _HAS_GATE true
 109 #endif
 110 
 111 #ifdef NO_EXECUTE
 112 #define _EXECUTE NULL
 113 #define _HAS_EXECUTE false
 114 #else
 115 #define __EXECUTE(n)                    _GCC_PLUGIN_CONCAT2(n, _execute)
 116 #define _EXECUTE                        __EXECUTE(PASS_NAME)
 117 #define _HAS_EXECUTE true
 118 #endif
 119 
 120 #ifndef PROPERTIES_REQUIRED
 121 #define PROPERTIES_REQUIRED 0
 122 #endif
 123 
 124 #ifndef PROPERTIES_PROVIDED
 125 #define PROPERTIES_PROVIDED 0
 126 #endif
 127 
 128 #ifndef PROPERTIES_DESTROYED
 129 #define PROPERTIES_DESTROYED 0
 130 #endif
 131 
 132 #ifndef TODO_FLAGS_START
 133 #define TODO_FLAGS_START 0
 134 #endif
 135 
 136 #ifndef TODO_FLAGS_FINISH
 137 #define TODO_FLAGS_FINISH 0
 138 #endif
 139 
 140 #ifndef FUNCTION_TRANSFORM_TODO_FLAGS_START
 141 #define FUNCTION_TRANSFORM_TODO_FLAGS_START 0
 142 #endif
 143 
 144 #if BUILDING_GCC_VERSION >= 4009
 145 namespace {
 146 static const pass_data _PASS_NAME_PASS_DATA = {
 147 #else
 148 static struct ipa_opt_pass_d _PASS_NAME_PASS = {
 149         .pass = {
 150 #endif
 151                 .type                   = IPA_PASS,
 152                 .name                   = _PASS_NAME_NAME,
 153 #if BUILDING_GCC_VERSION >= 4008
 154                 .optinfo_flags          = OPTGROUP_NONE,
 155 #endif
 156 #if BUILDING_GCC_VERSION >= 5000
 157 #elif BUILDING_GCC_VERSION == 4009
 158                 .has_gate               = _HAS_GATE,
 159                 .has_execute            = _HAS_EXECUTE,
 160 #else
 161                 .gate                   = _GATE,
 162                 .execute                = _EXECUTE,
 163                 .sub                    = NULL,
 164                 .next                   = NULL,
 165                 .static_pass_number     = 0,
 166 #endif
 167                 .tv_id                  = TV_NONE,
 168                 .properties_required    = PROPERTIES_REQUIRED,
 169                 .properties_provided    = PROPERTIES_PROVIDED,
 170                 .properties_destroyed   = PROPERTIES_DESTROYED,
 171                 .todo_flags_start       = TODO_FLAGS_START,
 172                 .todo_flags_finish      = TODO_FLAGS_FINISH,
 173 #if BUILDING_GCC_VERSION < 4009
 174         },
 175         .generate_summary               = _GENERATE_SUMMARY,
 176         .write_summary                  = _WRITE_SUMMARY,
 177         .read_summary                   = _READ_SUMMARY,
 178 #if BUILDING_GCC_VERSION >= 4006
 179         .write_optimization_summary     = _WRITE_OPTIMIZATION_SUMMARY,
 180         .read_optimization_summary      = _READ_OPTIMIZATION_SUMMARY,
 181 #endif
 182         .stmt_fixup                     = _STMT_FIXUP,
 183         .function_transform_todo_flags_start    = FUNCTION_TRANSFORM_TODO_FLAGS_START,
 184         .function_transform             = _FUNCTION_TRANSFORM,
 185         .variable_transform             = _VARIABLE_TRANSFORM,
 186 #endif
 187 };
 188 
 189 #if BUILDING_GCC_VERSION >= 4009
 190 class _PASS_NAME_PASS : public ipa_opt_pass_d {
 191 public:
 192         _PASS_NAME_PASS() : ipa_opt_pass_d(_PASS_NAME_PASS_DATA,
 193                          g,
 194                          _GENERATE_SUMMARY,
 195                          _WRITE_SUMMARY,
 196                          _READ_SUMMARY,
 197                          _WRITE_OPTIMIZATION_SUMMARY,
 198                          _READ_OPTIMIZATION_SUMMARY,
 199                          _STMT_FIXUP,
 200                          FUNCTION_TRANSFORM_TODO_FLAGS_START,
 201                          _FUNCTION_TRANSFORM,
 202                          _VARIABLE_TRANSFORM) {}
 203 
 204 #ifndef NO_GATE
 205 #if BUILDING_GCC_VERSION >= 5000
 206         virtual bool gate(function *) { return _GATE(); }
 207 #else
 208         virtual bool gate(void) { return _GATE(); }
 209 #endif
 210 #endif
 211 
 212         virtual opt_pass *clone() { return new _PASS_NAME_PASS(); }
 213 
 214 #ifndef NO_EXECUTE
 215 #if BUILDING_GCC_VERSION >= 5000
 216         virtual unsigned int execute(function *) { return _EXECUTE(); }
 217 #else
 218         virtual unsigned int execute(void) { return _EXECUTE(); }
 219 #endif
 220 #endif
 221 };
 222 }
 223 
 224 opt_pass *_MAKE_PASS_NAME_PASS(void)
 225 {
 226         return new _PASS_NAME_PASS();
 227 }
 228 #else
 229 struct opt_pass *_MAKE_PASS_NAME_PASS(void)
 230 {
 231         return &_PASS_NAME_PASS.pass;
 232 }
 233 #endif
 234 
 235 /* clean up user provided defines */
 236 #undef PASS_NAME
 237 #undef NO_GENERATE_SUMMARY
 238 #undef NO_WRITE_SUMMARY
 239 #undef NO_READ_SUMMARY
 240 #undef NO_WRITE_OPTIMIZATION_SUMMARY
 241 #undef NO_READ_OPTIMIZATION_SUMMARY
 242 #undef NO_STMT_FIXUP
 243 #undef NO_FUNCTION_TRANSFORM
 244 #undef NO_VARIABLE_TRANSFORM
 245 #undef NO_GATE
 246 #undef NO_EXECUTE
 247 
 248 #undef FUNCTION_TRANSFORM_TODO_FLAGS_START
 249 #undef PROPERTIES_DESTROYED
 250 #undef PROPERTIES_PROVIDED
 251 #undef PROPERTIES_REQUIRED
 252 #undef TODO_FLAGS_FINISH
 253 #undef TODO_FLAGS_START
 254 
 255 /* clean up generated defines */
 256 #undef _EXECUTE
 257 #undef __EXECUTE
 258 #undef _FUNCTION_TRANSFORM
 259 #undef __FUNCTION_TRANSFORM
 260 #undef _GATE
 261 #undef __GATE
 262 #undef _GCC_PLUGIN_CONCAT2
 263 #undef _GCC_PLUGIN_CONCAT3
 264 #undef _GCC_PLUGIN_STRINGIFY
 265 #undef __GCC_PLUGIN_STRINGIFY
 266 #undef _GENERATE_SUMMARY
 267 #undef __GENERATE_SUMMARY
 268 #undef _HAS_EXECUTE
 269 #undef _HAS_GATE
 270 #undef _MAKE_PASS_NAME_PASS
 271 #undef __MAKE_PASS_NAME_PASS
 272 #undef _PASS_NAME_NAME
 273 #undef _PASS_NAME_PASS
 274 #undef __PASS_NAME_PASS
 275 #undef _PASS_NAME_PASS_DATA
 276 #undef __PASS_NAME_PASS_DATA
 277 #undef _READ_OPTIMIZATION_SUMMARY
 278 #undef __READ_OPTIMIZATION_SUMMARY
 279 #undef _READ_SUMMARY
 280 #undef __READ_SUMMARY
 281 #undef _STMT_FIXUP
 282 #undef __STMT_FIXUP
 283 #undef _VARIABLE_TRANSFORM
 284 #undef __VARIABLE_TRANSFORM
 285 #undef _WRITE_OPTIMIZATION_SUMMARY
 286 #undef __WRITE_OPTIMIZATION_SUMMARY
 287 #undef _WRITE_SUMMARY
 288 #undef __WRITE_SUMMARY
 289 
 290 #endif /* PASS_NAME */

/* [<][>][^][v][top][bottom][index][help] */