Linux Audio

Check our new training course

Loading...
v6.9.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Generator for GIMPLE 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_GATE
 12 *    NO_EXECUTE
 13 * 3. before inclusion define PROPERTIES_* and TODO_FLAGS_* to override
 14 *    the default 0 values
 15 * 4. for convenience, all the above will be undefined after inclusion!
 16 * 5. the only exported name is make_PASS_NAME_pass() to register with gcc
 17 */
 18
 19#ifndef PASS_NAME
 20#error at least PASS_NAME must be defined
 21#else
 22#define __GCC_PLUGIN_STRINGIFY(n)	#n
 23#define _GCC_PLUGIN_STRINGIFY(n)	__GCC_PLUGIN_STRINGIFY(n)
 24#define _GCC_PLUGIN_CONCAT2(x, y)	x ## y
 25#define _GCC_PLUGIN_CONCAT3(x, y, z)	x ## y ## z
 26
 27#define __PASS_NAME_PASS_DATA(n)	_GCC_PLUGIN_CONCAT2(n, _pass_data)
 28#define _PASS_NAME_PASS_DATA		__PASS_NAME_PASS_DATA(PASS_NAME)
 29
 30#define __PASS_NAME_PASS(n)		_GCC_PLUGIN_CONCAT2(n, _pass)
 31#define _PASS_NAME_PASS			__PASS_NAME_PASS(PASS_NAME)
 32
 33#define _PASS_NAME_NAME			_GCC_PLUGIN_STRINGIFY(PASS_NAME)
 34
 35#define __MAKE_PASS_NAME_PASS(n)	_GCC_PLUGIN_CONCAT3(make_, n, _pass)
 36#define _MAKE_PASS_NAME_PASS		__MAKE_PASS_NAME_PASS(PASS_NAME)
 37
 38#ifdef NO_GATE
 39#define _GATE NULL
 40#define _HAS_GATE false
 41#else
 42#define __GATE(n)			_GCC_PLUGIN_CONCAT2(n, _gate)
 43#define _GATE				__GATE(PASS_NAME)
 44#define _HAS_GATE true
 45#endif
 46
 47#ifdef NO_EXECUTE
 48#define _EXECUTE NULL
 49#define _HAS_EXECUTE false
 50#else
 51#define __EXECUTE(n)			_GCC_PLUGIN_CONCAT2(n, _execute)
 52#define _EXECUTE			__EXECUTE(PASS_NAME)
 53#define _HAS_EXECUTE true
 54#endif
 55
 56#ifndef PROPERTIES_REQUIRED
 57#define PROPERTIES_REQUIRED 0
 58#endif
 59
 60#ifndef PROPERTIES_PROVIDED
 61#define PROPERTIES_PROVIDED 0
 62#endif
 63
 64#ifndef PROPERTIES_DESTROYED
 65#define PROPERTIES_DESTROYED 0
 66#endif
 67
 68#ifndef TODO_FLAGS_START
 69#define TODO_FLAGS_START 0
 70#endif
 71
 72#ifndef TODO_FLAGS_FINISH
 73#define TODO_FLAGS_FINISH 0
 74#endif
 75
 76namespace {
 77static const pass_data _PASS_NAME_PASS_DATA = {
 78		.type			= GIMPLE_PASS,
 79		.name			= _PASS_NAME_NAME,
 80		.optinfo_flags		= OPTGROUP_NONE,
 
 
 
 
 
 
 
 
 
 
 
 81		.tv_id			= TV_NONE,
 82		.properties_required	= PROPERTIES_REQUIRED,
 83		.properties_provided	= PROPERTIES_PROVIDED,
 84		.properties_destroyed	= PROPERTIES_DESTROYED,
 85		.todo_flags_start	= TODO_FLAGS_START,
 86		.todo_flags_finish	= TODO_FLAGS_FINISH,
 87};
 88
 89class _PASS_NAME_PASS : public gimple_opt_pass {
 90public:
 91	_PASS_NAME_PASS() : gimple_opt_pass(_PASS_NAME_PASS_DATA, g) {}
 92
 93#ifndef NO_GATE
 
 94	virtual bool gate(function *) { return _GATE(); }
 
 
 
 95#endif
 96
 97	virtual opt_pass * clone () { return new _PASS_NAME_PASS(); }
 98
 99#ifndef NO_EXECUTE
 
100	virtual unsigned int execute(function *) { return _EXECUTE(); }
 
 
 
101};
102}
103
104opt_pass *_MAKE_PASS_NAME_PASS(void)
105{
106	return new _PASS_NAME_PASS();
107}
108#else
109struct opt_pass *_MAKE_PASS_NAME_PASS(void)
110{
111	return &_PASS_NAME_PASS.pass;
112}
113#endif
114
115/* clean up user provided defines */
116#undef PASS_NAME
117#undef NO_GATE
118#undef NO_EXECUTE
119
120#undef PROPERTIES_DESTROYED
121#undef PROPERTIES_PROVIDED
122#undef PROPERTIES_REQUIRED
123#undef TODO_FLAGS_FINISH
124#undef TODO_FLAGS_START
125
126/* clean up generated defines */
127#undef _EXECUTE
128#undef __EXECUTE
129#undef _GATE
130#undef __GATE
131#undef _GCC_PLUGIN_CONCAT2
132#undef _GCC_PLUGIN_CONCAT3
133#undef _GCC_PLUGIN_STRINGIFY
134#undef __GCC_PLUGIN_STRINGIFY
135#undef _HAS_EXECUTE
136#undef _HAS_GATE
137#undef _MAKE_PASS_NAME_PASS
138#undef __MAKE_PASS_NAME_PASS
139#undef _PASS_NAME_NAME
140#undef _PASS_NAME_PASS
141#undef __PASS_NAME_PASS
142#undef _PASS_NAME_PASS_DATA
143#undef __PASS_NAME_PASS_DATA
144
145#endif /* PASS_NAME */
v5.14.15
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Generator for GIMPLE 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_GATE
 12 *    NO_EXECUTE
 13 * 3. before inclusion define PROPERTIES_* and TODO_FLAGS_* to override
 14 *    the default 0 values
 15 * 4. for convenience, all the above will be undefined after inclusion!
 16 * 5. the only exported name is make_PASS_NAME_pass() to register with gcc
 17 */
 18
 19#ifndef PASS_NAME
 20#error at least PASS_NAME must be defined
 21#else
 22#define __GCC_PLUGIN_STRINGIFY(n)	#n
 23#define _GCC_PLUGIN_STRINGIFY(n)	__GCC_PLUGIN_STRINGIFY(n)
 24#define _GCC_PLUGIN_CONCAT2(x, y)	x ## y
 25#define _GCC_PLUGIN_CONCAT3(x, y, z)	x ## y ## z
 26
 27#define __PASS_NAME_PASS_DATA(n)	_GCC_PLUGIN_CONCAT2(n, _pass_data)
 28#define _PASS_NAME_PASS_DATA		__PASS_NAME_PASS_DATA(PASS_NAME)
 29
 30#define __PASS_NAME_PASS(n)		_GCC_PLUGIN_CONCAT2(n, _pass)
 31#define _PASS_NAME_PASS			__PASS_NAME_PASS(PASS_NAME)
 32
 33#define _PASS_NAME_NAME			_GCC_PLUGIN_STRINGIFY(PASS_NAME)
 34
 35#define __MAKE_PASS_NAME_PASS(n)	_GCC_PLUGIN_CONCAT3(make_, n, _pass)
 36#define _MAKE_PASS_NAME_PASS		__MAKE_PASS_NAME_PASS(PASS_NAME)
 37
 38#ifdef NO_GATE
 39#define _GATE NULL
 40#define _HAS_GATE false
 41#else
 42#define __GATE(n)			_GCC_PLUGIN_CONCAT2(n, _gate)
 43#define _GATE				__GATE(PASS_NAME)
 44#define _HAS_GATE true
 45#endif
 46
 47#ifdef NO_EXECUTE
 48#define _EXECUTE NULL
 49#define _HAS_EXECUTE false
 50#else
 51#define __EXECUTE(n)			_GCC_PLUGIN_CONCAT2(n, _execute)
 52#define _EXECUTE			__EXECUTE(PASS_NAME)
 53#define _HAS_EXECUTE true
 54#endif
 55
 56#ifndef PROPERTIES_REQUIRED
 57#define PROPERTIES_REQUIRED 0
 58#endif
 59
 60#ifndef PROPERTIES_PROVIDED
 61#define PROPERTIES_PROVIDED 0
 62#endif
 63
 64#ifndef PROPERTIES_DESTROYED
 65#define PROPERTIES_DESTROYED 0
 66#endif
 67
 68#ifndef TODO_FLAGS_START
 69#define TODO_FLAGS_START 0
 70#endif
 71
 72#ifndef TODO_FLAGS_FINISH
 73#define TODO_FLAGS_FINISH 0
 74#endif
 75
 76namespace {
 77static const pass_data _PASS_NAME_PASS_DATA = {
 78		.type			= GIMPLE_PASS,
 79		.name			= _PASS_NAME_NAME,
 80		.optinfo_flags		= OPTGROUP_NONE,
 81#if BUILDING_GCC_VERSION >= 5000
 82#elif BUILDING_GCC_VERSION == 4009
 83		.has_gate		= _HAS_GATE,
 84		.has_execute		= _HAS_EXECUTE,
 85#else
 86		.gate			= _GATE,
 87		.execute		= _EXECUTE,
 88		.sub			= NULL,
 89		.next			= NULL,
 90		.static_pass_number	= 0,
 91#endif
 92		.tv_id			= TV_NONE,
 93		.properties_required	= PROPERTIES_REQUIRED,
 94		.properties_provided	= PROPERTIES_PROVIDED,
 95		.properties_destroyed	= PROPERTIES_DESTROYED,
 96		.todo_flags_start	= TODO_FLAGS_START,
 97		.todo_flags_finish	= TODO_FLAGS_FINISH,
 98};
 99
100class _PASS_NAME_PASS : public gimple_opt_pass {
101public:
102	_PASS_NAME_PASS() : gimple_opt_pass(_PASS_NAME_PASS_DATA, g) {}
103
104#ifndef NO_GATE
105#if BUILDING_GCC_VERSION >= 5000
106	virtual bool gate(function *) { return _GATE(); }
107#else
108	virtual bool gate(void) { return _GATE(); }
109#endif
110#endif
111
112	virtual opt_pass * clone () { return new _PASS_NAME_PASS(); }
113
114#ifndef NO_EXECUTE
115#if BUILDING_GCC_VERSION >= 5000
116	virtual unsigned int execute(function *) { return _EXECUTE(); }
117#else
118	virtual unsigned int execute(void) { return _EXECUTE(); }
119#endif
120};
121}
122
123opt_pass *_MAKE_PASS_NAME_PASS(void)
124{
125	return new _PASS_NAME_PASS();
126}
127#else
128struct opt_pass *_MAKE_PASS_NAME_PASS(void)
129{
130	return &_PASS_NAME_PASS.pass;
131}
132#endif
133
134/* clean up user provided defines */
135#undef PASS_NAME
136#undef NO_GATE
137#undef NO_EXECUTE
138
139#undef PROPERTIES_DESTROYED
140#undef PROPERTIES_PROVIDED
141#undef PROPERTIES_REQUIRED
142#undef TODO_FLAGS_FINISH
143#undef TODO_FLAGS_START
144
145/* clean up generated defines */
146#undef _EXECUTE
147#undef __EXECUTE
148#undef _GATE
149#undef __GATE
150#undef _GCC_PLUGIN_CONCAT2
151#undef _GCC_PLUGIN_CONCAT3
152#undef _GCC_PLUGIN_STRINGIFY
153#undef __GCC_PLUGIN_STRINGIFY
154#undef _HAS_EXECUTE
155#undef _HAS_GATE
156#undef _MAKE_PASS_NAME_PASS
157#undef __MAKE_PASS_NAME_PASS
158#undef _PASS_NAME_NAME
159#undef _PASS_NAME_PASS
160#undef __PASS_NAME_PASS
161#undef _PASS_NAME_PASS_DATA
162#undef __PASS_NAME_PASS_DATA
163
164#endif /* PASS_NAME */