[clang] [llvm] [mlir] [AMDGPU] Disable neg_lo[0:1] and neg_hi[0:1] on wmma_f32_16x16x32_bf16 (PR #188649)
Shilei Tian via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 25 21:21:19 PDT 2026
================
@@ -1526,19 +1527,28 @@ class VOP3PWMMA_Profile<list<ValueType> ArgTy, bit _IsSWMMAC, int _IndexType,
bit IsAB_BF16 = !or(!eq(ArgTy[1], v16i16), !eq(ArgTy[1], v8i16), !eq(ArgTy[1], v4i16),
!eq(ArgTy[1], v16bf16), !eq(ArgTy[1], v8bf16), !eq(ArgTy[1], v4bf16));
bit IsF16BF16 = !or(IsAB_F16, IsAB_BF16);
+ bit IsAB_F4F6F8 = !and(!not(IsIU), !or(!eq(ArgTy[1], v8i32), !eq(ArgTy[1], v16i32),
+ !eq(ArgTy[1], v24i32), !eq(ArgTy[1], v32i32),
+ !eq(ArgTy[1], v48i32), !eq(ArgTy[1], v64i32)));
bit IsC_F64 = !eq(ArgTy[3], v8f64);
bit IsC_F32 = !or(!eq(ArgTy[3], v8f32), !eq(ArgTy[3], v4f32));
bit IsC_BF16 = !or(!eq(ArgTy[3], v8i16), !eq(ArgTy[3], v4i16),
!eq(ArgTy[3], v8bf16), !eq(ArgTy[3], v4bf16));
bit IsC_F16 = !or(!eq(ArgTy[3], v8f16), !eq(ArgTy[3], v4f16));
- bit NegLo01 = !not(NoABMods);
+ bit NegLo0 = !not(NoABMods);
+ bit NegLo1 = !not(NoABMods);
bit NegLo2 = !and(!not(IsIU), IsWMMA);
- bit NegHi01 = IsF16BF16; // Only F16BF16 can have neg_hi[0:1]
+ bit NegHi0 = !and(IsF16BF16, !not(NoABMods)); // Only F16BF16 can have neg_hi[0]
----------------
shiltian wrote:
In the long run, I wonder if it would be better to make all of these arguments, like `bit<3> HasNegLo`, `bit<3> HasNegHi`, etc. I feel like the HW team can always surprise us in future targets.
https://github.com/llvm/llvm-project/pull/188649
More information about the llvm-commits
mailing list