Module: Mesa Branch: master Commit: b4c5489c8ac12eb2c9881ba2d8bb745203affb7b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b4c5489c8ac12eb2c9881ba2d8bb745203affb7b
Author: Jason Ekstrand <jason.ekstr...@intel.com> Date: Fri Feb 6 12:06:04 2015 -0800 nir/dominance: Expose the dominance intersection function Being able to find the least common anscestor in the dominance tree is a useful thing that we may want to do in other passes. In particular, we need it for GCM. v2: Handle NULL inputs by returning the other block Reviewed-by: Connor Abbott <cwabbo...@gmail.com> --- src/glsl/nir/nir.h | 2 ++ src/glsl/nir/nir_dominance.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index f46ec15..0784218 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -1517,6 +1517,8 @@ static inline void nir_validate_shader(nir_shader *shader) { } void nir_calc_dominance_impl(nir_function_impl *impl); void nir_calc_dominance(nir_shader *shader); +nir_block *nir_dominance_lca(nir_block *b1, nir_block *b2); + void nir_dump_dom_tree_impl(nir_function_impl *impl, FILE *fp); void nir_dump_dom_tree(nir_shader *shader, FILE *fp); diff --git a/src/glsl/nir/nir_dominance.c b/src/glsl/nir/nir_dominance.c index 4927a29..29589cb 100644 --- a/src/glsl/nir/nir_dominance.c +++ b/src/glsl/nir/nir_dominance.c @@ -212,6 +212,28 @@ nir_calc_dominance(nir_shader *shader) } } +/** + * Computes the least common anscestor of two blocks. If one of the blocks + * is null, the other block is returned. + */ +nir_block * +nir_dominance_lca(nir_block *b1, nir_block *b2) +{ + if (b1 == NULL) + return b2; + + if (b2 == NULL) + return b1; + + assert(nir_cf_node_get_function(&b1->cf_node) == + nir_cf_node_get_function(&b2->cf_node)); + + assert(nir_cf_node_get_function(&b1->cf_node)->valid_metadata & + nir_metadata_dominance); + + return intersect(b1, b2); +} + static bool dump_block_dom(nir_block *block, void *state) { _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit