LLVM  6.0.0svn
Classes | Macros | Enumerations | Functions | Variables
SafepointIRVerifier.cpp File Reference
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/SafepointIRVerifier.h"
#include "llvm/IR/Statepoint.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
Include dependency graph for SafepointIRVerifier.cpp:

Go to the source code of this file.

Classes

struct  BasicBlockState
 The verifier algorithm is phrased in terms of availability. More...
 

Macros

#define DEBUG_TYPE   "safepoint-ir-verifier"
 

Enumerations

enum  BaseType { NonConstant = 1, ExclusivelyNull, ExclusivelySomeConstant }
 A given derived pointer can have multiple base pointers through phi/selects. More...
 

Functions

static void Verify (const Function &F, const DominatorTree &DT)
 
 INITIALIZE_PASS_BEGIN (SafepointIRVerifier, "verify-safepoint-ir", "Safepoint IR Verifier", false, true) INITIALIZE_PASS_END(SafepointIRVerifier
 
verify safepoint Safepoint IR static true bool isGCPointerType (Type *T)
 
static bool containsGCPtrType (Type *Ty)
 
template<typename IteratorTy >
static void PrintValueSet (raw_ostream &OS, IteratorTy Begin, IteratorTy End)
 
static void GatherDominatingDefs (const BasicBlock *BB, DenseSet< const Value *> &Result, const DominatorTree &DT, DenseMap< const BasicBlock *, BasicBlockState *> &BlockMap)
 Gather all the definitions dominating the start of BB into Result. More...
 
static void TransferInstruction (const Instruction &I, bool &Cleared, DenseSet< const Value *> &Available)
 Model the effect of an instruction on the set of available values. More...
 
static void TransferBlock (const BasicBlock *BB, BasicBlockState &BBS, bool FirstPass)
 Compute the AvailableOut set for BB, based on the BasicBlockState BBS, which is the BasicBlockState for BB. More...
 
static enum BaseType getBaseType (const Value *Val)
 Return the baseType for Val which states whether Val is exclusively derived from constant/null, or not exclusively derived from constant. More...
 

Variables

static cl::opt< boolPrintOnly ("safepoint-ir-verifier-print-only", cl::init(false))
 This option is used for writing test cases. More...
 
verify safepoint ir
 
verify safepoint Safepoint IR Verifier
 
verify safepoint Safepoint IR false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "safepoint-ir-verifier"

Definition at line 51 of file SafepointIRVerifier.cpp.

Enumeration Type Documentation

◆ BaseType

enum BaseType

A given derived pointer can have multiple base pointers through phi/selects.

This type indicates when the base pointer is exclusively constant (ExclusivelySomeConstant), and if that constant is proven to be exclusively null, we record that as ExclusivelyNull. In all other cases, the BaseType is NonConstant.

Enumerator
NonConstant 
ExclusivelyNull 
ExclusivelySomeConstant 

Definition at line 230 of file SafepointIRVerifier.cpp.

Function Documentation

◆ containsGCPtrType()

static bool containsGCPtrType ( Type Ty)
static

◆ GatherDominatingDefs()

static void GatherDominatingDefs ( const BasicBlock BB,
DenseSet< const Value *> &  Result,
const DominatorTree DT,
DenseMap< const BasicBlock *, BasicBlockState *> &  BlockMap 
)
static

Gather all the definitions dominating the start of BB into Result.

This is simply the Defs introduced by every dominating basic block and the function arguments.

Definition at line 160 of file SafepointIRVerifier.cpp.

References llvm::Function::args(), containsGCPtrType(), llvm::DomTreeNodeBase< NodeT >::getBlock(), llvm::DomTreeNodeBase< NodeT >::getIDom(), llvm::BasicBlock::getParent(), and llvm::detail::DenseSetImpl< ValueT, DenseMap< ValueT, detail::DenseSetEmpty, ValueInfoT, detail::DenseSetPair< ValueT > >, ValueInfoT >::insert().

Referenced by Verify().

◆ getBaseType()

static enum BaseType getBaseType ( const Value Val)
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( SafepointIRVerifier  ,
"verify-safepoint-ir ,
"Safepoint IR Verifier ,
false  ,
true   
)

◆ isGCPointerType()

verify safepoint Safepoint IR static true bool isGCPointerType ( Type T)
static

Definition at line 101 of file SafepointIRVerifier.cpp.

Referenced by containsGCPtrType().

◆ PrintValueSet()

template<typename IteratorTy >
static void PrintValueSet ( raw_ostream OS,
IteratorTy  Begin,
IteratorTy  End 
)
static

Definition at line 125 of file SafepointIRVerifier.cpp.

Referenced by TransferBlock().

◆ TransferBlock()

static void TransferBlock ( const BasicBlock BB,
BasicBlockState BBS,
bool  FirstPass 
)
static

◆ TransferInstruction()

static void TransferInstruction ( const Instruction I,
bool Cleared,
DenseSet< const Value *> &  Available 
)
static

◆ Verify()

static void Verify ( const Function F,
const DominatorTree DT 
)
static

Variable Documentation

◆ false

verify safepoint Safepoint IR false

Definition at line 98 of file SafepointIRVerifier.cpp.

◆ ir

verify safepoint ir

Definition at line 98 of file SafepointIRVerifier.cpp.

◆ PrintOnly

cl::opt<bool> PrintOnly("safepoint-ir-verifier-print-only", cl::init(false))
static

This option is used for writing test cases.

Instead of crashing the program when verification fails, report a message to the console (for FileCheck usage) and continue execution as if nothing happened.

Referenced by Verify().

◆ Verifier

verify safepoint Safepoint IR Verifier