LLVM 24.0.0git
PlaceSafepoints.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "place-safepoints"

Functions

 STATISTIC (NumEntrySafepoints, "Number of entry safepoints inserted")
 STATISTIC (NumBackedgeSafepoints, "Number of backedge safepoints inserted")
 STATISTIC (CallInLoop, "Number of loops without safepoints due to calls in loop")
 STATISTIC (FiniteExecution, "Number of loops without safepoints finite execution")
 INITIALIZE_PASS_BEGIN (PlaceBackedgeSafepointsLegacyPass, "place-backedge-safepoints-impl", "Place Backedge Safepoints", false, false) INITIALIZE_PASS_END(PlaceBackedgeSafepointsLegacyPass
place backedge safepoints Place Backedge static false bool containsUnconditionalCallSafepoint (Loop *L, BasicBlock *Header, BasicBlock *Pred, DominatorTree &DT, const TargetLibraryInfo &TLI)
 Returns true if this loop is known to contain a call safepoint which must unconditionally execute on any iteration of the loop which returns to the loop header via an edge from Pred.
static bool mustBeFiniteCountedLoop (const ScalarOptions &Opts, Loop *L, ScalarEvolution *SE, BasicBlock *Pred)
 Returns true if this loop is known to terminate in a finite number of iterations.
static Instruction * findLocationForEntrySafepoint (Function &F, DominatorTree &DT)
static bool isGCSafepointPoll (Function &F)
static bool shouldRewriteFunction (Function &F)
 Returns true if this function should be rewritten to include safepoint polls and parseable call sites.
static bool enableEntrySafepoints (const ScalarOptions &Opts, Function &F)
static bool enableBackedgeSafepoints (const ScalarOptions &Opts, Function &F)
static bool enableCallSafepoints (const ScalarOptions &Opts, Function &F)
static void InsertSafepointPoll (BasicBlock::iterator InsertBefore, std::vector< CallBase * > &ParsePointsNeeded, const TargetLibraryInfo &TLI)
static bool needsStatepoint (CallBase *Call, const TargetLibraryInfo &TLI)
static void scanOneBB (Instruction *Start, Instruction *End, std::vector< CallInst * > &Calls, DenseSet< BasicBlock * > &Seen, std::vector< BasicBlock * > &Worklist)
static void scanInlinedCode (Instruction *Start, Instruction *End, std::vector< CallInst * > &Calls, DenseSet< BasicBlock * > &Seen)
static bool doesNotRequireEntrySafepointBefore (CallBase *Call)
 Returns true if an entry safepoint is not required before this callsite in the caller function.

Variables

place backedge safepoints impl
place backedge safepoints Place Backedge Safepoints
place backedge safepoints Place Backedge false
const char GCSafepointPollName [] = "gc.safepoint_poll"

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "place-safepoints"

Definition at line 74 of file PlaceSafepoints.cpp.

Function Documentation

◆ containsUnconditionalCallSafepoint()

bool containsUnconditionalCallSafepoint ( Loop * L,
BasicBlock * Header,
BasicBlock * Pred,
DominatorTree & DT,
const TargetLibraryInfo & TLI )
static

Returns true if this loop is known to contain a call safepoint which must unconditionally execute on any iteration of the loop which returns to the loop header via an edge from Pred.

Returns a conservative correct answer; i.e. false is always valid.

Definition at line 385 of file PlaceSafepoints.cpp.

References assert(), Call, llvm::DominatorTree::dominates(), llvm::dyn_cast(), llvm::DomTreeNodeBase< NodeT >::getBlock(), llvm::DomTreeNodeBase< NodeT >::getIDom(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getNode(), I, and needsStatepoint().

◆ doesNotRequireEntrySafepointBefore()

bool doesNotRequireEntrySafepointBefore ( CallBase * Call)
static

Returns true if an entry safepoint is not required before this callsite in the caller function.

Definition at line 495 of file PlaceSafepoints.cpp.

References Call, llvm::dyn_cast(), and II.

Referenced by findLocationForEntrySafepoint().

◆ enableBackedgeSafepoints()

bool enableBackedgeSafepoints ( const ScalarOptions & Opts,
Function & F )
static

Definition at line 597 of file PlaceSafepoints.cpp.

References F.

Referenced by llvm::PlaceSafepointsPass::runImpl().

◆ enableCallSafepoints()

bool enableCallSafepoints ( const ScalarOptions & Opts,
Function & F )
static

Definition at line 600 of file PlaceSafepoints.cpp.

References F.

Referenced by llvm::PlaceSafepointsPass::runImpl().

◆ enableEntrySafepoints()

bool enableEntrySafepoints ( const ScalarOptions & Opts,
Function & F )
static

Definition at line 594 of file PlaceSafepoints.cpp.

References F.

Referenced by llvm::PlaceSafepointsPass::runImpl().

◆ findLocationForEntrySafepoint()

Instruction * findLocationForEntrySafepoint ( Function & F,
DominatorTree & DT )
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( PlaceBackedgeSafepointsLegacyPass ,
"place-backedge-safepoints-impl" ,
"Place Backedge Safepoints" ,
false ,
false  )

◆ InsertSafepointPoll()

◆ isGCSafepointPoll()

bool isGCSafepointPoll ( Function & F)
static

Definition at line 573 of file PlaceSafepoints.cpp.

References F, and GCSafepointPollName.

Referenced by llvm::PlaceSafepointsPass::runImpl().

◆ mustBeFiniteCountedLoop()

bool mustBeFiniteCountedLoop ( const ScalarOptions & Opts,
Loop * L,
ScalarEvolution * SE,
BasicBlock * Pred )
static

Returns true if this loop is known to terminate in a finite number of iterations.

Note that this function may return false for a loop which does actual terminate in a finite constant number of iterations due to conservatism in the analysis.

Definition at line 427 of file PlaceSafepoints.cpp.

References llvm::ScalarEvolution::getConstantMaxBackedgeTakenCount(), llvm::ScalarEvolution::getExitCount(), llvm::ConstantRange::getUnsignedMax(), llvm::ScalarEvolution::getUnsignedRange(), llvm::isa(), and llvm::APInt::isIntN().

◆ needsStatepoint()

bool needsStatepoint ( CallBase * Call,
const TargetLibraryInfo & TLI )
static

◆ scanInlinedCode()

void scanInlinedCode ( Instruction * Start,
Instruction * End,
std::vector< CallInst * > & Calls,
DenseSet< BasicBlock * > & Seen )
static

◆ scanOneBB()

void scanOneBB ( Instruction * Start,
Instruction * End,
std::vector< CallInst * > & Calls,
DenseSet< BasicBlock * > & Seen,
std::vector< BasicBlock * > & Worklist )
static

◆ shouldRewriteFunction()

bool shouldRewriteFunction ( Function & F)
static

Returns true if this function should be rewritten to include safepoint polls and parseable call sites.

The main point of this function is to be an extension point for custom logic.

Definition at line 580 of file PlaceSafepoints.cpp.

References F.

Referenced by llvm::PlaceSafepointsPass::runImpl().

◆ STATISTIC() [1/4]

STATISTIC ( CallInLoop ,
"Number of loops without safepoints due to calls in loop"  )

◆ STATISTIC() [2/4]

STATISTIC ( FiniteExecution ,
"Number of loops without safepoints finite execution"  )

◆ STATISTIC() [3/4]

STATISTIC ( NumBackedgeSafepoints ,
"Number of backedge safepoints inserted"  )

◆ STATISTIC() [4/4]

STATISTIC ( NumEntrySafepoints ,
"Number of entry safepoints inserted"  )

Variable Documentation

◆ false

place backedge safepoints Place Backedge false

Definition at line 155 of file PlaceSafepoints.cpp.

◆ GCSafepointPollName

const char GCSafepointPollName[] = "gc.safepoint_poll"

Definition at line 571 of file PlaceSafepoints.cpp.

Referenced by InsertSafepointPoll(), and isGCSafepointPoll().

◆ impl

place backedge safepoints impl

Definition at line 154 of file PlaceSafepoints.cpp.

◆ Safepoints

place backedge safepoints Place Backedge Safepoints

Definition at line 155 of file PlaceSafepoints.cpp.