v3d: Make sure that QPU instruction-has-a-dest matches VIR.
Found when debugging register spilling -- we would try to spill the dest of a STVPMV, inserting spill code after entering the last segment. In fact, we were likely to to choose to do this, given that the STVPMV "dest" temp was never read from, making it cheap to spill. Cc: "18.2" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
@@ -928,7 +928,7 @@ VIR_A_ALU2(OR)
|
||||
VIR_A_ALU2(XOR)
|
||||
VIR_A_ALU2(VADD)
|
||||
VIR_A_ALU2(VSUB)
|
||||
VIR_A_ALU2(STVPMV)
|
||||
VIR_A_NODST_2(STVPMV)
|
||||
VIR_A_ALU1(NOT)
|
||||
VIR_A_ALU1(NEG)
|
||||
VIR_A_ALU1(FLAPUSH)
|
||||
|
@@ -452,6 +452,16 @@ vir_emit_def(struct v3d_compile *c, struct qinst *inst)
|
||||
{
|
||||
assert(inst->dst.file == QFILE_NULL);
|
||||
|
||||
/* If we're emitting an instruction that's a def, it had better be
|
||||
* writing a register.
|
||||
*/
|
||||
if (inst->qpu.type == V3D_QPU_INSTR_TYPE_ALU) {
|
||||
assert(inst->qpu.alu.add.op == V3D_QPU_A_NOP ||
|
||||
v3d_qpu_add_op_has_dst(inst->qpu.alu.add.op));
|
||||
assert(inst->qpu.alu.mul.op == V3D_QPU_M_NOP ||
|
||||
v3d_qpu_mul_op_has_dst(inst->qpu.alu.mul.op));
|
||||
}
|
||||
|
||||
inst->dst = vir_get_temp(c);
|
||||
|
||||
if (inst->dst.file == QFILE_TEMP)
|
||||
|
Reference in New Issue
Block a user