summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2015-10-27 21:34:56 -0700
committerJason Ekstrand <[email protected]>2016-03-12 15:48:36 -0800
commit066d3c115ec80270bffc4981fadcc7534ca351cd (patch)
treeb97cd99d7a5cf63d0677996a15930ba1d312cc00
parent2ef4754a20be5fc7a6ecc2a8b6b8041637c998c6 (diff)
nir: Add a helper for creating a "bare" nir_function_impl
Reviewed-by: Jordan Justen <[email protected]>
-rw-r--r--src/compiler/nir/nir.c28
-rw-r--r--src/compiler/nir/nir.h2
2 files changed, 20 insertions, 10 deletions
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
index acb2692e2a0..2242317bc8d 100644
--- a/src/compiler/nir/nir.c
+++ b/src/compiler/nir/nir.c
@@ -258,16 +258,11 @@ cf_init(nir_cf_node *node, nir_cf_node_type type)
}
nir_function_impl *
-nir_function_impl_create(nir_function *function)
+nir_function_impl_create_bare(nir_shader *shader)
{
- assert(function->impl == NULL);
-
- void *mem_ctx = ralloc_parent(function);
+ nir_function_impl *impl = ralloc(shader, nir_function_impl);
- nir_function_impl *impl = ralloc(mem_ctx, nir_function_impl);
-
- function->impl = impl;
- impl->function = function;
+ impl->function = NULL;
cf_init(&impl->cf_node, nir_cf_node_function);
@@ -282,8 +277,8 @@ nir_function_impl_create(nir_function *function)
impl->valid_metadata = nir_metadata_none;
/* create start & end blocks */
- nir_block *start_block = nir_block_create(mem_ctx);
- nir_block *end_block = nir_block_create(mem_ctx);
+ nir_block *start_block = nir_block_create(shader);
+ nir_block *end_block = nir_block_create(shader);
start_block->cf_node.parent = &impl->cf_node;
end_block->cf_node.parent = &impl->cf_node;
impl->end_block = end_block;
@@ -295,6 +290,19 @@ nir_function_impl_create(nir_function *function)
return impl;
}
+nir_function_impl *
+nir_function_impl_create(nir_function *function)
+{
+ assert(function->impl == NULL);
+
+ nir_function_impl *impl = nir_function_impl_create_bare(function->shader);
+
+ function->impl = impl;
+ impl->function = function;
+
+ return impl;
+}
+
nir_block *
nir_block_create(nir_shader *shader)
{
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index ede56953d0a..40169adbcf2 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1732,6 +1732,8 @@ nir_variable *nir_local_variable_create(nir_function_impl *impl,
nir_function *nir_function_create(nir_shader *shader, const char *name);
nir_function_impl *nir_function_impl_create(nir_function *func);
+/** creates a function_impl that isn't tied to any particular function */
+nir_function_impl *nir_function_impl_create_bare(nir_shader *shader);
nir_block *nir_block_create(nir_shader *shader);
nir_if *nir_if_create(nir_shader *shader);