[llvm] AMDGPU: Handle FP in integer in argument lowering (PR #175835)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 20 11:52:41 PST 2026
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/175835
>From bbe906e08607f7529e8e594fb347ffbdf39269e6 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 13 Jan 2026 21:59:26 +0100
Subject: [PATCH 1/3] AMDGPU: Handle FP in integer in argument lowering
This avoids an assertion when softPromoteHalfType is
enabled.
---
llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index ed5988ee6efc3..94f71ab12c5d4 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -2306,9 +2306,16 @@ SDValue SITargetLowering::convertArgType(SelectionDAG &DAG, EVT VT, EVT MemVT,
Val = DAG.getNode(Opc, SL, MemVT, Val, DAG.getValueType(VT));
}
- if (MemVT.isFloatingPoint())
- Val = getFPExtOrFPRound(DAG, Val, SL, VT);
- else if (Signed)
+ if (MemVT.isFloatingPoint()) {
+ if (VT.isFloatingPoint())
+ Val = getFPExtOrFPRound(DAG, Val, SL, VT);
+ else {
+ assert(!MemVT.isVector());
+ EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits());
+ SDValue Cast = DAG.getBitcast(IntVT, Val);
+ Val = DAG.getAnyExtOrTrunc(Cast, SL, VT);
+ }
+ } else if (Signed)
Val = DAG.getSExtOrTrunc(Val, SL, VT);
else
Val = DAG.getZExtOrTrunc(Val, SL, VT);
>From a83a4127895b2d9de387d9d247ab1dc174ad96ae Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 20 Jan 2026 20:52:07 +0100
Subject: [PATCH 2/3] Apply suggestion from @cdevadas
Co-authored-by: Christudasan Devadasan <christudasan.devadasan at amd.com>
---
llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 94f71ab12c5d4..1e8e285e9dda2 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -2307,9 +2307,9 @@ SDValue SITargetLowering::convertArgType(SelectionDAG &DAG, EVT VT, EVT MemVT,
}
if (MemVT.isFloatingPoint()) {
- if (VT.isFloatingPoint())
+ if (VT.isFloatingPoint()) {
Val = getFPExtOrFPRound(DAG, Val, SL, VT);
- else {
+ } else {
assert(!MemVT.isVector());
EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits());
SDValue Cast = DAG.getBitcast(IntVT, Val);
>From 19f22a0caa599f8bc2af000c537efc22f8818083 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 20 Jan 2026 20:52:32 +0100
Subject: [PATCH 3/3] whitespace fix
---
llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 1e8e285e9dda2..5dce7832e6c6f 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -2309,7 +2309,7 @@ SDValue SITargetLowering::convertArgType(SelectionDAG &DAG, EVT VT, EVT MemVT,
if (MemVT.isFloatingPoint()) {
if (VT.isFloatingPoint()) {
Val = getFPExtOrFPRound(DAG, Val, SL, VT);
- } else {
+ } else {
assert(!MemVT.isVector());
EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits());
SDValue Cast = DAG.getBitcast(IntVT, Val);
More information about the llvm-commits
mailing list