Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
LoopPass.cpp
Go to the documentation of this file.
1//===- LoopPass.cpp - Loop Pass and Loop Pass Manager ---------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements LoopPass and LPPassManager. All loop optimization
10// and transformation passes are derived from LoopPass. LPPassManager is
11// responsible for managing LoopPasses.
12//
13//===----------------------------------------------------------------------===//
14
15#include "llvm/Analysis/LoopPass.h"
16#include "llvm/Analysis/LoopInfo.h"
17#include "llvm/IR/Dominators.h"
18#include "llvm/IR/LLVMContext.h"
19#include "llvm/IR/Module.h"
20#include "llvm/IR/OptBisect.h"
21#include "llvm/IR/PassTimingInfo.h"
22#include "llvm/IR/PrintPasses.h"
23#include "llvm/InitializePasses.h"
24#include "llvm/Support/Debug.h"
25#include "llvm/Support/TimeProfiler.h"
26#include "llvm/Support/Timer.h"
27#include "llvm/Support/raw_ostream.h"
28using namespacellvm;
29
30#define DEBUG_TYPE "loop-pass-manager"
31
32namespace{
33
34/// PrintLoopPass - Print a Function corresponding to a Loop.
35///
36classPrintLoopPassWrapper :publicLoopPass {
37raw_ostream &OS;
38 std::string Banner;
39
40public:
41staticcharID;
42 PrintLoopPassWrapper() :LoopPass(ID),OS(dbgs()) {}
43 PrintLoopPassWrapper(raw_ostream &OS,const std::string &Banner)
44 :LoopPass(ID),OS(OS), Banner(Banner) {}
45
46voidgetAnalysisUsage(AnalysisUsage &AU) const override{
47 AU.setPreservesAll();
48 }
49
50boolrunOnLoop(Loop *L,LPPassManager &) override{
51auto BBI =llvm::find_if(L->blocks(), [](BasicBlock *BB) { return BB; });
52if (BBI != L->blocks().end() &&
53isFunctionInPrintList((*BBI)->getParent()->getName())) {
54printLoop(*L,OS, Banner);
55 }
56returnfalse;
57 }
58
59StringRefgetPassName() const override{return"Print Loop IR"; }
60};
61
62char PrintLoopPassWrapper::ID = 0;
63}// namespace
64
65//===----------------------------------------------------------------------===//
66// LPPassManager
67//
68
69charLPPassManager::ID = 0;
70
71LPPassManager::LPPassManager() :FunctionPass(ID) {
72 LI =nullptr;
73 CurrentLoop =nullptr;
74}
75
76// Insert loop into loop nest (LoopInfo) and loop queue (LQ).
77voidLPPassManager::addLoop(Loop &L) {
78if (L.isOutermost()) {
79// This is the top level loop.
80 LQ.push_front(&L);
81return;
82 }
83
84// Insert L into the loop queue after the parent loop.
85for (autoI = LQ.begin(), E = LQ.end();I != E; ++I) {
86if (*I == L.getParentLoop()) {
87// deque does not support insert after.
88 ++I;
89 LQ.insert(I, 1, &L);
90return;
91 }
92 }
93}
94
95// Recurse through all subloops and all loops into LQ.
96staticvoidaddLoopIntoQueue(Loop *L, std::deque<Loop *> &LQ) {
97 LQ.push_back(L);
98for (Loop *I :reverse(*L))
99addLoopIntoQueue(I, LQ);
100}
101
102/// Pass Manager itself does not invalidate any analysis info.
103voidLPPassManager::getAnalysisUsage(AnalysisUsage &Info) const{
104// LPPassManager needs LoopInfo. In the long term LoopInfo class will
105// become part of LPPassManager.
106Info.addRequired<LoopInfoWrapperPass>();
107Info.addRequired<DominatorTreeWrapperPass>();
108Info.setPreservesAll();
109}
110
111voidLPPassManager::markLoopAsDeleted(Loop &L) {
112assert((&L == CurrentLoop || CurrentLoop->contains(&L)) &&
113"Must not delete loop outside the current loop tree!");
114// If this loop appears elsewhere within the queue, we also need to remove it
115// there. However, we have to be careful to not remove the back of the queue
116// as that is assumed to match the current loop.
117assert(LQ.back() == CurrentLoop &&"Loop queue back isn't the current loop!");
118llvm::erase(LQ, &L);
119
120if (&L == CurrentLoop) {
121 CurrentLoopDeleted =true;
122// Add this loop back onto the back of the queue to preserve our invariants.
123 LQ.push_back(&L);
124 }
125}
126
127/// run - Execute all of the passes scheduled for execution. Keep track of
128/// whether any of the passes modifies the function, and if so, return true.
129boolLPPassManager::runOnFunction(Function &F) {
130auto &LIWP = getAnalysis<LoopInfoWrapperPass>();
131 LI = &LIWP.getLoopInfo();
132Module &M = *F.getParent();
133#if 0
134DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
135#endif
136bool Changed =false;
137
138// Collect inherited analysis from Module level pass manager.
139populateInheritedAnalysis(TPM->activeStack);
140
141// Populate the loop queue in reverse program order. There is no clear need to
142// process sibling loops in either forward or reverse order. There may be some
143// advantage in deleting uses in a later loop before optimizing the
144// definitions in an earlier loop. If we find a clear reason to process in
145// forward order, then a forward variant of LoopPassManager should be created.
146//
147// Note that LoopInfo::iterator visits loops in reverse program
148// order. Here, reverse_iterator gives us a forward order, and the LoopQueue
149// reverses the order a third time by popping from the back.
150for (Loop *L :reverse(*LI))
151addLoopIntoQueue(L, LQ);
152
153if (LQ.empty())// No loops, skip calling finalizers
154returnfalse;
155
156// Initialization
157for (Loop *L : LQ) {
158for (unsigned Index = 0; Index <getNumContainedPasses(); ++Index) {
159LoopPass *P =getContainedPass(Index);
160 Changed |=P->doInitialization(L, *this);
161 }
162 }
163
164// Walk Loops
165unsignedInstrCount, FunctionSize = 0;
166StringMap<std::pair<unsigned, unsigned>> FunctionToInstrCount;
167bool EmitICRemark = M.shouldEmitInstrCountChangedRemark();
168// Collect the initial size of the module and the function we're looking at.
169if (EmitICRemark) {
170InstrCount =initSizeRemarkInfo(M, FunctionToInstrCount);
171 FunctionSize =F.getInstructionCount();
172 }
173while (!LQ.empty()) {
174 CurrentLoopDeleted =false;
175 CurrentLoop = LQ.back();
176
177// Run all passes on the current Loop.
178for (unsigned Index = 0; Index <getNumContainedPasses(); ++Index) {
179LoopPass *P =getContainedPass(Index);
180
181llvm::TimeTraceScope LoopPassScope("RunLoopPass",P->getPassName());
182
183dumpPassInfo(P,EXECUTION_MSG,ON_LOOP_MSG,
184 CurrentLoop->getHeader()->getName());
185dumpRequiredSet(P);
186
187initializeAnalysisImpl(P);
188
189bool LocalChanged =false;
190 {
191PassManagerPrettyStackEntryX(P, *CurrentLoop->getHeader());
192TimeRegion PassTimer(getPassTimer(P));
193#ifdef EXPENSIVE_CHECKS
194uint64_t RefHash =P->structuralHash(F);
195#endif
196 LocalChanged =P->runOnLoop(CurrentLoop, *this);
197
198#ifdef EXPENSIVE_CHECKS
199if (!LocalChanged && (RefHash !=P->structuralHash(F))) {
200llvm::errs() <<"Pass modifies its input and doesn't report it: "
201 <<P->getPassName() <<"\n";
202llvm_unreachable("Pass modifies its input and doesn't report it");
203 }
204#endif
205
206 Changed |= LocalChanged;
207if (EmitICRemark) {
208unsigned NewSize =F.getInstructionCount();
209// Update the size of the function, emit a remark, and update the
210// size of the module.
211if (NewSize != FunctionSize) {
212 int64_t Delta =static_cast<int64_t>(NewSize) -
213static_cast<int64_t>(FunctionSize);
214emitInstrCountChangedRemark(P, M, Delta,InstrCount,
215 FunctionToInstrCount, &F);
216InstrCount =static_cast<int64_t>(InstrCount) + Delta;
217 FunctionSize = NewSize;
218 }
219 }
220 }
221
222if (LocalChanged)
223dumpPassInfo(P,MODIFICATION_MSG,ON_LOOP_MSG,
224 CurrentLoopDeleted ?"<deleted loop>"
225 : CurrentLoop->getName());
226dumpPreservedSet(P);
227
228if (!CurrentLoopDeleted) {
229// Manually check that this loop is still healthy. This is done
230// instead of relying on LoopInfo::verifyLoop since LoopInfo
231// is a function pass and it's really expensive to verify every
232// loop in the function every time. That level of checking can be
233// enabled with the -verify-loop-info option.
234 {
235TimeRegion PassTimer(getPassTimer(&LIWP));
236 CurrentLoop->verifyLoop();
237 }
238// Here we apply same reasoning as in the above case. Only difference
239// is that LPPassManager might run passes which do not require LCSSA
240// form (LoopPassPrinter for example). We should skip verification for
241// such passes.
242// FIXME: Loop-sink currently break LCSSA. Fix it and reenable the
243// verification!
244#if 0
245if (mustPreserveAnalysisID(LCSSAVerificationPass::ID))
246assert(CurrentLoop->isRecursivelyLCSSAForm(*DT, *LI));
247#endif
248
249// Then call the regular verifyAnalysis functions.
250verifyPreservedAnalysis(P);
251
252F.getContext().yield();
253 }
254
255if (LocalChanged)
256removeNotPreservedAnalysis(P);
257recordAvailableAnalysis(P);
258removeDeadPasses(P,
259 CurrentLoopDeleted ?"<deleted>"
260 : CurrentLoop->getHeader()->getName(),
261ON_LOOP_MSG);
262
263if (CurrentLoopDeleted)
264// Do not run other passes on this loop.
265break;
266 }
267
268// If the loop was deleted, release all the loop passes. This frees up
269// some memory, and avoids trouble with the pass manager trying to call
270// verifyAnalysis on them.
271if (CurrentLoopDeleted) {
272for (unsigned Index = 0; Index <getNumContainedPasses(); ++Index) {
273Pass *P =getContainedPass(Index);
274freePass(P,"<deleted>",ON_LOOP_MSG);
275 }
276 }
277
278// Pop the loop from queue after running all passes.
279 LQ.pop_back();
280 }
281
282// Finalization
283for (unsigned Index = 0; Index <getNumContainedPasses(); ++Index) {
284LoopPass *P =getContainedPass(Index);
285 Changed |=P->doFinalization();
286 }
287
288return Changed;
289}
290
291/// Print passes managed by this manager
292voidLPPassManager::dumpPassStructure(unsignedOffset) {
293errs().indent(Offset*2) <<"Loop Pass Manager\n";
294for (unsigned Index = 0; Index <getNumContainedPasses(); ++Index) {
295Pass *P =getContainedPass(Index);
296P->dumpPassStructure(Offset + 1);
297dumpLastUses(P,Offset+1);
298 }
299}
300
301
302//===----------------------------------------------------------------------===//
303// LoopPass
304
305Pass *LoopPass::createPrinterPass(raw_ostream &O,
306const std::string &Banner) const{
307returnnew PrintLoopPassWrapper(O, Banner);
308}
309
310// Check if this pass is suitable for the current LPPassManager, if
311// available. This pass P is not suitable for a LPPassManager if P
312// is not preserving higher level analysis info used by other
313// LPPassManager passes. In such case, pop LPPassManager from the
314// stack. This will force assignPassManager() to create new
315// LPPassManger as expected.
316voidLoopPass::preparePassManager(PMStack &PMS) {
317
318// Find LPPassManager
319while (!PMS.empty() &&
320 PMS.top()->getPassManagerType() >PMT_LoopPassManager)
321 PMS.pop();
322
323// If this pass is destroying high level information that is used
324// by other passes that are managed by LPM then do not insert
325// this pass in current LPM. Use new LPPassManager.
326if (PMS.top()->getPassManagerType() ==PMT_LoopPassManager &&
327 !PMS.top()->preserveHigherLevelAnalysis(this))
328 PMS.pop();
329}
330
331/// Assign pass manager to manage this pass.
332voidLoopPass::assignPassManager(PMStack &PMS,
333PassManagerType PreferredType) {
334// Find LPPassManager
335while (!PMS.empty() &&
336 PMS.top()->getPassManagerType() >PMT_LoopPassManager)
337 PMS.pop();
338
339LPPassManager *LPPM;
340if (PMS.top()->getPassManagerType() ==PMT_LoopPassManager)
341 LPPM = (LPPassManager*)PMS.top();
342else {
343// Create new Loop Pass Manager if it does not exist.
344assert (!PMS.empty() &&"Unable to create Loop Pass Manager");
345PMDataManager *PMD = PMS.top();
346
347// [1] Create new Loop Pass Manager
348 LPPM =newLPPassManager();
349 LPPM->populateInheritedAnalysis(PMS);
350
351// [2] Set up new manager's top level manager
352PMTopLevelManager *TPM = PMD->getTopLevelManager();
353 TPM->addIndirectPassManager(LPPM);
354
355// [3] Assign manager to manage this new manager. This may create
356// and push new managers into PMS
357Pass *P = LPPM->getAsPass();
358 TPM->schedulePass(P);
359
360// [4] Push new manager into PMS
361 PMS.push(LPPM);
362 }
363
364 LPPM->add(this);
365}
366
367static std::stringgetDescription(constLoop &L) {
368return"loop";
369}
370
371boolLoopPass::skipLoop(constLoop *L) const{
372constFunction *F = L->getHeader()->getParent();
373if (!F)
374returnfalse;
375// Check the opt bisect limit.
376OptPassGate &Gate =F->getContext().getOptPassGate();
377if (Gate.isEnabled() &&
378 !Gate.shouldRunPass(this->getPassName(),getDescription(*L)))
379returntrue;
380// Check for the OptimizeNone attribute.
381if (F->hasOptNone()) {
382// FIXME: Report this to dbgs() only once per function.
383LLVM_DEBUG(dbgs() <<"Skipping pass '" <<getPassName() <<"' in function "
384 <<F->getName() <<"\n");
385// FIXME: Delete loop from pass manager's queue?
386returntrue;
387 }
388returnfalse;
389}
390
391LCSSAVerificationPass::LCSSAVerificationPass() :FunctionPass(ID) {
392initializeLCSSAVerificationPassPass(*PassRegistry::getPassRegistry());
393}
394
395charLCSSAVerificationPass::ID = 0;
396INITIALIZE_PASS(LCSSAVerificationPass,"lcssa-verification","LCSSA Verifier",
397false,false)
Info
Analysis containing CSE Info
Definition:CSEInfo.cpp:27
getDescription
static std::string getDescription(const CallGraphSCC &SCC)
Definition:CallGraphSCCPass.cpp:728
InstrCount
static unsigned InstrCount
Definition:DFAPacketizer.cpp:51
Debug.h
LLVM_DEBUG
#define LLVM_DEBUG(...)
Definition:Debug.h:106
Dominators.h
X
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
Module.h
Module.h This file contains the declarations for the Module class.
InitializePasses.h
LLVMContext.h
LoopInfo.h
addLoopIntoQueue
static void addLoopIntoQueue(Loop *L, std::deque< Loop * > &LQ)
Definition:LoopPass.cpp:96
LoopPass.h
F
#define F(x, y, z)
Definition:MD5.cpp:55
I
#define I(x, y, z)
Definition:MD5.cpp:58
OptBisect.h
This file declares the interface for bisecting optimizations.
P
#define P(N)
INITIALIZE_PASS
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition:PassSupport.h:38
PassTimingInfo.h
This header defines classes/functions to handle pass execution timing information with interfaces for...
PrintPasses.h
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
OS
raw_pwrite_stream & OS
Definition:SampleProfWriter.cpp:51
TimeProfiler.h
Timer.h
llvm::AnalysisUsage
Represent the analysis usage information of a pass.
Definition:PassAnalysisSupport.h:47
llvm::AnalysisUsage::setPreservesAll
void setPreservesAll()
Set by analyses that do not transform their input at all.
Definition:PassAnalysisSupport.h:130
llvm::BasicBlock
LLVM Basic Block Representation.
Definition:BasicBlock.h:61
llvm::DominatorTreeWrapperPass
Legacy analysis pass which computes a DominatorTree.
Definition:Dominators.h:317
llvm::DominatorTree
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition:Dominators.h:162
llvm::FunctionPass
FunctionPass class - This class is used to implement most global optimizations.
Definition:Pass.h:310
llvm::Function
Definition:Function.h:63
llvm::LPPassManager
Definition:LoopPass.h:76
llvm::LPPassManager::ID
static char ID
Definition:LoopPass.h:78
llvm::LPPassManager::runOnFunction
bool runOnFunction(Function &F) override
run - Execute all of the passes scheduled for execution.
Definition:LoopPass.cpp:129
llvm::LPPassManager::getAsPass
Pass * getAsPass() override
Definition:LoopPass.h:92
llvm::LPPassManager::dumpPassStructure
void dumpPassStructure(unsigned Offset) override
Print passes managed by this manager.
Definition:LoopPass.cpp:292
llvm::LPPassManager::markLoopAsDeleted
void markLoopAsDeleted(Loop &L)
Definition:LoopPass.cpp:111
llvm::LPPassManager::addLoop
void addLoop(Loop &L)
Definition:LoopPass.cpp:77
llvm::LPPassManager::getContainedPass
LoopPass * getContainedPass(unsigned N)
Definition:LoopPass.h:97
llvm::LPPassManager::getAnalysisUsage
void getAnalysisUsage(AnalysisUsage &Info) const override
Pass Manager itself does not invalidate any analysis info.
Definition:LoopPass.cpp:103
llvm::LPPassManager::LPPassManager
LPPassManager()
Definition:LoopPass.cpp:71
llvm::LoopBase::contains
bool contains(const LoopT *L) const
Return true if the specified loop is contained within in this loop.
Definition:GenericLoopInfo.h:124
llvm::LoopBase::verifyLoop
void verifyLoop() const
Verify loop structure.
Definition:GenericLoopInfoImpl.h:326
llvm::LoopBase::getHeader
BlockT * getHeader() const
Definition:GenericLoopInfo.h:90
llvm::LoopInfoWrapperPass
The legacy pass manager's analysis pass to compute loop information.
Definition:LoopInfo.h:593
llvm::LoopPass
Definition:LoopPass.h:28
llvm::LoopPass::preparePassManager
void preparePassManager(PMStack &PMS) override
Check if available pass managers are suitable for this pass or not.
Definition:LoopPass.cpp:316
llvm::LoopPass::createPrinterPass
Pass * createPrinterPass(raw_ostream &O, const std::string &Banner) const override
getPrinterPass - Get a pass to print the function corresponding to a Loop.
Definition:LoopPass.cpp:305
llvm::LoopPass::runOnLoop
virtual bool runOnLoop(Loop *L, LPPassManager &LPM)=0
llvm::LoopPass::assignPassManager
void assignPassManager(PMStack &PMS, PassManagerType PMT) override
Assign pass manager to manage this pass.
Definition:LoopPass.cpp:332
llvm::LoopPass::skipLoop
bool skipLoop(const Loop *L) const
Optional passes call this function to check whether the pass should be skipped.
Definition:LoopPass.cpp:371
llvm::Loop
Represents a single loop in the control flow graph.
Definition:LoopInfo.h:39
llvm::Loop::getName
StringRef getName() const
Definition:LoopInfo.h:388
llvm::Loop::isRecursivelyLCSSAForm
bool isRecursivelyLCSSAForm(const DominatorTree &DT, const LoopInfo &LI, bool IgnoreTokens=true) const
Return true if this Loop and all inner subloops are in LCSSA form.
Definition:LoopInfo.cpp:470
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition:Module.h:65
llvm::OptPassGate
Extensions to this class implement mechanisms to disable passes and individual optimizations at compi...
Definition:OptBisect.h:24
llvm::OptPassGate::isEnabled
virtual bool isEnabled() const
isEnabled() should return true before calling shouldRunPass().
Definition:OptBisect.h:36
llvm::OptPassGate::shouldRunPass
virtual bool shouldRunPass(const StringRef PassName, StringRef IRDescription)
IRDescription is a textual description of the IR unit the pass is running over.
Definition:OptBisect.h:30
llvm::PMDataManager
PMDataManager provides the common place to manage the analysis data used by pass managers.
Definition:LegacyPassManagers.h:295
llvm::PMDataManager::removeDeadPasses
void removeDeadPasses(Pass *P, StringRef Msg, enum PassDebuggingString)
Remove dead passes used by P.
Definition:LegacyPassManager.cpp:954
llvm::PMDataManager::dumpLastUses
void dumpLastUses(Pass *P, unsigned Offset) const
Definition:LegacyPassManager.cpp:1122
llvm::PMDataManager::recordAvailableAnalysis
void recordAvailableAnalysis(Pass *P)
Augment AvailableAnalysis by adding analysis made available by pass P.
Definition:LegacyPassManager.cpp:866
llvm::PMDataManager::getTopLevelManager
PMTopLevelManager * getTopLevelManager()
Definition:LegacyPassManagers.h:361
llvm::PMDataManager::initSizeRemarkInfo
unsigned initSizeRemarkInfo(Module &M, StringMap< std::pair< unsigned, unsigned > > &FunctionToInstrCount)
Set the initial size of the module if the user has specified that they want remarks for size.
Definition:LegacyPassManager.cpp:66
llvm::PMDataManager::dumpRequiredSet
void dumpRequiredSet(const Pass *P) const
Definition:LegacyPassManager.cpp:1190
llvm::PMDataManager::initializeAnalysisImpl
void initializeAnalysisImpl(Pass *P)
All Required analyses should be available to the pass as it runs! Here we fill in the AnalysisImpls m...
Definition:LegacyPassManager.cpp:1089
llvm::PMDataManager::verifyPreservedAnalysis
void verifyPreservedAnalysis(Pass *P)
verifyPreservedAnalysis – Verify analysis presreved by pass P.
Definition:LegacyPassManager.cpp:890
llvm::PMDataManager::freePass
void freePass(Pass *P, StringRef Msg, enum PassDebuggingString)
Remove P.
Definition:LegacyPassManager.cpp:975
llvm::PMDataManager::preserveHigherLevelAnalysis
bool preserveHigherLevelAnalysis(Pass *P)
Definition:LegacyPassManager.cpp:874
llvm::PMDataManager::getNumContainedPasses
unsigned getNumContainedPasses() const
Definition:LegacyPassManagers.h:376
llvm::PMDataManager::getPassManagerType
virtual PassManagerType getPassManagerType() const
Definition:LegacyPassManagers.h:380
llvm::PMDataManager::TPM
PMTopLevelManager * TPM
Definition:LegacyPassManagers.h:419
llvm::PMDataManager::emitInstrCountChangedRemark
void emitInstrCountChangedRemark(Pass *P, Module &M, int64_t Delta, unsigned CountBefore, StringMap< std::pair< unsigned, unsigned > > &FunctionToInstrCount, Function *F=nullptr)
Emit a remark signifying that the number of IR instructions in the module changed.
Definition:LegacyPassManager.cpp:88
llvm::PMDataManager::add
void add(Pass *P, bool ProcessAnalysis=true)
Add pass P into the PassVector.
Definition:LegacyPassManager.cpp:993
llvm::PMDataManager::populateInheritedAnalysis
void populateInheritedAnalysis(PMStack &PMS)
Definition:LegacyPassManagers.h:390
llvm::PMDataManager::dumpPreservedSet
void dumpPreservedSet(const Pass *P) const
Definition:LegacyPassManager.cpp:1199
llvm::PMDataManager::removeNotPreservedAnalysis
void removeNotPreservedAnalysis(Pass *P)
Remove Analysis that is not preserved by the pass.
Definition:LegacyPassManager.cpp:908
llvm::PMDataManager::dumpPassInfo
void dumpPassInfo(Pass *P, enum PassDebuggingString S1, enum PassDebuggingString S2, StringRef Msg)
Definition:LegacyPassManager.cpp:1149
llvm::PMStack
PMStack - This class implements a stack data structure of PMDataManager pointers.
Definition:LegacyPassManagers.h:136
llvm::PMStack::pop
void pop()
Definition:LegacyPassManager.cpp:1658
llvm::PMStack::top
PMDataManager * top() const
Definition:LegacyPassManagers.h:143
llvm::PMStack::empty
bool empty() const
Definition:LegacyPassManagers.h:145
llvm::PMStack::push
void push(PMDataManager *PM)
Definition:LegacyPassManager.cpp:1667
llvm::PMTopLevelManager
PMTopLevelManager manages LastUser info and collects common APIs used by top level pass managers.
Definition:LegacyPassManagers.h:158
llvm::PMTopLevelManager::addIndirectPassManager
void addIndirectPassManager(PMDataManager *Manager)
Definition:LegacyPassManagers.h:210
llvm::PMTopLevelManager::schedulePass
void schedulePass(Pass *P)
Schedule pass P for execution.
Definition:LegacyPassManager.cpp:661
llvm::PMTopLevelManager::activeStack
PMStack activeStack
Definition:LegacyPassManagers.h:219
llvm::PassManagerPrettyStackEntry
PassManagerPrettyStackEntry - This is used to print informative information about what pass is runnin...
Definition:LegacyPassManagers.h:109
llvm::PassRegistry::getPassRegistry
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
Definition:PassRegistry.cpp:24
llvm::Pass
Pass interface - Implemented by all 'passes'.
Definition:Pass.h:94
llvm::Pass::mustPreserveAnalysisID
bool mustPreserveAnalysisID(char &AID) const
mustPreserveAnalysisID - This method serves the same function as getAnalysisIfAvailable,...
Definition:Pass.cpp:69
llvm::Pass::getAnalysisUsage
virtual void getAnalysisUsage(AnalysisUsage &) const
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
Definition:Pass.cpp:98
llvm::Pass::getPassName
virtual StringRef getPassName() const
getPassName - Return a nice clean name for a pass.
Definition:Pass.cpp:81
llvm::StringMap
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition:StringMap.h:128
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition:StringRef.h:51
llvm::TimeRegion
The TimeRegion class is used as a helper class to call the startTimer() and stopTimer() methods of th...
Definition:Timer.h:148
llvm::TimeTraceScope
The TimeTraceScope is a helper class to call the begin and end functions of the time trace profiler.
Definition:TimeProfiler.h:180
llvm::Value::getName
StringRef getName() const
Return a constant reference to the value's name.
Definition:Value.cpp:309
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:raw_ostream.h:52
llvm::raw_ostream::indent
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
Definition:raw_ostream.cpp:495
uint64_t
unsigned
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition:ErrorHandling.h:143
llvm::CallingConv::ID
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition:CallingConv.h:24
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::initializeLCSSAVerificationPassPass
void initializeLCSSAVerificationPassPass(PassRegistry &)
llvm::Offset
@ Offset
Definition:DWP.cpp:480
llvm::PassManagerType
PassManagerType
Different types of internal pass managers.
Definition:Pass.h:55
llvm::PMT_LoopPassManager
@ PMT_LoopPassManager
LPPassManager.
Definition:Pass.h:60
llvm::erase
void erase(Container &C, ValueType V)
Wrapper function to remove a value from a container:
Definition:STLExtras.h:2107
llvm::getPassTimer
Timer * getPassTimer(Pass *)
Request the timer for this legacy-pass-manager's pass instance.
Definition:PassTimingInfo.cpp:152
llvm::reverse
auto reverse(ContainerTy &&C)
Definition:STLExtras.h:420
llvm::dbgs
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition:Debug.cpp:163
llvm::isFunctionInPrintList
bool isFunctionInPrintList(StringRef FunctionName)
Definition:PrintPasses.cpp:160
llvm::ON_LOOP_MSG
@ ON_LOOP_MSG
Definition:LegacyPassManagers.h:103
llvm::EXECUTION_MSG
@ EXECUTION_MSG
Definition:LegacyPassManagers.h:97
llvm::MODIFICATION_MSG
@ MODIFICATION_MSG
Definition:LegacyPassManagers.h:98
llvm::errs
raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
Definition:raw_ostream.cpp:907
llvm::find_if
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
Definition:STLExtras.h:1766
llvm::printLoop
void printLoop(Loop &L, raw_ostream &OS, const std::string &Banner="")
Function to print a loop's contents as LLVM's text IR assembly.
Definition:LoopInfo.cpp:989
raw_ostream.h
llvm::LCSSAVerificationPass
Definition:LoopPass.h:124
llvm::LCSSAVerificationPass::ID
static char ID
Definition:LoopPass.h:125
llvm::LCSSAVerificationPass::LCSSAVerificationPass
LCSSAVerificationPass()
Definition:LoopPass.cpp:391

Generated on Thu Jul 17 2025 10:57:31 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp