vc4: Drop destination register when it's unused.

This slightly reduces instructions on shader-db, but I think it's just
perturbing register allocation -- the allocator should have always
trivially colored these nodes, before.  This commit is just to make QIR
code failing more intelligible when register allocation fails.
This commit is contained in:
Eric Anholt 2016-10-05 09:21:37 -07:00
parent d4ae5ca823
commit 7c7bcbbc7d

View file

@ -102,9 +102,30 @@ qir_opt_dead_code(struct vc4_compile *c)
continue;
}
if (qir_has_side_effects(c, inst))
continue;
if (inst->sf ||
qir_has_side_effects(c, inst) ||
has_nonremovable_reads(c, inst)) {
/* If we can't remove the instruction, but we
* don't need its destination value, just
* remove the destination. The register
* allocator would trivially color it and it
* wouldn't cause any register pressure, but
* it's nicer to read the QIR code without
* unused destination regs.
*/
if (inst->dst.file == QFILE_TEMP) {
if (debug) {
fprintf(stderr,
"Removing dst from: ");
qir_dump_inst(c, inst);
fprintf(stderr, "\n");
}
c->defs[inst->dst.index] = NULL;
inst->dst.file = QFILE_NULL;
progress = true;
}
continue;
}