xref: /src/contrib/llvm-project/llvm/lib/Transforms/Scalar/LoopAccessAnalysisPrinter.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1581a6d85SDimitry Andric //===- LoopAccessAnalysisPrinter.cpp - Loop Access Analysis Printer --------==//
2581a6d85SDimitry Andric //
3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6581a6d85SDimitry Andric //
7581a6d85SDimitry Andric //===----------------------------------------------------------------------===//
8581a6d85SDimitry Andric 
9581a6d85SDimitry Andric #include "llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h"
10e3b55780SDimitry Andric #include "llvm/ADT/PriorityWorklist.h"
11581a6d85SDimitry Andric #include "llvm/Analysis/LoopAccessAnalysis.h"
12145449b1SDimitry Andric #include "llvm/Analysis/LoopInfo.h"
13e3b55780SDimitry Andric #include "llvm/Transforms/Utils/LoopUtils.h"
14e3b55780SDimitry Andric 
15581a6d85SDimitry Andric using namespace llvm;
16581a6d85SDimitry Andric 
17581a6d85SDimitry Andric #define DEBUG_TYPE "loop-accesses"
18581a6d85SDimitry Andric 
run(Function & F,FunctionAnalysisManager & AM)19e3b55780SDimitry Andric PreservedAnalyses LoopAccessInfoPrinterPass::run(Function &F,
20e3b55780SDimitry Andric                                                  FunctionAnalysisManager &AM) {
21e3b55780SDimitry Andric   auto &LAIs = AM.getResult<LoopAccessAnalysis>(F);
22e3b55780SDimitry Andric   auto &LI = AM.getResult<LoopAnalysis>(F);
23b1c73532SDimitry Andric   OS << "Printing analysis 'Loop Access Analysis' for function '" << F.getName()
24b1c73532SDimitry Andric      << "':\n";
25e3b55780SDimitry Andric 
26e3b55780SDimitry Andric   SmallPriorityWorklist<Loop *, 4> Worklist;
27e3b55780SDimitry Andric   appendLoopsToWorklist(LI, Worklist);
28e3b55780SDimitry Andric   while (!Worklist.empty()) {
29e3b55780SDimitry Andric     Loop *L = Worklist.pop_back_val();
30e3b55780SDimitry Andric     OS.indent(2) << L->getHeader()->getName() << ":\n";
31e3b55780SDimitry Andric     LAIs.getInfo(*L).print(OS, 4);
32e3b55780SDimitry Andric   }
33581a6d85SDimitry Andric   return PreservedAnalyses::all();
34581a6d85SDimitry Andric }
35