mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-16 12:24:03 +00:00
[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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229632 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user