LLVM  9.0.0svn
Functions | Variables
MustExecute.cpp File Reference
#include "llvm/Analysis/MustExecute.h"
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/Passes.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/AssemblyAnnotationWriter.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FormattedStream.h"
#include "llvm/Support/raw_ostream.h"
Include dependency graph for MustExecute.cpp:

Go to the source code of this file.

Functions

static bool CanProveNotTakenFirstIteration (const BasicBlock *ExitBlock, const DominatorTree *DT, const Loop *CurLoop)
 Return true if we can prove that the given ExitBlock is not reached on the first iteration of the given loop. More...
 
static void collectTransitivePredecessors (const Loop *CurLoop, const BasicBlock *BB, SmallPtrSetImpl< const BasicBlock *> &Predecessors)
 Collect all blocks from CurLoop which lie on all possible paths from the header of CurLoop (inclusive) to BB (exclusive) into the set Predecessors. More...
 
 INITIALIZE_PASS_BEGIN (MustExecutePrinter, "print-mustexecute", "Instructions which execute on loop entry", false, true) INITIALIZE_PASS_END(MustExecutePrinter
 
static bool isMustExecuteIn (const Instruction &I, Loop *L, DominatorTree *DT)
 

Variables

print mustexecute
 
print Instructions which execute on loop entry
 
print Instructions which execute on loop false
 

Function Documentation

◆ CanProveNotTakenFirstIteration()

static bool CanProveNotTakenFirstIteration ( const BasicBlock ExitBlock,
const DominatorTree DT,
const Loop CurLoop 
)
static

Return true if we can prove that the given ExitBlock is not reached on the first iteration of the given loop.

That is, the backedge of the loop must be executed before the ExitBlock is executed in any dynamic execution trace.

Definition at line 109 of file MustExecute.cpp.

References assert(), llvm::LoopBase< BlockT, LoopT >::contains(), llvm::dyn_cast(), llvm::Module::getDataLayout(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::LoopBase< BlockT, LoopT >::getLoopPreheader(), llvm::BasicBlock::getModule(), llvm::User::getOperand(), llvm::BasicBlock::getSinglePredecessor(), llvm::BranchInst::getSuccessor(), and llvm::SimplifyCmpInst().

Referenced by llvm::LoopSafetyInfo::allLoopPathsLeadToBlock().

◆ collectTransitivePredecessors()

static void collectTransitivePredecessors ( const Loop CurLoop,
const BasicBlock BB,
SmallPtrSetImpl< const BasicBlock *> &  Predecessors 
)
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( MustExecutePrinter  ,
"print-mustexecute ,
"Instructions which execute on loop entry ,
false  ,
true   
)

◆ isMustExecuteIn()

static bool isMustExecuteIn ( const Instruction I,
Loop L,
DominatorTree DT 
)
static

Variable Documentation

◆ entry

print Instructions which execute on loop entry

◆ false

print Instructions which execute on loop false

Definition at line 309 of file MustExecute.cpp.

◆ mustexecute

print mustexecute

Definition at line 309 of file MustExecute.cpp.