aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Module.cpp
diff options
context:
space:
mode:
authorAlexis Engelke <engelke@in.tum.de>2024-08-14 09:44:05 +0200
committerGitHub <noreply@github.com>2024-08-14 09:44:05 +0200
commitdfa488baa2fad165e353ef54fde863a39f093333 (patch)
treed512719bf9912f7a29e9cc8bfd971e8d01fde4f8 /llvm/lib/IR/Module.cpp
parentce8cb7c389460ef7fa56b521742a58ead647fda6 (diff)
downloadllvm-dfa488baa2fad165e353ef54fde863a39f093333.zip
llvm-dfa488baa2fad165e353ef54fde863a39f093333.tar.gz
llvm-dfa488baa2fad165e353ef54fde863a39f093333.tar.bz2
[IR] Cache llvm.module.flags metadata in Module
This metadata is queried quite often, so avoiding frequent lookups in the hash map is beneficial. Therefore, cache the metadata node directly in the module. Pull Request: https://github.com/llvm/llvm-project/pull/103410
Diffstat (limited to 'llvm/lib/IR/Module.cpp')
-rw-r--r--llvm/lib/IR/Module.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index 4738ec7..7ba5b27 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -272,6 +272,8 @@ NamedMDNode *Module::getOrInsertNamedMetadata(StringRef Name) {
NMD = new NamedMDNode(Name);
NMD->setParent(this);
insertNamedMDNode(NMD);
+ if (Name == "llvm.module.flags")
+ ModuleFlags = NMD;
}
return NMD;
}
@@ -280,6 +282,8 @@ NamedMDNode *Module::getOrInsertNamedMetadata(StringRef Name) {
/// delete it.
void Module::eraseNamedMetadata(NamedMDNode *NMD) {
NamedMDSymTab.erase(NMD->getName());
+ if (NMD == ModuleFlags)
+ ModuleFlags = nullptr;
eraseNamedMDNode(NMD);
}
@@ -323,17 +327,12 @@ Metadata *Module::getModuleFlag(StringRef Key) const {
return nullptr;
}
-/// getModuleFlagsMetadata - Returns the NamedMDNode in the module that
-/// represents module-level flags. This method returns null if there are no
-/// module-level flags.
-NamedMDNode *Module::getModuleFlagsMetadata() const {
- return getNamedMetadata("llvm.module.flags");
-}
-
/// getOrInsertModuleFlagsMetadata - Returns the NamedMDNode in the module that
/// represents module-level flags. If module-level flags aren't found, it
/// creates the named metadata that contains them.
NamedMDNode *Module::getOrInsertModuleFlagsMetadata() {
+ if (ModuleFlags)
+ return ModuleFlags;
return getOrInsertNamedMetadata("llvm.module.flags");
}