[llvm] Make VectorCombine Pass Alias Info (PR #153714)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 14 17:16:07 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Kyle Wang (knwng)
<details>
<summary>Changes</summary>
Right now if a load op is scalarized, the `!alias.scope` and `!noalias` metadata are dropped. This PR is to keep them if exist.
---
Full diff: https://github.com/llvm/llvm-project/pull/153714.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/VectorCombine.cpp (+12)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index 4a681cbdab8ca..587889873a778 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -1811,6 +1811,10 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
// erased in the correct order.
Worklist.push(LI);
+ LLVMContext &ctx = LI->getContext();
+ unsigned aliasScopeKind = ctx.getMDKindID("alias.scope");
+ unsigned noAliasKind = ctx.getMDKindID("noalias");
+
// Replace extracts with narrow scalar loads.
for (User *U : LI->users()) {
auto *EI = cast<ExtractElementInst>(U);
@@ -1831,6 +1835,14 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
LI->getAlign(), VecTy->getElementType(), Idx, *DL);
NewLoad->setAlignment(ScalarOpAlignment);
+ if (MDNode *aliasScope = LI->getMetadata(aliasScopeKind)) {
+ NewLoad->setMetadata(aliasScopeKind, aliasScope);
+ }
+
+ if (MDNode *noAlias = LI->getMetadata(noAliasKind)) {
+ NewLoad->setMetadata(noAliasKind, noAlias);
+ }
+
replaceValue(*EI, *NewLoad);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/153714
More information about the llvm-commits
mailing list