LLVM 22.0.0git
llvm::DevirtSCCRepeatedPass Class Reference

A helper that repeats an SCC pass each time an indirect call is refined to a direct call by that pass. More...

#include "llvm/Analysis/CGSCCPassManager.h"

Inheritance diagram for llvm::DevirtSCCRepeatedPass:
[legend]

Public Types

using PassConceptT

Public Member Functions

 DevirtSCCRepeatedPass (std::unique_ptr< PassConceptT > Pass, int MaxIterations)
LLVM_ABI PreservedAnalyses run (LazyCallGraph::SCC &InitialC, CGSCCAnalysisManager &AM, LazyCallGraph &CG, CGSCCUpdateResult &UR)
 Runs the wrapped pass up to MaxIterations on the SCC, iterating whenever an indirect call is refined.
void printPipeline (raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)
Public Member Functions inherited from llvm::PassInfoMixin< DevirtSCCRepeatedPass >
void printPipeline (raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)

Additional Inherited Members

Static Public Member Functions inherited from llvm::PassInfoMixin< DevirtSCCRepeatedPass >
static StringRef name ()
 Gets the name of the pass we are mixed into.

Detailed Description

A helper that repeats an SCC pass each time an indirect call is refined to a direct call by that pass.

While the CGSCC pass manager works to re-visit SCCs and RefSCCs as they change shape, we may also want to repeat an SCC pass if it simply refines an indirect call to a direct call, even if doing so does not alter the shape of the graph. Note that this only pertains to direct calls to functions where IPO across the SCC may be able to compute more precise results. For intrinsics, we assume scalar optimizations already can fully reason about them.

This repetition has the potential to be very large however, as each one might refine a single call site. As a consequence, in practice we use an upper bound on the number of repetitions to limit things.

Definition at line 547 of file CGSCCPassManager.h.

Member Typedef Documentation

◆ PassConceptT

Initial value:
An SCC of the call graph.
A lazily constructed view of the call graph of a module.
AnalysisManager< LazyCallGraph::SCC, LazyCallGraph & > CGSCCAnalysisManager
The CGSCC analysis manager.
Support structure for SCC passes to communicate updates the call graph back to the CGSCC pass manager...
Template for the abstract base class used to dispatch polymorphically over pass objects.

Definition at line 549 of file CGSCCPassManager.h.

Constructor & Destructor Documentation

◆ DevirtSCCRepeatedPass()

llvm::DevirtSCCRepeatedPass::DevirtSCCRepeatedPass ( std::unique_ptr< PassConceptT > Pass,
int MaxIterations )
inlineexplicit

Definition at line 553 of file CGSCCPassManager.h.

References llvm::move().

Member Function Documentation

◆ printPipeline()

void llvm::DevirtSCCRepeatedPass::printPipeline ( raw_ostream & OS,
function_ref< StringRef(StringRef)> MapClassName2PassName )
inline

Definition at line 563 of file CGSCCPassManager.h.

◆ run()


The documentation for this class was generated from the following files: