[llvm] [AMDGPU] Generalize extractSubregFromImm (PR #208765)

Jay Foad via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 14 05:02:52 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);
----------------
jayfoad wrote:

> tautological asserts

I was trying to assert that we don't hit the weird cases where they are documented to return -1.

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


More information about the llvm-commits mailing list