[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