[llvm] AMDGPU/GlobalISel: RegBankLegalize rules for ds_permute (PR #188266)

Petar Avramovic via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 25 04:16:21 PDT 2026


petar-avramovic wrote:

## RegBankLegalize coverage check

**PR:** https://github.com/llvm/llvm-project/pull/188266
**New opcodes in `addRulesForIOpcs`:** `amdgcn_ds_bpermute`, `amdgcn_ds_bpermute_fi_b32`, `amdgcn_ds_permute`
**Rules per opcode:** `.Uni(S32, ...)` and `.Div(S32, ...)`
**Build dir:** `build_clang`

| Opcode | Rule | Test file | Function | Status |
|--------|------|-----------|----------|--------|
| amdgcn_ds_bpermute | .Uni | llvm.amdgcn.ds.bpermute.ll | `ds_bpermute` | ✅ |
| amdgcn_ds_bpermute | .Div | llvm.amdgcn.ds.bpermute.ll | `ds_bpermute_add_shl` | ✅ |
| amdgcn_ds_bpermute_fi_b32 | .Uni | llvm.amdgcn.ds.bpermute.fi.b32.ll | `ds_bpermute_fi_b32` | ✅ |
| amdgcn_ds_bpermute_fi_b32 | .Div | llvm.amdgcn.ds.bpermute.fi.b32.ll | `ds_bpermute_fi_b32_add_shl` | ✅ |
| amdgcn_ds_permute | .Uni | llvm.amdgcn.ds.permute.ll | `ds_permute` | ✅ |
| amdgcn_ds_permute | .Div | 💡 llvm.amdgcn.ds.permute.ll | 💡 `ds_permute_add_shl` | ❌ MISSING |

### Suggested fix

The `.Div` rule for `amdgcn_ds_permute` is not exercised by any existing GISel test. A non-kernel `void` device function is needed so arguments arrive in VGPRs, mirroring the `ds_bpermute_add_shl` pattern:

```llvm
define void @ds_permute_add_shl(ptr addrspace(1) %out, i32 %base_index, i32 %src) nounwind {
  %index = add i32 %base_index, 1
  %byte_index = shl i32 %index, 2
  %permute = call i32 @llvm.amdgcn.ds.permute(i32 %byte_index, i32 %src) #0
  store i32 %permute, ptr addrspace(1) %out, align 4
  ret void
}
```

Non-kernel `void` function so arguments arrive in VGPRs, exercising the `.Div` rule. Run `update_llc_test_checks.py` to fill in the check lines after adding this function to `llvm.amdgcn.ds.permute.ll`.

> ⚙️ *Automated check — not a human review. Posted by [`/check-regbank-coverage-pr`](https://github.com/llvm/llvm-project/blob/main/.claude/commands/check-regbank-coverage-pr.md) running in [Claude Code](https://claude.ai/code).*

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


More information about the llvm-commits mailing list