[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