diff --git a/.pick_status.json b/.pick_status.json index 315230f437a..615e34dce0c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2434,7 +2434,7 @@ "description": "nak: BMov is always variable-latency", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "7cd9680554b16e7de07873cd3be428953be9ad07", "notes": null diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index 861cb033673..0da1da71e01 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -5700,13 +5700,10 @@ impl Instr { Op::Bra(_) | Op::Exit(_) => true, Op::WarpSync(_) => false, - // BMOV: barriers only when using gprs (and only valid for the gpr), - // no barriers for the others. - Op::BMov(op) => match &op.dst { - Dst::None => true, - Dst::SSA(vec) => vec.file() == RegFile::Bar, - Dst::Reg(reg) => reg.file() == RegFile::Bar, - }, + // The barrier half is HW scoreboarded by the GPR isn't. When + // moving from a GPR to a barrier, we still need a token for WaR + // hazards. + Op::BMov(_) => false, // Geometry ops Op::Out(_) | Op::OutFinal(_) => false,