diff options
author | Alexis Engelke <engelke@in.tum.de> | 2024-08-14 09:44:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-14 09:44:05 +0200 |
commit | dfa488baa2fad165e353ef54fde863a39f093333 (patch) | |
tree | d512719bf9912f7a29e9cc8bfd971e8d01fde4f8 /llvm/lib/IR/Module.cpp | |
parent | ce8cb7c389460ef7fa56b521742a58ead647fda6 (diff) | |
download | llvm-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.cpp | 13 |
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"); } |