xref: /freebsd-src/contrib/llvm-project/llvm/lib/Transforms/Scalar/LoopAccessAnalysisPrinter.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
10b57cec5SDimitry Andric //===- LoopAccessAnalysisPrinter.cpp - Loop Access Analysis Printer --------==//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h"
10bdd1243dSDimitry Andric #include "llvm/ADT/PriorityWorklist.h"
110b57cec5SDimitry Andric #include "llvm/Analysis/LoopAccessAnalysis.h"
1281ad6265SDimitry Andric #include "llvm/Analysis/LoopInfo.h"
13bdd1243dSDimitry Andric #include "llvm/Transforms/Utils/LoopUtils.h"
14bdd1243dSDimitry Andric 
150b57cec5SDimitry Andric using namespace llvm;
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric #define DEBUG_TYPE "loop-accesses"
180b57cec5SDimitry Andric 
run(Function & F,FunctionAnalysisManager & AM)19bdd1243dSDimitry Andric PreservedAnalyses LoopAccessInfoPrinterPass::run(Function &F,
20bdd1243dSDimitry Andric                                                  FunctionAnalysisManager &AM) {
21bdd1243dSDimitry Andric   auto &LAIs = AM.getResult<LoopAccessAnalysis>(F);
22bdd1243dSDimitry Andric   auto &LI = AM.getResult<LoopAnalysis>(F);
23*5f757f3fSDimitry Andric   OS << "Printing analysis 'Loop Access Analysis' for function '" << F.getName()
24*5f757f3fSDimitry Andric      << "':\n";
25bdd1243dSDimitry Andric 
26bdd1243dSDimitry Andric   SmallPriorityWorklist<Loop *, 4> Worklist;
27bdd1243dSDimitry Andric   appendLoopsToWorklist(LI, Worklist);
28bdd1243dSDimitry Andric   while (!Worklist.empty()) {
29bdd1243dSDimitry Andric     Loop *L = Worklist.pop_back_val();
30bdd1243dSDimitry Andric     OS.indent(2) << L->getHeader()->getName() << ":\n";
31bdd1243dSDimitry Andric     LAIs.getInfo(*L).print(OS, 4);
32bdd1243dSDimitry Andric   }
330b57cec5SDimitry Andric   return PreservedAnalyses::all();
340b57cec5SDimitry Andric }
35