foreach_list(node, &this->instructions) {
fs_inst *inst = (fs_inst *)node;
- /* Texturing produces 4 contiguous registers, so no splitting. */
- if (inst->is_tex()) {
+ /* If there's a SEND message that requires contiguous destination
+ * registers, no splitting is allowed.
+ */
+ if (inst->regs_written() > 1) {
split_grf[inst->dst.reg] = false;
}
}
if (scan_inst->dst.file == GRF &&
scan_inst->dst.reg == inst->dst.reg &&
(scan_inst->dst.reg_offset == inst->dst.reg_offset ||
- scan_inst->is_tex())) {
+ scan_inst->regs_written() > 1)) {
break;
}
}
if (scan_inst->dst.file == GRF) {
if (scan_inst->dst.reg == inst->dst.reg &&
(scan_inst->dst.reg_offset == inst->dst.reg_offset ||
- scan_inst->is_tex())) {
+ scan_inst->regs_written() > 1)) {
interfered = true;
break;
}
if (inst->src[0].file == GRF &&
scan_inst->dst.reg == inst->src[0].reg &&
(scan_inst->dst.reg_offset == inst->src[0].reg_offset ||
- scan_inst->is_tex())) {
+ scan_inst->regs_written() > 1)) {
interfered = true;
break;
}
* into a compute-to-MRF.
*/
- if (scan_inst->is_tex()) {
- /* texturing writes several continuous regs, so we can't
- * compute-to-mrf that.
- */
+ /* SENDs can only write to GRFs, so no compute-to-MRF. */
+ if (scan_inst->mlen) {
break;
}