LLVM 20.0.0git
Classes | Namespaces | Enumerations | Functions
MustExecute.h File Reference

Contains a collection of routines for determining if a given instruction is guaranteed to execute if a given point in control flow is reached. More...

#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/Analysis/InstructionPrecedenceTracking.h"
#include "llvm/IR/EHPersonalities.h"
#include "llvm/IR/PassManager.h"

Go to the source code of this file.

Classes

class  llvm::LoopSafetyInfo
 Captures loop safety information. More...
 
class  llvm::SimpleLoopSafetyInfo
 Simple and conservative implementation of LoopSafetyInfo that can give false-positive answers to its queries in order to avoid complicated analysis. More...
 
class  llvm::ICFLoopSafetyInfo
 This implementation of LoopSafetyInfo use ImplicitControlFlowTracking to give precise answers on "may throw" queries. More...
 
struct  llvm::MustBeExecutedIterator
 Must be executed iterators visit stretches of instructions that are guaranteed to be executed together, potentially with other instruction executed in-between. More...
 
struct  llvm::MustBeExecutedContextExplorer
 A "must be executed context" for a given program point PP is the set of instructions, potentially before and after PP, that are executed always when PP is reached. More...
 
class  llvm::MustExecutePrinterPass
 
class  llvm::MustBeExecutedContextPrinterPass
 

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 

Enumerations

enum class  llvm::ExplorationDirection { llvm::BACKWARD = 0 , llvm::FORWARD = 1 }
 Enum that allows us to spell out the direction. More...
 

Functions

bool llvm::mayContainIrreducibleControl (const Function &F, const LoopInfo *LI)
 

Detailed Description

Contains a collection of routines for determining if a given instruction is guaranteed to execute if a given point in control flow is reached.

The most common example is an instruction within a loop being provably executed if we branch to the header of it's containing loop.

There are two interfaces available to determine if an instruction is executed once a given point in the control flow is reached: 1) A loop-centric one derived from LoopSafetyInfo. 2) A "must be executed context"-based one implemented in the MustBeExecutedContextExplorer. Please refer to the class comments for more information.

Definition in file MustExecute.h.