nv50/ir: allow immediate 0 to be loaded anywhere
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 1 Dec 2015 20:01:11 +0000 (15:01 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 2 Dec 2015 23:51:15 +0000 (18:51 -0500)
There's a post-RA fixup to replace 0's with $r63 (or $r127 if too many
regs are used), so just as nvc0, let an immediate 0 be loaded anywhere.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp

index 94cf0f0e05e5bd4545b666b3c543dc1dec203d00..a0fb14444d2d875c370aa558799d212f028a4e31 100644 (file)
@@ -268,6 +268,12 @@ TargetNV50::insnCanLoad(const Instruction *i, int s,
 {
    DataFile sf = ld->src(0).getFile();
 
+   // immediate 0 can be represented by GPR $r63/$r127
+   if (sf == FILE_IMMEDIATE && ld->getSrc(0)->reg.data.u64 == 0)
+      return (!i->isPseudo() &&
+              !i->asTex() &&
+              i->op != OP_EXPORT && i->op != OP_STORE);
+
    if (sf == FILE_IMMEDIATE && (i->predSrc >= 0 || i->flagsDef >= 0))
       return false;
    if (s >= opInfo[i->op].srcNr)