[llvm] [AMDGPU] Generalize extractSubregFromImm (PR #208765)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 13 13:58:38 PDT 2026
================
@@ -3477,28 +3477,14 @@ void SIInstrInfo::mutateAndCleanupImplicit(MachineInstr &MI,
MI.removeOperand(I);
}
-std::optional<int64_t> SIInstrInfo::extractSubregFromImm(int64_t Imm,
- unsigned SubRegIndex) {
- switch (SubRegIndex) {
- case AMDGPU::NoSubRegister:
+int64_t SIInstrInfo::extractSubregFromImm(int64_t Imm,
+ unsigned SubRegIndex) const {
+ if (SubRegIndex == AMDGPU::NoSubRegister)
return Imm;
- case AMDGPU::sub0:
- return SignExtend64<32>(Imm);
- case AMDGPU::sub1:
- return SignExtend64<32>(Imm >> 32);
- case AMDGPU::lo16:
- return SignExtend64<16>(Imm);
- case AMDGPU::hi16:
- return SignExtend64<16>(Imm >> 16);
- case AMDGPU::sub1_lo16:
- return SignExtend64<16>(Imm >> 32);
- case AMDGPU::sub1_hi16:
- return SignExtend64<16>(Imm >> 48);
- default:
- return std::nullopt;
- }
-
- llvm_unreachable("covered subregister switch");
+ assert(RI.getSubRegIdxSize(SubRegIndex) > 0);
+ assert(RI.getSubRegIdxOffset(SubRegIndex) >= 0);
----------------
LU-JOHN wrote:
> tautological asserts, especially the second one
Perhaps convert to:
`assert(RI.getSubRegIdxSize(SubRegIndex) + RI.getSubRegIdxOffset(SubRegIndex) <= 64);
`
https://github.com/llvm/llvm-project/pull/208765
More information about the llvm-commits
mailing list