[clang] d932489 - [CodeGen] Don't use CreateRuntimeFunction() for intrinsics (#224329)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 18 01:46:53 PDT 2026
Author: Nikita Popov
Date: 2026-09-18T10:46:46+02:00
New Revision: d9324899756c7c85f0badd387b2138d75a050bb8
URL: https://github.com/llvm/llvm-project/commit/d9324899756c7c85f0badd387b2138d75a050bb8
DIFF: https://github.com/llvm/llvm-project/commit/d9324899756c7c85f0badd387b2138d75a050bb8.diff
LOG: [CodeGen] Don't use CreateRuntimeFunction() for intrinsics (#224329)
These should just use getIntrinsic().
Added:
Modified:
clang/lib/CodeGen/CGCleanup.cpp
clang/lib/CodeGen/CGException.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGCleanup.cpp b/clang/lib/CodeGen/CGCleanup.cpp
index 977f81a641ff3..41a812ff59691 100644
--- a/clang/lib/CodeGen/CGCleanup.cpp
+++ b/clang/lib/CodeGen/CGCleanup.cpp
@@ -1348,10 +1348,8 @@ static void EmitSehScope(CodeGenFunction &CGF,
// Invoke a llvm.seh.scope.begin at the beginning of a CPP scope for -EHa
void CodeGenFunction::EmitSehCppScopeBegin() {
assert(getLangOpts().EHAsynch);
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
llvm::FunctionCallee SehCppScope =
- CGM.CreateRuntimeFunction(FTy, "llvm.seh.scope.begin");
+ CGM.getIntrinsic(llvm::Intrinsic::seh_scope_begin);
EmitSehScope(*this, SehCppScope);
}
@@ -1359,29 +1357,23 @@ void CodeGenFunction::EmitSehCppScopeBegin() {
// llvm.seh.scope.end is emitted before popCleanup, so it's "invoked"
void CodeGenFunction::EmitSehCppScopeEnd() {
assert(getLangOpts().EHAsynch);
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
llvm::FunctionCallee SehCppScope =
- CGM.CreateRuntimeFunction(FTy, "llvm.seh.scope.end");
+ CGM.getIntrinsic(llvm::Intrinsic::seh_scope_end);
EmitSehScope(*this, SehCppScope);
}
// Invoke a llvm.seh.try.begin at the beginning of a SEH scope for -EHa
void CodeGenFunction::EmitSehTryScopeBegin() {
assert(getLangOpts().EHAsynch);
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
llvm::FunctionCallee SehCppScope =
- CGM.CreateRuntimeFunction(FTy, "llvm.seh.try.begin");
+ CGM.getIntrinsic(llvm::Intrinsic::seh_try_begin);
EmitSehScope(*this, SehCppScope);
}
// Invoke a llvm.seh.try.end at the end of a SEH scope for -EHa
void CodeGenFunction::EmitSehTryScopeEnd() {
assert(getLangOpts().EHAsynch);
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
llvm::FunctionCallee SehCppScope =
- CGM.CreateRuntimeFunction(FTy, "llvm.seh.try.end");
+ CGM.getIntrinsic(llvm::Intrinsic::seh_try_end);
EmitSehScope(*this, SehCppScope);
}
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp
index 2785c224cf403..f06edde9739b4 100644
--- a/clang/lib/CodeGen/CGException.cpp
+++ b/clang/lib/CodeGen/CGException.cpp
@@ -39,18 +39,6 @@ static llvm::FunctionCallee getFreeExceptionFn(CodeGenModule &CGM) {
return CGM.CreateRuntimeFunction(FTy, "__cxa_free_exception");
}
-static llvm::FunctionCallee getSehTryBeginFn(CodeGenModule &CGM) {
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
- return CGM.CreateRuntimeFunction(FTy, "llvm.seh.try.begin");
-}
-
-static llvm::FunctionCallee getSehTryEndFn(CodeGenModule &CGM) {
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
- return CGM.CreateRuntimeFunction(FTy, "llvm.seh.try.end");
-}
-
static llvm::FunctionCallee getUnexpectedFn(CodeGenModule &CGM) {
// void __cxa_call_unexpected(void *thrown_exception);
@@ -1683,7 +1671,7 @@ void CodeGenFunction::EmitSEHTryStmt(const SEHTryStmt &S) {
llvm::BasicBlock *TryBB = nullptr;
// IsEHa: emit an invoke to _seh_try_begin() runtime for -EHa
if (getLangOpts().EHAsynch) {
- EmitRuntimeCallOrInvoke(getSehTryBeginFn(CGM));
+ EmitCallOrInvoke(CGM.getIntrinsic(llvm::Intrinsic::seh_try_begin), {});
if (SEHTryEpilogueStack.size() == 1) // outermost only
TryBB = Builder.GetInsertBlock();
}
@@ -2250,8 +2238,7 @@ void CodeGenFunction::ExitSEHTryStmt(const SEHTryStmt &S) {
// IsEHa: emit an invoke _seh_try_end() to mark end of FT flow
if (getLangOpts().EHAsynch && Builder.GetInsertBlock()) {
- llvm::FunctionCallee SehTryEnd = getSehTryEndFn(CGM);
- EmitRuntimeCallOrInvoke(SehTryEnd);
+ EmitCallOrInvoke(CGM.getIntrinsic(llvm::Intrinsic::seh_try_end), {});
}
// Otherwise, we must have an __except block.
More information about the cfe-commits
mailing list