diff --git a/crates/hipfire-arch-qwen35/src/speculative.rs b/crates/hipfire-arch-qwen35/src/speculative.rs index a06bb3495..5ad87bbff 100644 --- a/crates/hipfire-arch-qwen35/src/speculative.rs +++ b/crates/hipfire-arch-qwen35/src/speculative.rs @@ -208,10 +208,10 @@ fn dflash_moe_draft_ffn_graph_eligible( /// `verify_graph_ok` shares that eligibility via `prefill_batch_pbs_eligible`. /// Graph-off direct and forced-blob direct full-model V2 fixtures pass on /// gfx1100, but two graph-on V2 campaigns lost the endpoint. This is a -/// default-off graph capability quarantine for exact gfx1100 + V2 only; -/// direct batched WMMA remains on. `HIPFIRE_VERIFY_GRAPH=1` opts back in -/// diagnostically; `=0` force-offs everywhere; gfx1151/gfx12 and non-V2 -/// gfx1100 stay default-on. +/// default-off graph capability quarantine for gfx1100 + V2 and the measured +/// gfx1201 legacy MQ4 workload; direct batched HIP remains on. +/// `HIPFIRE_VERIFY_GRAPH=1` opts back in diagnostically; `=0` force-offs +/// everywhere; other gfx12 shapes stay default-on. fn dflash_verify_graph_env_eligible( arch: &str, output_dtype: rdna_compute::DType, @@ -231,6 +231,11 @@ fn dflash_verify_graph_env_eligible( if arch == "gfx1100" && is_mq_v2 { return env_value == Some("1"); } + if arch == "gfx1201" && output_dtype == rdna_compute::DType::MQ4G256 { + // Paired 11.5K DFlash runs on R9700 show graph replay slower than the + // direct tiled-flash path; keep it available as an explicit diagnostic. + return env_value == Some("1"); + } true } @@ -7632,6 +7637,16 @@ mod tests { DType::MQ3G256V2, None )); + assert!(!dflash_verify_graph_env_eligible( + "gfx1201", + DType::MQ4G256, + None + )); + assert!(dflash_verify_graph_env_eligible( + "gfx1201", + DType::MQ4G256, + Some("1") + )); } fn try_gpu() -> Option {