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 v5.13-rc4 267 lines 6.9 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 144namespace { 145static const pass_data _PASS_NAME_PASS_DATA = { 146 .type = IPA_PASS, 147 .name = _PASS_NAME_NAME, 148 .optinfo_flags = OPTGROUP_NONE, 149#if BUILDING_GCC_VERSION >= 5000 150#elif BUILDING_GCC_VERSION == 4009 151 .has_gate = _HAS_GATE, 152 .has_execute = _HAS_EXECUTE, 153#else 154 .gate = _GATE, 155 .execute = _EXECUTE, 156 .sub = NULL, 157 .next = NULL, 158 .static_pass_number = 0, 159#endif 160 .tv_id = TV_NONE, 161 .properties_required = PROPERTIES_REQUIRED, 162 .properties_provided = PROPERTIES_PROVIDED, 163 .properties_destroyed = PROPERTIES_DESTROYED, 164 .todo_flags_start = TODO_FLAGS_START, 165 .todo_flags_finish = TODO_FLAGS_FINISH, 166}; 167 168class _PASS_NAME_PASS : public ipa_opt_pass_d { 169public: 170 _PASS_NAME_PASS() : ipa_opt_pass_d(_PASS_NAME_PASS_DATA, 171 g, 172 _GENERATE_SUMMARY, 173 _WRITE_SUMMARY, 174 _READ_SUMMARY, 175 _WRITE_OPTIMIZATION_SUMMARY, 176 _READ_OPTIMIZATION_SUMMARY, 177 _STMT_FIXUP, 178 FUNCTION_TRANSFORM_TODO_FLAGS_START, 179 _FUNCTION_TRANSFORM, 180 _VARIABLE_TRANSFORM) {} 181 182#ifndef NO_GATE 183#if BUILDING_GCC_VERSION >= 5000 184 virtual bool gate(function *) { return _GATE(); } 185#else 186 virtual bool gate(void) { return _GATE(); } 187#endif 188 189 virtual opt_pass *clone() { return new _PASS_NAME_PASS(); } 190 191#ifndef NO_EXECUTE 192#if BUILDING_GCC_VERSION >= 5000 193 virtual unsigned int execute(function *) { return _EXECUTE(); } 194#else 195 virtual unsigned int execute(void) { return _EXECUTE(); } 196#endif 197#endif 198}; 199} 200 201opt_pass *_MAKE_PASS_NAME_PASS(void) 202{ 203 return new _PASS_NAME_PASS(); 204} 205#else 206struct opt_pass *_MAKE_PASS_NAME_PASS(void) 207{ 208 return &_PASS_NAME_PASS.pass; 209} 210#endif 211 212/* clean up user provided defines */ 213#undef PASS_NAME 214#undef NO_GENERATE_SUMMARY 215#undef NO_WRITE_SUMMARY 216#undef NO_READ_SUMMARY 217#undef NO_WRITE_OPTIMIZATION_SUMMARY 218#undef NO_READ_OPTIMIZATION_SUMMARY 219#undef NO_STMT_FIXUP 220#undef NO_FUNCTION_TRANSFORM 221#undef NO_VARIABLE_TRANSFORM 222#undef NO_GATE 223#undef NO_EXECUTE 224 225#undef FUNCTION_TRANSFORM_TODO_FLAGS_START 226#undef PROPERTIES_DESTROYED 227#undef PROPERTIES_PROVIDED 228#undef PROPERTIES_REQUIRED 229#undef TODO_FLAGS_FINISH 230#undef TODO_FLAGS_START 231 232/* clean up generated defines */ 233#undef _EXECUTE 234#undef __EXECUTE 235#undef _FUNCTION_TRANSFORM 236#undef __FUNCTION_TRANSFORM 237#undef _GATE 238#undef __GATE 239#undef _GCC_PLUGIN_CONCAT2 240#undef _GCC_PLUGIN_CONCAT3 241#undef _GCC_PLUGIN_STRINGIFY 242#undef __GCC_PLUGIN_STRINGIFY 243#undef _GENERATE_SUMMARY 244#undef __GENERATE_SUMMARY 245#undef _HAS_EXECUTE 246#undef _HAS_GATE 247#undef _MAKE_PASS_NAME_PASS 248#undef __MAKE_PASS_NAME_PASS 249#undef _PASS_NAME_NAME 250#undef _PASS_NAME_PASS 251#undef __PASS_NAME_PASS 252#undef _PASS_NAME_PASS_DATA 253#undef __PASS_NAME_PASS_DATA 254#undef _READ_OPTIMIZATION_SUMMARY 255#undef __READ_OPTIMIZATION_SUMMARY 256#undef _READ_SUMMARY 257#undef __READ_SUMMARY 258#undef _STMT_FIXUP 259#undef __STMT_FIXUP 260#undef _VARIABLE_TRANSFORM 261#undef __VARIABLE_TRANSFORM 262#undef _WRITE_OPTIMIZATION_SUMMARY 263#undef __WRITE_OPTIMIZATION_SUMMARY 264#undef _WRITE_SUMMARY 265#undef __WRITE_SUMMARY 266 267#endif /* PASS_NAME */