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