[Mesa-dev] [PATCH 03/20] i965/vec4: Preserve the CFG in a few more places.

Pohjolainen, Topi topi.pohjolainen at intel.com
Fri Sep 5 01:08:50 PDT 2014


On Tue, Sep 02, 2014 at 09:34:14PM -0700, Matt Turner wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_vec4.cpp | 23 ++++++++++++++++-------
>  1 file changed, 16 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> index 536a4b6..f1c5210 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> @@ -423,7 +423,7 @@ try_eliminate_instruction(vec4_instruction *inst, int new_writemask,
>        if (inst->writes_accumulator || inst->writes_flag()) {
>           inst->dst = dst_reg(retype(brw_null_reg(), inst->dst.type));
>        } else {
> -         inst->remove();
> +         inst->opcode = BRW_OPCODE_NOP;
>        }
>  
>        return true;
> @@ -462,7 +462,7 @@ vec4_visitor::dead_code_eliminate()
>  
>     calculate_live_intervals();
>  
> -   foreach_in_list_safe(vec4_instruction, inst, &instructions) {
> +   foreach_block_and_inst(block, vec4_instruction, inst, cfg) {
>        pc++;
>  
>        bool inst_writes_flag = false;
> @@ -523,7 +523,7 @@ vec4_visitor::dead_code_eliminate()
>  
>           if (inst_writes_flag) {
>              if (scan_inst->dst.is_null() && scan_inst->writes_flag()) {
> -               scan_inst->remove();
> +               scan_inst->opcode = BRW_OPCODE_NOP;
>                 progress = true;
>                 continue;
>              } else if (scan_inst->reads_flag()) {
> @@ -553,8 +553,15 @@ vec4_visitor::dead_code_eliminate()
>        }
>     }
>  
> -   if (progress)
> -      invalidate_live_intervals();
> +   if (progress) {
> +      foreach_block_and_inst_safe (block, backend_instruction, inst, cfg) {
> +         if (inst->opcode == BRW_OPCODE_NOP) {
> +            inst->remove(block);
> +         }
> +      }
> +
> +      invalidate_live_intervals(false);
> +   }

Couldn't spot any other remove() occurrences in the current logic, so this
looks safe.

>  
>     return progress;
>  }
> @@ -690,7 +697,9 @@ vec4_visitor::opt_algebraic()
>  {
>     bool progress = false;
>  
> -   foreach_in_list(vec4_instruction, inst, &instructions) {
> +   calculate_cfg();
> +
> +   foreach_block_and_inst(block, vec4_instruction, inst, cfg) {
>        switch (inst->opcode) {
>        case BRW_OPCODE_ADD:
>  	 if (inst->src[1].is_zero()) {
> @@ -730,7 +739,7 @@ vec4_visitor::opt_algebraic()
>     }
>  
>     if (progress)
> -      invalidate_live_intervals();
> +      invalidate_live_intervals(false);

Here in turn instuctions are not added or removed:

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

>  
>     return progress;
>  }
> -- 
> 1.8.5.5
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list