[llvm-branch-commits] [llvm] AMDGPU/GlobalISel: Fix type mismatch in regbank combiner for applyD16Load (PR #210103)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jul 16 09:35:18 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Petar Avramovic (petar-avramovic)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/210103.diff
2 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/AMDGPURegBankCombiner.cpp (+14-1)
- (modified) llvm/test/CodeGen/AMDGPU/global-saddr-load.ll (+2-2)
``````````diff
diff --git a/llvm/lib/Target/AMDGPU/AMDGPURegBankCombiner.cpp b/llvm/lib/Target/AMDGPU/AMDGPURegBankCombiner.cpp
index f9d8a09e29b0d..baf83e7f7762a 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURegBankCombiner.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURegBankCombiner.cpp
@@ -566,9 +566,22 @@ bool AMDGPURegBankCombinerImpl::matchMinMaxToMinMax3(
bool AMDGPURegBankCombinerImpl::applyD16Load(
unsigned D16Opc, MachineInstr &DstMI, MachineInstr *SmallLoad,
Register SrcReg32ToOverwriteD16) const {
- B.buildInstr(D16Opc, {DstMI.getOperand(0).getReg()},
+ Register DstReg = DstMI.getOperand(0).getReg();
+ LLT SrcTy = MRI.getType(SrcReg32ToOverwriteD16);
+
+ // Dst and Src for D16 load need to have same type.
+ Register D16Dst =
+ SrcTy == MRI.getType(DstReg)
+ ? DstReg
+ : MRI.createVirtualRegister({MRI.getRegBank(DstReg), SrcTy});
+
+ B.buildInstr(D16Opc, {D16Dst},
{SmallLoad->getOperand(1).getReg(), SrcReg32ToOverwriteD16})
.setMemRefs(SmallLoad->memoperands());
+
+ if (D16Dst != DstReg)
+ B.buildBitcast(DstReg, D16Dst);
+
DstMI.eraseFromParent();
return true;
}
diff --git a/llvm/test/CodeGen/AMDGPU/global-saddr-load.ll b/llvm/test/CodeGen/AMDGPU/global-saddr-load.ll
index 3d4b8796b1902..a1130abf89a7a 100644
--- a/llvm/test/CodeGen/AMDGPU/global-saddr-load.ll
+++ b/llvm/test/CodeGen/AMDGPU/global-saddr-load.ll
@@ -5,8 +5,8 @@
; RUN: llc -mtriple=amdgpu11.00-mesa-mesa3d -mattr=-real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
; RUN: llc -mtriple=amdgpu12.00-mesa-mesa3d -mattr=+real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG,GFX12-SDAG-TRUE16 %s
; RUN: llc -mtriple=amdgpu12.00-mesa-mesa3d -mattr=-real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG,GFX12-SDAG-FAKE16 %s
-; RUN: llc -global-isel -global-isel-abort=2 -mtriple=amdgpu12.00-mesa-mesa3d -mattr=+real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL,GFX12-GISEL-TRUE16 %s
-; RUN: llc -global-isel -global-isel-abort=2 -mtriple=amdgpu12.00-mesa-mesa3d -mattr=-real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL,GFX12-GISEL-FAKE16 %s
+; RUN: llc -global-isel -mtriple=amdgpu12.00-mesa-mesa3d -mattr=+real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL,GFX12-GISEL-TRUE16 %s
+; RUN: llc -global-isel -mtriple=amdgpu12.00-mesa-mesa3d -mattr=-real-true16 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL,GFX12-GISEL-FAKE16 %s
; Test using saddr addressing mode of global_*load_* flat instructions.
``````````
</details>
https://github.com/llvm/llvm-project/pull/210103
More information about the llvm-branch-commits
mailing list