
Currently if there's any memory access that AccessAnalysis couldn't analyze then all of the runtime pointer check results are discarded. This patch makes this able to be controlled with the AllowPartial option, which makes it so we generate the runtime check information for those pointers that we could analyze, as transformations may still be able to make use of the partial information. Of the transformations that use LoopAccessAnalysis, only LoopVersioningLICM changes behaviour as a result of this change. This is because the others either: * Check canVectorizeMemory, which will return false when we have partial pointer information as analyzeLoop() will return false. * Examine the dependencies returned by getDepChecker(), which will be empty as we exit analyzeLoop if we have partial pointer information before calling areDepsSafe(), which is what fills in the dependency information.
35 lines
1.3 KiB
C++
35 lines
1.3 KiB
C++
//===- LoopAccessAnalysisPrinter.cpp - Loop Access Analysis Printer --------==//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h"
|
|
#include "llvm/ADT/PriorityWorklist.h"
|
|
#include "llvm/Analysis/LoopAccessAnalysis.h"
|
|
#include "llvm/Analysis/LoopInfo.h"
|
|
#include "llvm/Transforms/Utils/LoopUtils.h"
|
|
|
|
using namespace llvm;
|
|
|
|
#define DEBUG_TYPE "loop-accesses"
|
|
|
|
PreservedAnalyses LoopAccessInfoPrinterPass::run(Function &F,
|
|
FunctionAnalysisManager &AM) {
|
|
auto &LAIs = AM.getResult<LoopAccessAnalysis>(F);
|
|
auto &LI = AM.getResult<LoopAnalysis>(F);
|
|
OS << "Printing analysis 'Loop Access Analysis' for function '" << F.getName()
|
|
<< "':\n";
|
|
|
|
SmallPriorityWorklist<Loop *, 4> Worklist;
|
|
appendLoopsToWorklist(LI, Worklist);
|
|
while (!Worklist.empty()) {
|
|
Loop *L = Worklist.pop_back_val();
|
|
OS.indent(2) << L->getHeader()->getName() << ":\n";
|
|
LAIs.getInfo(*L, AllowPartial).print(OS, 4);
|
|
}
|
|
return PreservedAnalyses::all();
|
|
}
|