diff options
author | Florian Hahn <flo@fhahn.com> | 2025-04-15 14:45:51 +0200 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2025-04-15 14:46:28 +0200 |
commit | ddfd81bb76c05b095c8eca7a45f71547c3df2a89 (patch) | |
tree | bdd890579cb4728b48decb9a62bcc23d9a004936 /llvm/lib | |
parent | 595cc960b6da7f55d64d2025abb67a9aabb01a85 (diff) | |
download | llvm-ddfd81bb76c05b095c8eca7a45f71547c3df2a89.zip llvm-ddfd81bb76c05b095c8eca7a45f71547c3df2a89.tar.gz llvm-ddfd81bb76c05b095c8eca7a45f71547c3df2a89.tar.bz2 |
[LoopVer] Add function to get the alias_scope/noalias metadata (NFC).
Split out logic to get noalias/alias_scope metadata to separate function
in LoopVersioning. This will be used to migrate away from
annotateInstWithNoAlias in LV.
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopVersioning.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopVersioning.cpp b/llvm/lib/Transforms/Utils/LoopVersioning.cpp index 5ee551e..1711163 100644 --- a/llvm/lib/Transforms/Utils/LoopVersioning.cpp +++ b/llvm/lib/Transforms/Utils/LoopVersioning.cpp @@ -225,34 +225,43 @@ void LoopVersioning::annotateLoopWithNoAlias() { } } -void LoopVersioning::annotateInstWithNoAlias(Instruction *VersionedInst, - const Instruction *OrigInst) { +std::pair<MDNode *, MDNode *> +LoopVersioning::getNoAliasMetadataFor(const Instruction *OrigInst) const { if (!AnnotateNoAlias) - return; + return {nullptr, nullptr}; LLVMContext &Context = VersionedLoop->getHeader()->getContext(); const Value *Ptr = isa<LoadInst>(OrigInst) ? cast<LoadInst>(OrigInst)->getPointerOperand() : cast<StoreInst>(OrigInst)->getPointerOperand(); + MDNode *AliasScope = nullptr; + MDNode *NoAlias = nullptr; // Find the group for the pointer and then add the scope metadata. auto Group = PtrToGroup.find(Ptr); if (Group != PtrToGroup.end()) { - VersionedInst->setMetadata( - LLVMContext::MD_alias_scope, - MDNode::concatenate( - VersionedInst->getMetadata(LLVMContext::MD_alias_scope), - MDNode::get(Context, GroupToScope[Group->second]))); + AliasScope = MDNode::concatenate( + OrigInst->getMetadata(LLVMContext::MD_alias_scope), + MDNode::get(Context, GroupToScope.lookup(Group->second))); // Add the no-alias metadata. auto NonAliasingScopeList = GroupToNonAliasingScopeList.find(Group->second); if (NonAliasingScopeList != GroupToNonAliasingScopeList.end()) - VersionedInst->setMetadata( - LLVMContext::MD_noalias, - MDNode::concatenate( - VersionedInst->getMetadata(LLVMContext::MD_noalias), - NonAliasingScopeList->second)); + NoAlias = + MDNode::concatenate(OrigInst->getMetadata(LLVMContext::MD_noalias), + NonAliasingScopeList->second); } + return {AliasScope, NoAlias}; +} + +void LoopVersioning::annotateInstWithNoAlias(Instruction *VersionedInst, + const Instruction *OrigInst) { + const auto &[AliasScopeMD, NoAliasMD] = getNoAliasMetadataFor(OrigInst); + if (AliasScopeMD) + VersionedInst->setMetadata(LLVMContext::MD_alias_scope, AliasScopeMD); + + if (NoAliasMD) + VersionedInst->setMetadata(LLVMContext::MD_noalias, NoAliasMD); } namespace { |