LLVM  8.0.1
Classes | Macros | Typedefs | Enumerations | Functions | Variables
SafepointIRVerifier.cpp File Reference
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/PostOrderIterator.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
 State we compute and track per basic block. More...
 

Macros

#define DEBUG_TYPE   "safepoint-ir-verifier"
 

Typedefs

using AvailableValueSet = DenseSet< const Value * >
 The verifier algorithm is phrased in terms of availability. More...
 

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, const CFGDeadness &CD)
 
 INITIALIZE_PASS_BEGIN (SafepointIRVerifier, "verify-safepoint-ir", "Safepoint IR Verifier", false, false) INITIALIZE_PASS_END(SafepointIRVerifier
 
verify safepoint Safepoint IR static false bool isGCPointerType (Type *T)
 
static bool containsGCPtrType (Type *Ty)
 
template<typename IteratorTy >
static void PrintValueSet (raw_ostream &OS, IteratorTy Begin, IteratorTy End)
 
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...
 
static bool isNotExclusivelyConstantDerived (const Value *V)
 

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 52 of file SafepointIRVerifier.cpp.

Typedef Documentation

◆ AvailableValueSet

The verifier algorithm is phrased in terms of availability.

The set of values "available" at a given point in the control flow graph is the set of correctly relocated value at that point, and is a subset of the set of definitions dominating that point.

Definition at line 280 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 304 of file SafepointIRVerifier.cpp.

Function Documentation

◆ containsGCPtrType()

static bool containsGCPtrType ( Type Ty)
static

Definition at line 252 of file SafepointIRVerifier.cpp.

References llvm::any_of(), isGCPointerType(), and llvm::ARM_MB::ST.

◆ getBaseType()

static enum BaseType getBaseType ( const Value Val)
static

Return the baseType for Val which states whether Val is exclusively derived from constant/null, or not exclusively derived from constant.

Val is exclusively derived off a constant base when all operands of phi and selects are derived off a constant base.

Definition at line 316 of file SafepointIRVerifier.cpp.

References llvm::SmallVectorBase::empty(), ExclusivelyNull, ExclusivelySomeConstant, GEP, llvm::Constant::getNullValue(), llvm::Value::getType(), llvm::PHINode::incoming_values(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), NonConstant, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T >::push_back(), and SI.

Referenced by dwarfCCToCodeView(), llvm::DwarfUnit::getOrCreateTypeDIE(), llvm::DbgVariable::getType(), llvm::object::COFFSymbolRef::isFunctionDefinition(), and isNotExclusivelyConstantDerived().

◆ INITIALIZE_PASS_BEGIN()

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

◆ isGCPointerType()

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

Definition at line 243 of file SafepointIRVerifier.cpp.

Referenced by containsGCPtrType().

◆ isNotExclusivelyConstantDerived()

static bool isNotExclusivelyConstantDerived ( const Value V)
static

◆ PrintValueSet()

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

Definition at line 266 of file SafepointIRVerifier.cpp.

◆ Verify()

static void Verify ( const Function F,
const DominatorTree DT,
const CFGDeadness &  CD 
)
static

Variable Documentation

◆ false

verify safepoint Safepoint IR false

Definition at line 240 of file SafepointIRVerifier.cpp.

◆ ir

verify safepoint ir

Definition at line 240 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