intel/compiler: use C++ template instead of preprocessor
Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net> Acked-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7382>
This commit is contained in:

committed by
Marge Bot

parent
788f6dc857
commit
06764e0e5d
@@ -343,12 +343,9 @@ public:
|
|||||||
|
|
||||||
const struct brw_vue_map *input_vue_map;
|
const struct brw_vue_map *input_vue_map;
|
||||||
|
|
||||||
BRW_ANALYSIS(live_analysis, brw::fs_live_variables,
|
brw_analysis<brw::fs_live_variables, backend_shader> live_analysis;
|
||||||
backend_shader *) live_analysis;
|
brw_analysis<brw::register_pressure, fs_visitor> regpressure_analysis;
|
||||||
BRW_ANALYSIS(regpressure_analysis, brw::register_pressure,
|
brw_analysis<brw::performance, fs_visitor> performance_analysis;
|
||||||
fs_visitor *) regpressure_analysis;
|
|
||||||
BRW_ANALYSIS(performance_analysis, brw::performance,
|
|
||||||
fs_visitor *) performance_analysis;
|
|
||||||
|
|
||||||
/** Number of uniform variable components visited. */
|
/** Number of uniform variable components visited. */
|
||||||
unsigned uniforms;
|
unsigned uniforms;
|
||||||
|
@@ -130,63 +130,63 @@ namespace brw {
|
|||||||
* whether the analysis result \p x is consistent with the input IR. This
|
* whether the analysis result \p x is consistent with the input IR. This
|
||||||
* is currently only used for validation in debug builds.
|
* is currently only used for validation in debug builds.
|
||||||
*/
|
*/
|
||||||
#define BRW_ANALYSIS(L, T, C) \
|
template<class T, class C>
|
||||||
class L { \
|
class brw_analysis {
|
||||||
public: \
|
public:
|
||||||
/** \
|
/**
|
||||||
* Construct a program analysis. \p c is an arbitrary object \
|
* Construct a program analysis. \p c is an arbitrary object
|
||||||
* passed as argument to the constructor of the analysis result \
|
* passed as argument to the constructor of the analysis result
|
||||||
* object of type \p T. \
|
* object of type \p T.
|
||||||
*/ \
|
*/
|
||||||
L(C const &c) : c(c), p(NULL) {} \
|
brw_analysis(const C *c) : c(c), p(NULL) {}
|
||||||
\
|
|
||||||
/** \
|
/**
|
||||||
* Destroy a program analysis. \
|
* Destroy a program analysis.
|
||||||
*/ \
|
*/
|
||||||
~L() \
|
~brw_analysis()
|
||||||
{ \
|
{
|
||||||
delete p; \
|
delete p;
|
||||||
} \
|
|
||||||
\
|
|
||||||
/** \
|
|
||||||
* Obtain the result of a program analysis. This gives a \
|
|
||||||
* guaranteed up-to-date result, the analysis pass will be \
|
|
||||||
* rerun implicitly if it has become stale. \
|
|
||||||
*/ \
|
|
||||||
T & \
|
|
||||||
require() \
|
|
||||||
{ \
|
|
||||||
if (p) \
|
|
||||||
assert(p->validate(c)); \
|
|
||||||
else \
|
|
||||||
p = new T(c); \
|
|
||||||
\
|
|
||||||
return *p; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
const T & \
|
|
||||||
require() const \
|
|
||||||
{ \
|
|
||||||
return const_cast<L *>(this)->require(); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
/** \
|
|
||||||
* Report that dependencies of the analysis pass may have changed \
|
|
||||||
* since the last calculation and the cached analysis result may \
|
|
||||||
* have to be discarded. \
|
|
||||||
*/ \
|
|
||||||
void \
|
|
||||||
invalidate(brw::analysis_dependency_class c) \
|
|
||||||
{ \
|
|
||||||
if (p && c & p->dependency_class()) { \
|
|
||||||
delete p; \
|
|
||||||
p = NULL; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
private: \
|
|
||||||
C c; \
|
|
||||||
T *p; \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the result of a program analysis. This gives a
|
||||||
|
* guaranteed up-to-date result, the analysis pass will be
|
||||||
|
* rerun implicitly if it has become stale.
|
||||||
|
*/
|
||||||
|
T &
|
||||||
|
require()
|
||||||
|
{
|
||||||
|
if (p)
|
||||||
|
assert(p->validate(c));
|
||||||
|
else
|
||||||
|
p = new T(c);
|
||||||
|
|
||||||
|
return *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
const T &
|
||||||
|
require() const
|
||||||
|
{
|
||||||
|
return const_cast<brw_analysis<T, C> *>(this)->require();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Report that dependencies of the analysis pass may have changed
|
||||||
|
* since the last calculation and the cached analysis result may
|
||||||
|
* have to be discarded.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
invalidate(brw::analysis_dependency_class c)
|
||||||
|
{
|
||||||
|
if (p && (c & p->dependency_class())) {
|
||||||
|
delete p;
|
||||||
|
p = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const C *c;
|
||||||
|
T *p;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -69,8 +69,7 @@ public:
|
|||||||
exec_list instructions;
|
exec_list instructions;
|
||||||
|
|
||||||
cfg_t *cfg;
|
cfg_t *cfg;
|
||||||
BRW_ANALYSIS(idom_analysis, brw::idom_tree,
|
brw_analysis<brw::idom_tree, backend_shader> idom_analysis;
|
||||||
const backend_shader *) idom_analysis;
|
|
||||||
|
|
||||||
gl_shader_stage stage;
|
gl_shader_stage stage;
|
||||||
bool debug_enabled;
|
bool debug_enabled;
|
||||||
|
@@ -107,10 +107,8 @@ public:
|
|||||||
|
|
||||||
int first_non_payload_grf;
|
int first_non_payload_grf;
|
||||||
unsigned int max_grf;
|
unsigned int max_grf;
|
||||||
BRW_ANALYSIS(live_analysis, brw::vec4_live_variables,
|
brw_analysis<brw::vec4_live_variables, backend_shader> live_analysis;
|
||||||
backend_shader *) live_analysis;
|
brw_analysis<brw::performance, vec4_visitor> performance_analysis;
|
||||||
BRW_ANALYSIS(performance_analysis, brw::performance,
|
|
||||||
vec4_visitor *) performance_analysis;
|
|
||||||
|
|
||||||
bool need_all_constants_in_pull_buffer;
|
bool need_all_constants_in_pull_buffer;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user