nv50/ir: fix off-by-ones in CSE and nvc0 insnCanLoad
[mesa.git] / src / gallium / drivers / nv50 / codegen / nv50_ir_bb.cpp
index 5a76558863c9341d6d4e635619f4aa1f96a33ad9..ebfb07a2b3ecbac66f9d6c18ebe750af1a879103 100644 (file)
@@ -24,8 +24,9 @@
 
 namespace nv50_ir {
 
-Function::Function(Program *p, const char *fnName)
+Function::Function(Program *p, const char *fnName, uint32_t label)
    : call(this),
+     label(label),
      name(fnName),
      prog(p)
 {
@@ -40,11 +41,17 @@ Function::Function(Program *p, const char *fnName)
    binPos = 0;
    binSize = 0;
 
+   stackPtr = NULL;
+   tlsBase = 0;
+   tlsSize = 0;
+
    prog->add(this, id);
 }
 
 Function::~Function()
 {
+   prog->del(this, id);
+
    if (domTree)
       delete domTree;
    if (bbArray)
@@ -402,6 +409,8 @@ Function::setExit(BasicBlock *bb)
 unsigned int
 Function::orderInstructions(ArrayList &result)
 {
+   result.clear();
+
    for (IteratorRef it = cfg.iteratorCFG(); !it->end(); it->next()) {
       BasicBlock *bb =
          BasicBlock::get(reinterpret_cast<Graph::Node *>(it->get()));