LLVM: lib/IR/SafepointIRVerifier.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "safepoint-ir-verifier"
Typedefs
using AvailableValueSet = DenseSet<const Value *>
The verifier algorithm is phrased in terms of availability.
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
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.
static bool isNotExclusivelyConstantDerived (const Value *V)
Variables
static cl::opt< bool > PrintOnly ("safepoint-ir-verifier-print-only", cl::init(false))
This option is used for writing test cases.
verify safepoint ir
verify safepoint Safepoint IR Verifier
verify safepoint Safepoint IR false

DEBUG_TYPE

#define DEBUG_TYPE "safepoint-ir-verifier"

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

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

containsGCPtrType()

bool containsGCPtrType ( Type * Ty) static

getBaseType()

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

References llvm::append_range(), llvm::dyn_cast(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), ExclusivelyNull, ExclusivelySomeConstant, GEP, llvm::Constant::getNullValue(), llvm::PHINode::incoming_values(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), llvm::isa(), NonConstant, llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().

Referenced by llvm::DwarfUnit::getOrCreateTypeDIE(), 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

isNotExclusivelyConstantDerived()

PrintValueSet()

template

void PrintValueSet ( raw_ostream & OS, IteratorTy Begin, IteratorTy End ) static

Verify()

false

PrintOnly

cl::opt< bool > PrintOnly("safepoint-ir-verifier-print-only", cl::init(false)) ( "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