MCPcopy Create free account
hub / github.com/AdaptiveCpp/AdaptiveCpp / addVectorizationHints

Function addVectorizationHints

src/compiler/cbs/LoopsParallelMarker.cpp:60–89  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58}
59
60void addVectorizationHints(const llvm::Function &F, const llvm::TargetTransformInfo &TTI,
61 const llvm::Loop *L) {
62 llvm::SmallVector<llvm::MDNode *, 3> PostTransformMD;
63 // work-item loops should be vectorizable, so emit metadata to suggest so
64 if (!llvm::findOptionMDForLoop(L, "llvm.loop.vectorize.enable")) {
65 auto *MDVectorize = llvm::MDNode::get(
66 F.getContext(), {llvm::MDString::get(F.getContext(), "llvm.loop.vectorize.enable"),
67 llvm::ConstantAsMetadata::get(llvm::Constant::getAllOnesValue(
68 llvm::IntegerType::get(F.getContext(), 1)))});
69 PostTransformMD.push_back(MDVectorize);
70 }
71
72 // enable scalable vectorization
73 if (TTI.supportsScalableVectors()) {
74 if (!llvm::findOptionMDForLoop(L, "llvm.loop.vectorize.scalable.enable")) {
75 auto *MDVectorize = llvm::MDNode::get(
76 F.getContext(),
77 {llvm::MDString::get(F.getContext(), "llvm.loop.vectorize.scalable.enable"),
78 llvm::ConstantAsMetadata::get(
79 llvm::Constant::getAllOnesValue(llvm::IntegerType::get(F.getContext(), 1)))});
80 PostTransformMD.push_back(MDVectorize);
81 }
82 }
83
84 if (!PostTransformMD.empty()) {
85 auto *LoopID =
86 llvm::makePostTransformationMetadata(F.getContext(), L->getLoopID(), {}, PostTransformMD);
87 L->setLoopID(LoopID);
88 }
89}
90
91bool markLoopsWorkItem(llvm::Function &F, const llvm::LoopInfo &LI,
92 const llvm::TargetTransformInfo &TTI) {

Callers 1

markLoopsWorkItemFunction · 0.85

Calls 3

getFunction · 0.85
push_backMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected