diff options
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp | 4 | ||||
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp | 11 | ||||
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir_target.h | 2 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp index cf483d0deb9..5078eb4d6f8 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp @@ -722,7 +722,9 @@ bool Source::scanSource() if (info->io.genUserClip > 0) { info->io.clipDistanceMask = (1 << info->io.genUserClip) - 1; - for (unsigned int n = 0; n < ((info->io.genUserClip + 3) / 4); ++n) { + const unsigned int nOut = (info->io.genUserClip + 3) / 4; + + for (unsigned int n = 0; n < nOut; ++n) { unsigned int i = info->numOutputs++; info->out[i].id = i; info->out[i].sn = TGSI_SEMANTIC_CLIPDIST; diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp index 714837e5c27..9947c043b64 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp @@ -263,7 +263,7 @@ public: bool run(const std::list<ValuePair>&); - Symbol *assignSlot(const Interval&, unsigned int size); + Symbol *assignSlot(const Interval&, const unsigned int size); inline int32_t getStackSize() const { return stackSize; } private: @@ -1384,7 +1384,7 @@ GCRA::cleanup(const bool success) } Symbol * -SpillCodeInserter::assignSlot(const Interval &livei, unsigned int size) +SpillCodeInserter::assignSlot(const Interval &livei, const unsigned int size) { SpillSlot slot; int32_t offsetBase = stackSize; @@ -1397,21 +1397,22 @@ SpillCodeInserter::assignSlot(const Interval &livei, unsigned int size) slot.sym = NULL; for (offset = offsetBase; offset < stackSize; offset += size) { + const int32_t entryEnd = offset + size; while (it != slots.end() && it->offset < offset) ++it; if (it == slots.end()) // no slots left break; std::list<SpillSlot>::iterator bgn = it; - while (it != slots.end() && it->offset < (offset + size)) { + while (it != slots.end() && it->offset < entryEnd) { it->occup.print(); if (it->occup.overlaps(livei)) break; ++it; } - if (it == slots.end() || it->offset >= (offset + size)) { + if (it == slots.end() || it->offset >= entryEnd) { // fits - for (; bgn != slots.end() && bgn->offset < (offset + size); ++bgn) { + for (; bgn != slots.end() && bgn->offset < entryEnd; ++bgn) { bgn->occup.insert(livei); if (bgn->size() == size) slot.sym = bgn->sym; diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_target.h b/src/gallium/drivers/nv50/codegen/nv50_ir_target.h index c60ee0216f7..757f4f9437f 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_target.h +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_target.h @@ -62,6 +62,7 @@ class CodeEmitter { public: CodeEmitter(const Target *); + virtual ~CodeEmitter(); // returns whether the instruction was encodable and written virtual bool emitInstruction(Instruction *) = 0; @@ -117,6 +118,7 @@ class Target { public: Target(bool j, bool s) : joinAnterior(j), hasSWSched(s) { } + virtual ~Target(); static Target *create(uint32_t chipset); static void destroy(Target *); |