Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.17 290 lines 7.6 kB view raw
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 145namespace { 146static const pass_data _PASS_NAME_PASS_DATA = { 147#else 148static 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 190class _PASS_NAME_PASS : public ipa_opt_pass_d { 191public: 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 224opt_pass *_MAKE_PASS_NAME_PASS(void) 225{ 226 return new _PASS_NAME_PASS(); 227} 228#else 229struct 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 */