[Mesa-dev] [PATCH] nv50/ir: fix bb positions after exit instructions

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Aug 16 19:47:44 UTC 2016



On 08/14/2016 04:22 AM, Ilia Mirkin wrote:
> It's fairly rare that the BB layout puts BBs after the exit block, which
> is likely the reason these issues lingered for so long.
>
> This fixes a fraction of issues with the giant pixmark piano shader.

This sounds reasonable to me.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Cc: <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp
> index 7878f2f..cc2a88e 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp
> @@ -2139,7 +2139,7 @@ makeInstructionLong(Instruction *insn)
>     insn->encSize = 8;
>
>     for (int i = fn->bbCount - 1; i >= 0 && fn->bbArray[i] != insn->bb; --i) {
> -      fn->bbArray[i]->binPos += 4;
> +      fn->bbArray[i]->binPos += adj;
>     }
>     fn->binSize += adj;
>     insn->bb->binSize += adj;
> @@ -2191,9 +2191,16 @@ replaceExitWithModifier(Function *func)
>              return;
>        }
>     }
> -   epilogue->binSize -= 8;
> -   func->binSize -= 8;
> +
> +   int adj = epilogue->getExit()->encSize;
> +   epilogue->binSize -= adj;
> +   func->binSize -= adj;
>     delete_Instruction(func->getProgram(), epilogue->getExit());
> +
> +   // There may be BB's that are laid out after the exit block
> +   for (int i = func->bbCount - 1; i >= 0 && func->bbArray[i] != epilogue; --i) {
> +      func->bbArray[i]->binPos -= adj;
> +   }
>  }
>
>  void
>


More information about the mesa-dev mailing list