nv50/ir: only avoid spilling constrained def if a mov is added
authorKarol Herbst <kherbst@redhat.com>
Wed, 2 May 2018 16:36:41 +0000 (18:36 +0200)
committerKarol Herbst <kherbst@redhat.com>
Sat, 23 Jun 2018 01:00:24 +0000 (03:00 +0200)
fix spilling regression introduced by 5428066f5e

this is just a minor mistake done while moving the code out into a new
function. The function contained a loop which might have been terminated
earlier and skipped setting noSpill to 1. After the refactoring it was always
set.

Fixes: 5428066f5e1ef5ea6ae04c84019f270023cfc6aa
("nv50/ir: make a copy of tex src if it's referenced multiple times")
Signed-off-by: Karol Herbst <kherbst@redhat.com>
src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp

index 28e0e260cee79111cfa282b10e52ef69ace0b1bc..b660fec75c9851ef1a90252b4a488857a54018d1 100644 (file)
@@ -2353,6 +2353,8 @@ RegAlloc::InsertConstraintsPass::insertConstraintMove(Instruction *cst, int s)
 
    cst->setSrc(s, mov->getDef(0));
    cst->bb->insertBefore(cst, mov);
+
+   cst->getDef(0)->asLValue()->noSpill = 1; // doesn't help
 }
 
 // Insert extra moves so that, if multiple register constraints on a value are
@@ -2397,8 +2399,6 @@ RegAlloc::InsertConstraintsPass::insertConstraintMoves()
             }
 
             insertConstraintMove(cst, s);
-
-            cst->getDef(0)->asLValue()->noSpill = 1; // doesn't help
          }
       }
    }