From b23ec3f8ba1230679d0188e5bf00270bf238b826 Mon Sep 17 00:00:00 2001 From: Christoph Bumiller Date: Thu, 28 Feb 2013 19:00:02 +0100 Subject: [PATCH] nv50/ir: fix size adjustment for sched info for multiple functions --- .../drivers/nv50/codegen/nv50_ir_target.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_target.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_target.cpp index 92552a0efe5..1b6d1830ee5 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_target.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_target.cpp @@ -197,18 +197,23 @@ CodeEmitter::prepareEmission(Program *prog) // adjust sizes & positions for schedulding info: if (prog->getTarget()->hasSWSched) { + uint32_t adjPos = func->binPos; BasicBlock *bb = NULL; for (int i = 0; i < func->bbCount; ++i) { bb = func->bbArray[i]; - const uint32_t oldPos = bb->binPos; - const uint32_t oldEnd = bb->binPos + bb->binSize; - uint32_t adjPos = oldPos + sizeToBundlesNVE4(oldPos) * 8; - uint32_t adjEnd = oldEnd + sizeToBundlesNVE4(oldEnd) * 8; + int32_t adjSize = bb->binSize; + if (adjPos % 64) { + adjSize -= 64 - adjPos % 64; + if (adjSize < 0) + adjSize = 0; + } + adjSize = bb->binSize + sizeToBundlesNVE4(adjSize) * 8; bb->binPos = adjPos; - bb->binSize = adjEnd - adjPos; + bb->binSize = adjSize; + adjPos += adjSize; } if (bb) - func->binSize = bb->binPos + bb->binSize; + func->binSize = adjPos - func->binPos; } prog->binSize += func->binSize; -- 2.30.2