[polly] [Polly] Add vectorize metadata to loops identified as vectorizable by polly (PR #113994)
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 5 04:41:58 PST 2024
================
@@ -233,6 +238,30 @@ static bool generateCode(Scop &S, IslAstInfo &AI, LoopInfo &LI,
NodeBuilder.allocateNewArrays(StartExitBlocks);
Annotator.buildAliasScopes(S);
+ // The code below annotates the "llvm.loop.vectorize.enable" to false
+ // for the code flow taken when RTCs fail. Because we don't want the
+ // Loop Vectorizer to come in later and vectorize the original fall back
+ // loop when 'polly-annotate-metadata-vectorize' is passed.
+ if (PollyVectorizeMetadata) {
+ LLVMContext &Ctx = S.getFunction().getContext();
+ for (Loop *L : LI.getLoopsInPreorder()) {
+ if (!L || !S.contains(L))
+ continue;
+ MDNode *LoopID = L->getLoopID();
+ SmallVector<Metadata *, 3> Args;
+ if (LoopID)
+ for (unsigned i = 0, e = LoopID->getNumOperands(); i != e; ++i)
+ Args.push_back(LoopID->getOperand(i));
+ else
+ Args.push_back(nullptr);
+
+ Annotator.addVectorizeMetadata(Ctx, &Args, false);
+ MDNode *NewLoopID = MDNode::get(Ctx, Args);
+ NewLoopID->replaceOperandWith(0, NewLoopID);
+ L->setLoopID(NewLoopID);
+ }
----------------
Meinersbur wrote:
```suggestion
#include "llvm/Transforms/Utils/LoopUtils.h"
LLVMContext &Ctx = S.getFunction().getContext();
for (Loop *L : LI.getLoopsInPreorder()) {
if (!S.contains(L))
continue;
addStringMetadataToLoop(L, "llvm.loop.vectorize.enable", 0)
}
```
https://github.com/llvm/llvm-project/pull/113994
More information about the llvm-commits
mailing list