[llvm] [ORC] Use SmallVector/SmallString for small hot paths (PR #148379)
Bogdan Vetrenko via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 12 08:57:55 PDT 2025
https://github.com/bv2k4 created https://github.com/llvm/llvm-project/pull/148379
None
>From 2d6cd357626ac7c4001f7100bcfd6617b2834137 Mon Sep 17 00:00:00 2001
From: Bogdan Vetrenko <b.vetrenko at yandex.ru>
Date: Sat, 12 Jul 2025 18:35:45 +0300
Subject: [PATCH] [ORC] Use SmallVector/SmallString for small hot paths
---
llvm/lib/ExecutionEngine/Orc/LLJIT.cpp | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
index 67bb7dd8ad08f..945243c0a56a0 100644
--- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
@@ -28,6 +28,8 @@
#include "llvm/IR/Mangler.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/DynamicLibrary.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/SmallString.h"
#define DEBUG_TYPE "orc"
@@ -55,7 +57,7 @@ Function *addHelperAndWrapper(Module &M, StringRef WrapperName,
GlobalValue::VisibilityTypes WrapperVisibility,
StringRef HelperName,
ArrayRef<Value *> HelperPrefixArgs) {
- std::vector<Type *> HelperArgTypes;
+ SmallVector<Type *, 4> HelperArgTypes;
for (auto *Arg : HelperPrefixArgs)
HelperArgTypes.push_back(Arg->getType());
llvm::append_range(HelperArgTypes, WrapperFnType->params());
@@ -71,7 +73,7 @@ Function *addHelperAndWrapper(Module &M, StringRef WrapperName,
auto *EntryBlock = BasicBlock::Create(M.getContext(), "entry", WrapperFn);
IRBuilder<> IB(EntryBlock);
- std::vector<Value *> HelperArgs;
+ SmallVector<Value *, 4> HelperArgs;
llvm::append_range(HelperArgs, HelperPrefixArgs);
for (auto &Arg : WrapperFn->args())
HelperArgs.push_back(&Arg);
@@ -320,7 +322,7 @@ class GenericLLVMIRPlatformSupport : public LLJIT::PlatformSupport {
if (!LookupResult)
return LookupResult.takeError();
- std::vector<ExecutorAddr> Initializers;
+ SmallVector<ExecutorAddr, 8> Initializers;
while (!DFSLinkOrder.empty()) {
auto &NextJD = *DFSLinkOrder.back();
DFSLinkOrder.pop_back();
@@ -377,7 +379,7 @@ class GenericLLVMIRPlatformSupport : public LLJIT::PlatformSupport {
if (!LookupResult)
return LookupResult.takeError();
- std::vector<ExecutorAddr> DeInitializers;
+ SmallVector<ExecutorAddr, 8> DeInitializers;
for (auto &NextJD : DFSLinkOrder) {
auto DeInitsItr = LookupResult->find(NextJD.get());
assert(DeInitsItr != LookupResult->end() &&
@@ -518,13 +520,10 @@ GlobalCtorDtorScraper::operator()(ThreadSafeModule TSM,
// If there's no llvm.global_c/dtor or it's just a decl then skip.
if (!GlobalCOrDtors || GlobalCOrDtors->isDeclaration())
return Error::success();
- std::string InitOrDeInitFunctionName;
- if (isCtor)
- raw_string_ostream(InitOrDeInitFunctionName)
- << InitFunctionPrefix << M.getModuleIdentifier();
- else
- raw_string_ostream(InitOrDeInitFunctionName)
- << DeInitFunctionPrefix << M.getModuleIdentifier();
+ SmallString<64> InitOrDeInitFunctionName;
+ raw_svector_ostream(InitOrDeInitFunctionName)
+ << (isCtor ? InitFunctionPrefix : DeInitFunctionPrefix)
+ << M.getModuleIdentifier();
MangleAndInterner Mangle(PS.getExecutionSession(), M.getDataLayout());
auto InternedInitOrDeInitName = Mangle(InitOrDeInitFunctionName);
@@ -536,7 +535,7 @@ GlobalCtorDtorScraper::operator()(ThreadSafeModule TSM,
FunctionType::get(Type::getVoidTy(Ctx), {}, false),
GlobalValue::ExternalLinkage, InitOrDeInitFunctionName, &M);
InitOrDeInitFunc->setVisibility(GlobalValue::HiddenVisibility);
- std::vector<std::pair<Function *, unsigned>> InitsOrDeInits;
+ SmallVector<std::pair<Function *, unsigned>, 8> InitsOrDeInits;
auto COrDtors = isCtor ? getConstructors(M) : getDestructors(M);
for (auto E : COrDtors)
More information about the llvm-commits
mailing list