diff options
author | Adam Nemet <anemet@apple.com> | 2015-02-18 03:44:25 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2015-02-18 03:44:25 +0000 |
commit | d7350dbb85cb66c218be5012fe71bc229e5972ce (patch) | |
tree | daca5b128fb27a9c2a0ac1f0d0a794a125341657 /llvm/lib/Transforms/Vectorize | |
parent | 8b12afbeee3e6ac2f2dea1988d814aab4489cbb9 (diff) | |
download | bcm5719-llvm-d7350dbb85cb66c218be5012fe71bc229e5972ce.tar.gz bcm5719-llvm-d7350dbb85cb66c218be5012fe71bc229e5972ce.zip |
[LoopAccesses] Split out LoopAccessReport from VectorizerReport
The only difference between these two is that VectorizerReport adds a
vectorizer-specific prefix to its messages. When LAA is used in the
vectorizer context the prefix is added when we promote the
LoopAccessReport into a VectorizerReport via one of the constructors.
This is part of the patchset that converts LoopAccessAnalysis into an
actual analysis pass.
llvm-svn: 229632
Diffstat (limited to 'llvm/lib/Transforms/Vectorize')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index a6dbeed6bc8..ed4210b5bcf 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -224,6 +224,21 @@ class LoopVectorizationLegality; class LoopVectorizationCostModel; class LoopVectorizeHints; +/// \brief This modifies LoopAccessReport to initialize message with +/// loop-vectorizer-specific part. +class VectorizationReport : public LoopAccessReport { +public: + VectorizationReport(Instruction *I = nullptr) + : LoopAccessReport("loop not vectorized: ", I) {} + + /// \brief This allows promotion of the loop-access analysis report into the + /// loop-vectorizer report. It modifies the message to add the + /// loop-vectorizer-specific part of the message. + explicit VectorizationReport(const LoopAccessReport &R) + : LoopAccessReport(Twine("loop not vectorized: ") + R.str(), + R.getInstr()) {} +}; + /// InnerLoopVectorizer vectorizes loops which contain only one basic /// block to a specified vectorization factor (VF). /// This class performs the widening of scalars into vectors, or multiple @@ -835,9 +850,11 @@ private: void collectStridedAccess(Value *LoadOrStoreInst); /// Report an analysis message to assist the user in diagnosing loops that are - /// not vectorized. - void emitAnalysis(const VectorizationReport &Message) { - VectorizationReport::emitAnalysis(Message, TheFunction, TheLoop, LV_NAME); + /// not vectorized. These are handled as LoopAccessReport rather than + /// VectorizationReport because the << operator of VectorizationReport returns + /// LoopAccessReport. + void emitAnalysis(const LoopAccessReport &Message) { + LoopAccessReport::emitAnalysis(Message, TheFunction, TheLoop, LV_NAME); } unsigned NumPredStores; @@ -972,9 +989,11 @@ private: bool isConsecutiveLoadOrStore(Instruction *I); /// Report an analysis message to assist the user in diagnosing loops that are - /// not vectorized. - void emitAnalysis(const VectorizationReport &Message) { - VectorizationReport::emitAnalysis(Message, TheFunction, TheLoop, LV_NAME); + /// not vectorized. These are handled as LoopAccessReport rather than + /// VectorizationReport because the << operator of VectorizationReport returns + /// LoopAccessReport. + void emitAnalysis(const LoopAccessReport &Message) { + LoopAccessReport::emitAnalysis(Message, TheFunction, TheLoop, LV_NAME); } /// Values used only by @llvm.assume calls. @@ -3837,7 +3856,7 @@ bool LoopVectorizationLegality::canVectorizeMemory() { LAI = &LAA->getInfo(TheLoop, Strides); auto &OptionalReport = LAI->getReport(); if (OptionalReport) - emitAnalysis(*OptionalReport); + emitAnalysis(VectorizationReport(*OptionalReport)); return LAI->canVectorizeMemory(); } |