[llvm] [GISel] Explicitly disable BF16 tablegen patterns. (PR #124113)

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 28 05:22:07 PST 2025


mikaelholmen wrote:

Hi @davemgreen

With this patch
```
llvm-lit -av test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll
```
fails when llc is compiled with EXPENSIVE_CHECKS on:
```
# After Virtual Register Rewriter
********** INTERVALS **********
VGPR9_LO16 EMPTY
VGPR9_HI16 EMPTY
RegMasks:
********** MACHINEINSTRS **********
# Machine code for function test_mfma_f32_16x16x32_bf16_no_agpr__vgprcd: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, FailedRegAlloc, TracksDebugUserValues
Function Live Ins: $sgpr4_sgpr5

0B	bb.0 (%ir-block.0):
	  liveins: $sgpr4_sgpr5
64B	  early-clobber renamable $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = S_LOAD_DWORDX8_IMM_ec renamable $sgpr4_sgpr5, 52, 0 :: (dereferenceable invariant load (s256) from %ir.arg0.kernarg.offset, align 4, addrspace 4)
80B	  early-clobber renamable $sgpr0_sgpr1_sgpr2_sgpr3 = S_LOAD_DWORDX4_IMM_ec renamable $sgpr4_sgpr5, 84, 0 :: (dereferenceable invariant load (s128) from %ir.arg2.kernarg.offset, align 4, addrspace 4)
96B	  renamable $vgpr0_vgpr1_vgpr2_vgpr3 = COPY renamable $sgpr8_sgpr9_sgpr10_sgpr11
112B	  renamable $vgpr8 = V_MOV_B32_e32 0, implicit $exec
128B	  early-clobber renamable $sgpr6_sgpr7 = S_LOAD_DWORDX2_IMM_ec killed renamable $sgpr4_sgpr5, 36, 0 :: (dereferenceable invariant load (s64) from %ir.out.kernarg.offset, align 4, addrspace 4)
144B	  renamable $vgpr4_vgpr5_vgpr6_vgpr7 = COPY killed renamable $sgpr12_sgpr13_sgpr14_sgpr15
160B	  renamable $vgpr10_vgpr11_vgpr12_vgpr13 = COPY killed renamable $sgpr0_sgpr1_sgpr2_sgpr3
168B	  renamable $agpr0_agpr1_agpr2_agpr3 = COPY killed renamable $vgpr10_vgpr11_vgpr12_vgpr13
176B	  renamable $agpr0_agpr1_agpr2_agpr3 = V_MFMA_F32_16X16X32_BF16_e64 killed $vgpr0_vgpr1_vgpr2_vgpr3, killed $vgpr4_vgpr5_vgpr6_vgpr7, killed $agpr0_agpr1_agpr2_agpr3, 0, 0, 0, implicit $mode, implicit $exec
184B	  renamable $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed renamable $agpr0_agpr1_agpr2_agpr3
192B	  GLOBAL_STORE_DWORDX4_SADDR killed renamable $vgpr8, killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr6_sgpr7, 0, 0, implicit $exec :: (store (s128) into %ir.out.load, addrspace 1)
208B	  S_ENDPGM 0

# End machine code for function test_mfma_f32_16x16x32_bf16_no_agpr__vgprcd.

*** Bad machine code: isRenamable set on reserved register ***
- function:    test_mfma_f32_16x16x32_bf16_no_agpr__vgprcd
- basic block: %bb.0  (0x55dab89e8b30) [0B;224B)
- instruction: 168B	renamable $agpr0_agpr1_agpr2_agpr3 = COPY killed renamable $vgpr10_vgpr11_vgpr12_vgpr13
- operand 0:   renamable $agpr0_agpr1_agpr2_agpr3

*** Bad machine code: isRenamable set on reserved register ***
- function:    test_mfma_f32_16x16x32_bf16_no_agpr__vgprcd
- basic block: %bb.0  (0x55dab89e8b30) [0B;224B)
- instruction: 176B	renamable $agpr0_agpr1_agpr2_agpr3 = V_MFMA_F32_16X16X32_BF16_e64 killed $vgpr0_vgpr1_vgpr2_vgpr3, killed $vgpr4_vgpr5_vgpr6_vgpr7, killed $agpr0_agpr1_agpr2_agpr3, 0, 0, 0, implicit $mode, implicit $exec
- operand 0:   renamable $agpr0_agpr1_agpr2_agpr3

*** Bad machine code: isRenamable set on reserved register ***
- function:    test_mfma_f32_16x16x32_bf16_no_agpr__vgprcd
- basic block: %bb.0  (0x55dab89e8b30) [0B;224B)
- instruction: 184B	renamable $vgpr0_vgpr1_vgpr2_vgpr3 = COPY killed renamable $agpr0_agpr1_agpr2_agpr3
- operand 1:   killed renamable $agpr0_agpr1_agpr2_agpr3
LLVM ERROR: Found 3 machine code errors.
```

Can also be seen if you use a normal build and just add "-verify-machineinstrs" to the command on line 3:
```llc -mtriple=amdgcn -mcpu=gfx950 -global-isel=1 -global-isel-abort=2 < test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll -verify-machineinstrs```

```
 

https://github.com/llvm/llvm-project/pull/124113


More information about the llvm-commits mailing list