diff options
Diffstat (limited to 'src/gallium/drivers/nouveau')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp | 4 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_util.cpp | 8 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_util.h | 1 |
3 files changed, 10 insertions, 3 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp index 5ab6570175d..4b105b453c3 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp @@ -1657,6 +1657,10 @@ RegAlloc::execFunc() ret && i <= func->loopNestingBound; sequence = func->cfg.nextSequence(), ++i) ret = buildLiveSets(BasicBlock::get(func->cfg.getRoot())); + // reset marker + for (ArrayList::Iterator bi = func->allBBlocks.iterator(); + !bi.end(); bi.next()) + BasicBlock::get(bi)->liveSet.marker = false; if (!ret) break; func->orderInstructions(this->insns); diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_util.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_util.cpp index 895977710ca..d26acb304bc 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_util.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_util.cpp @@ -254,7 +254,9 @@ bool BitSet::resize(unsigned int nBits) return false; } if (n > p) - memset(&data[4 * p + 4], 0, (n - p) * 4); + memset(&data[p], 0, (n - p) * 4); + if (nBits < size && (nBits % 32)) + data[(nBits + 31) / 32 - 1] &= (1 << (nBits % 32)) - 1; size = nBits; return true; @@ -274,8 +276,8 @@ bool BitSet::allocate(unsigned int nBits, bool zero) if (zero) memset(data, 0, (size + 7) / 8); else - if (nBits) - data[(size + 31) / 32 - 1] = 0; // clear unused bits (e.g. for popCount) + if (size % 32) // clear unused bits (e.g. for popCount) + data[(size + 31) / 32 - 1] &= (1 << (size % 32)) - 1; return data; } diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_util.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_util.h index a4ea9d981e0..fa2c4804a42 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_util.h +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_util.h @@ -484,6 +484,7 @@ public: FREE(data); } + // allocate will keep old data iff size is unchanged bool allocate(unsigned int nBits, bool zero); bool resize(unsigned int nBits); // keep old data, zero additional bits |