nir: Add a helper for finding a function by name

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18675>
This commit is contained in:
Jason Ekstrand 2022-04-07 16:44:08 -05:00 committed by Marge Bot
parent 0a06abbb91
commit 2aa9eb497d
2 changed files with 15 additions and 13 deletions

View file

@ -3761,6 +3761,17 @@ nir_shader_get_entrypoint(const nir_shader *shader)
return func->impl;
}
static inline nir_function *
nir_shader_get_function_for_name(const nir_shader *shader, const char *name)
{
nir_foreach_function(func, shader) {
if (strcmp(func->name, name) == 0)
return func;
}
return NULL;
}
void nir_remove_non_entrypoints(nir_shader *shader);
nir_shader *nir_shader_create(void *mem_ctx,

View file

@ -139,24 +139,15 @@ static nir_function *mangle_and_find(struct vtn_builder *b,
struct vtn_type **src_types)
{
char *mname;
nir_function *found = NULL;
vtn_opencl_mangle(name, const_mask, num_srcs, src_types, &mname);
/* try and find in current shader first. */
nir_foreach_function(funcs, b->shader) {
if (!strcmp(funcs->name, mname)) {
found = funcs;
break;
}
}
nir_function *found = nir_shader_get_function_for_name(b->shader, mname);
/* if not found here find in clc shader and create a decl mirroring it */
if (!found && b->options->clc_shader && b->options->clc_shader != b->shader) {
nir_foreach_function(funcs, b->options->clc_shader) {
if (!strcmp(funcs->name, mname)) {
found = funcs;
break;
}
}
found = nir_shader_get_function_for_name(b->options->clc_shader, mname);
if (found) {
nir_function *decl = nir_function_create(b->shader, mname);
decl->num_params = found->num_params;