https://github.com/arsenm created 
https://github.com/llvm/llvm-project/pull/170940

None

>From fd5029269d51e4d3f6627e25b7d6863c75a83f8b Mon Sep 17 00:00:00 2001
From: Matt Arsenault <[email protected]>
Date: Thu, 4 Dec 2025 13:45:33 +0100
Subject: [PATCH] DAG: Check if deoptimize call is available before emitting it

---
 llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp | 12 ++++++++++--
 llvm/test/CodeGen/AMDGPU/llvm.deoptimize.ll          |  8 ++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp 
b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
index 5b8cd343557fa..d34f3211dc463 100644
--- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
@@ -1307,9 +1307,17 @@ void SelectionDAGBuilder::visitGCRelocate(const 
GCRelocateInst &Relocate) {
 
 void SelectionDAGBuilder::LowerDeoptimizeCall(const CallInst *CI) {
   const auto &TLI = DAG.getTargetLoweringInfo();
-  SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(RTLIB::DEOPTIMIZE),
-                                         
TLI.getPointerTy(DAG.getDataLayout()));
 
+  RTLIB::LibcallImpl DeoptImpl = TLI.getLibcallImpl(RTLIB::DEOPTIMIZE);
+  if (DeoptImpl == RTLIB::Unsupported) {
+    DAG.getContext()->emitError("no deoptimize libcall available");
+    return;
+  }
+
+  SDValue Callee =
+      DAG.getExternalSymbol(DeoptImpl, TLI.getPointerTy(DAG.getDataLayout()));
+
+  // FIXME: Should pass in the calling convention for the LibcallImpl.
   // We don't lower calls to __llvm_deoptimize as varargs, but as a regular
   // call.  We also do not lower the return value to any virtual register, and
   // change the immediately following return to a trap instruction.
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.deoptimize.ll 
b/llvm/test/CodeGen/AMDGPU/llvm.deoptimize.ll
index ef8c00bb3b4b0..53446b644445a 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.deoptimize.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.deoptimize.ll
@@ -1,10 +1,6 @@
-; RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s 2> %t.err | 
FileCheck %s
-; RUN: FileCheck -check-prefix=ERR %s < %t.err
+; RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s 2>&1 | FileCheck %s
 
-; ERR: error: <unknown>:0:0: in function caller_0 i32 (): unsupported external 
symbol
-; ERR: error: unhandled statepoint-like instruction
-
-; CHECK: ;unsupported statepoint/stackmap/patchpoint
+; CHECK: error: no deoptimize libcall available
 declare i32 @llvm.experimental.deoptimize.i32(...)
 declare i8  @llvm.experimental.deoptimize.i8(...)
 

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to