freedreno/ir3/legalize: don't allow (nopN) if (rptN)

These two encodings are mutually exclusive.  If the instruction is a
vector(ish) `(rptN)` instruction, then we can't fold a `(nopN)` post-
delay into it.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5280>
This commit is contained in:
Rob Clark
2020-03-10 16:01:30 -07:00
committed by Marge Bot
parent 1418ea0d00
commit cd376a1434

View File

@@ -681,7 +681,8 @@ nop_sched(struct ir3 *ir)
*/
if ((delay > 0) && (ir->compiler->gpu_id >= 600) && last &&
((opc_cat(last->opc) == 2) || (opc_cat(last->opc) == 3))) {
((opc_cat(last->opc) == 2) || (opc_cat(last->opc) == 3)) &&
(last->repeat == 0)) {
/* the previous cat2/cat3 instruction can encode at most 3 nop's: */
unsigned transfer = MIN2(delay, 3 - last->nop);
last->nop += transfer;