[Mesa-dev] [PATCH 12/24] i965: Initialize registers' file to BAD_FILE.

Kenneth Graunke kenneth at whitecape.org
Wed Nov 11 12:46:35 PST 2015


On Monday, November 02, 2015 04:29:22 PM Matt Turner wrote:
> The test (file == BAD_FILE) works on registers for which the constructor
> has not run because BAD_FILE is zero.  The next commit will move
> BAD_FILE in the enum so that it's no longer zero.
> ---
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp     | 10 +++++++++-
>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp |  3 +++
>  src/mesa/drivers/dri/i965/brw_vec4_nir.cpp   |  9 +++++++++
>  3 files changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 7eeff93..611347c 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -260,6 +260,10 @@ void
>  fs_visitor::nir_emit_system_values()
>  {
>     nir_system_values = ralloc_array(mem_ctx, fs_reg, SYSTEM_VALUE_MAX);
> +   for (unsigned i = 0; i < SYSTEM_VALUE_MAX; i++) {
> +      nir_system_values[i].file = BAD_FILE;

How about we do this instead:

   nir_system_values[i] = fs_reg();

That way, they're properly constructed using the default constructor,
which would not only set BAD_FILE, but properly initialize everything,
so we don't have to revisit this if we make other changes in fs_reg().

Similarly below.

That patch would get a:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

> +   }
> +
>     nir_foreach_overload(nir, overload) {
>        assert(strcmp(overload->function->name, "main") == 0);
>        assert(overload->impl);
> @@ -270,7 +274,11 @@ fs_visitor::nir_emit_system_values()
>  void
>  fs_visitor::nir_emit_impl(nir_function_impl *impl)
>  {
> -   nir_locals = reralloc(mem_ctx, nir_locals, fs_reg, impl->reg_alloc);
> +   nir_locals = ralloc_array(mem_ctx, fs_reg, impl->reg_alloc);
> +   for (unsigned i = 0; i < impl->reg_alloc; i++) {
> +      nir_locals[i].file = BAD_FILE;
> +   }
> +
>     foreach_list_typed(nir_register, reg, node, &impl->registers) {
>        unsigned array_elems =
>           reg->num_array_elems == 0 ? 1 : reg->num_array_elems;
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index 1e46f9a..ef6e19a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -1157,6 +1157,9 @@ fs_visitor::init()
>     memset(&this->payload, 0, sizeof(this->payload));
>     memset(this->outputs, 0, sizeof(this->outputs));
>     memset(this->output_components, 0, sizeof(this->output_components));
> +   for (unsigned i = 0; i < ARRAY_SIZE(this->outputs); i++) {
> +      this->outputs[i].file = BAD_FILE;
> +   }
>     this->source_depth_to_render_target = false;
>     this->runtime_check_aads_emit = false;
>     this->first_non_payload_grf = 0;
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> index 8ca8ddb..bdb3d02 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> @@ -106,6 +106,9 @@ void
>  vec4_visitor::nir_setup_system_values()
>  {
>     nir_system_values = ralloc_array(mem_ctx, dst_reg, SYSTEM_VALUE_MAX);
> +   for (unsigned i = 0; i < SYSTEM_VALUE_MAX; i++) {
> +      nir_system_values[i].file = BAD_FILE;
> +   }
>  
>     nir_foreach_overload(nir, overload) {
>        assert(strcmp(overload->function->name, "main") == 0);
> @@ -118,6 +121,9 @@ void
>  vec4_visitor::nir_setup_inputs()
>  {
>     nir_inputs = ralloc_array(mem_ctx, src_reg, nir->num_inputs);
> +   for (unsigned i = 0; i < nir->num_inputs; i++) {
> +      nir_inputs[i].file = BAD_FILE;
> +   }
>  
>     nir_foreach_variable(var, &nir->inputs) {
>        int offset = var->data.driver_location;
> @@ -148,6 +154,9 @@ void
>  vec4_visitor::nir_emit_impl(nir_function_impl *impl)
>  {
>     nir_locals = ralloc_array(mem_ctx, dst_reg, impl->reg_alloc);
> +   for (unsigned i = 0; i < impl->reg_alloc; i++) {
> +      nir_locals[i].file = BAD_FILE;
> +   }
>  
>     foreach_list_typed(nir_register, reg, node, &impl->registers) {
>        unsigned array_elems =
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151111/92eee28b/attachment.sig>


More information about the mesa-dev mailing list