[llvm] Make VectorCombine Pass Alias Info (PR #153714)
Kyle Wang via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 14 17:15:37 PDT 2025
https://github.com/knwng created https://github.com/llvm/llvm-project/pull/153714
Right now if a load op is scalarized, the `!alias.scope` and `!noalias` metadata are dropped. This PR is to keep them if exist.
>From 25cbc66fb6931c346b7118599fb98a6158548908 Mon Sep 17 00:00:00 2001
From: Kyle Wang <ec1wng at gmail.com>
Date: Fri, 15 Aug 2025 00:13:52 +0000
Subject: [PATCH] Make VectorCombine Pass Alias Info
---
llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 12 ++++++++++++
1 file changed, 12 insertions(+)
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);
}
More information about the llvm-commits
mailing list