[all-commits] [llvm/llvm-project] 13197d: [AMDGPU] Reduce number of emitted S_SET_VGPR_MSB i...
Tim Gymnich via All-commits
all-commits at lists.llvm.org
Tue Jan 20 01:47:46 PST 2026
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 13197d2f231f7d54c90f186a9320825edb60209d
https://github.com/llvm/llvm-project/commit/13197d2f231f7d54c90f186a9320825edb60209d
Author: Tim Gymnich <tim at gymni.ch>
Date: 2026-01-20 (Tue, 20 Jan 2026)
Changed paths:
M llvm/lib/Target/AMDGPU/AMDGPULowerVGPREncoding.cpp
M llvm/test/CodeGen/AMDGPU/vgpr-lowering-gfx1250.mir
Log Message:
-----------
[AMDGPU] Reduce number of emitted S_SET_VGPR_MSB instructions (#176502)
Given a `S_SET_VGPR_MSB` instruction with `CurrentMode` and
`CurrentMask` where `CurrentMask` is a bit mask with 1 for every bit
position we set to 0 or 1 in `CurrentMode`.
We also have a new mode bitset `Mode` and a `Mask` with the bit position
we want set.
Currently we check if the difference between `Mode` and `CurrentMode`
(`Delta = Mode ^ CurrentMode`) overlaps with the bit positions we
previously set (`Delta & CurrentMask .== 0`). We then update
`CurrentMode` and `CurrentMask` accordingly.
However if bit positions differ in `Mode` and `CurrentMode` but we do
not care about these bit positions for our next instruction `(Delta &
Mask) & CurrentMask .== 0`) we can still update the previous
`S_SET_VGPR_MSB`, since we don't interfere with any of the bit positions
in `CurrentMask`
```mir
S_SET_VGPR_MSB 0x0002
$vgpr0 = V_MOV_B32_e32 $vgpr530 ; mode: 0b0000_0010 mask: 0b0000_0011
-> $vgpr1 = V_ADD_U32_e32 0x1234, $vgpr531 ; mode: 0b0000_1000 mask: 0b0000_1100
; src0 is imm so we don't care about it.
```
| | dst | src2 | src1 | src0 |
|---|---|---|---|---|
| CurrentMode | 00 | 00 | 00 | 10 |
| CurrentMask | 00 | 00 | 00 | 11 |
| Mode | 00 | 00 | 10 | 00 |
| Mask | 00 | 00 | 11 | 00 |
| Delta | 00 | 00 | 10 | 10 |
| Delta & CurrentMask | 00 | 00 | 00 | 10 |
| Delta & Mask & CurrentMask | 00 | 00 | 00 | 00 |
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list