Module: Mesa Branch: staging/21.3 Commit: e7222259a3b722e4d5403e1652403a6111e00b7c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e7222259a3b722e4d5403e1652403a6111e00b7c
Author: Alyssa Rosenzweig <[email protected]> Date: Thu Feb 17 19:34:04 2022 -0500 pan/bi: Avoid *FADD.v2f16 hazard in scheduler Obscure encoding restriction. Fixes crash (assertion fail when instruction packing) in asphalt9/2659.shader_test on Bifrost. Signed-off-by: Alyssa Rosenzweig <[email protected]> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15072> (cherry picked from commit 24d2bdb1e050134a25924487792ee0018f8478ae) --- .pick_status.json | 2 +- src/panfrost/bifrost/bi_schedule.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 3a4da06c144..a66aed88978 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -481,7 +481,7 @@ "description": "pan/bi: Avoid *FADD.v2f16 hazard in scheduler", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/panfrost/bifrost/bi_schedule.c b/src/panfrost/bifrost/bi_schedule.c index cc0c128f1ea..421afdffc40 100644 --- a/src/panfrost/bifrost/bi_schedule.c +++ b/src/panfrost/bifrost/bi_schedule.c @@ -490,6 +490,18 @@ bi_can_iaddc(bi_instr *ins) ins->src[1].swizzle == BI_SWIZZLE_H01); } +/* + * The encoding of *FADD.v2f16 only specifies a single abs flag. All abs + * encodings are permitted by swapping operands; however, this scheme fails if + * both operands are equal. Test for this case. + */ +static bool +bi_impacted_abs(bi_instr *I) +{ + return I->src[0].abs && I->src[1].abs && + bi_is_word_equiv(I->src[0], I->src[1]); +} + bool bi_can_fma(bi_instr *ins) { @@ -497,6 +509,10 @@ bi_can_fma(bi_instr *ins) if (bi_can_iaddc(ins)) return true; + /* *FADD.v2f16 has restricted abs modifiers, use +FADD.v2f16 instead */ + if (ins->op == BI_OPCODE_FADD_V2F16 && bi_impacted_abs(ins)) + return false; + /* TODO: some additional fp16 constraints */ return bi_opcode_props[ins->op].fma; }
