Index: llvm/trunk/CMakeLists.txt =================================================================== --- llvm/trunk/CMakeLists.txt +++ llvm/trunk/CMakeLists.txt @@ -304,6 +304,8 @@ option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON) endif() +option(LLVM_ENABLE_EXPENSIVE_CHECKS "Enable expensive checks" OFF) + set(LLVM_ABI_BREAKING_CHECKS "WITH_ASSERTS" CACHE STRING "Enable abi-breaking checks. Can be WITH_ASSERTS, FORCE_ON or FORCE_OFF.") Index: llvm/trunk/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/trunk/cmake/modules/HandleLLVMOptions.cmake +++ llvm/trunk/cmake/modules/HandleLLVMOptions.cmake @@ -44,6 +44,11 @@ endif() endif() +if(LLVM_ENABLE_EXPENSIVE_CHECKS) + add_definitions(-DEXPENSIVE_CHECKS) + add_definitions(-D_GLIBCXX_DEBUG) +endif() + string(TOUPPER "${LLVM_ABI_BREAKING_CHECKS}" uppercase_LLVM_ABI_BREAKING_CHECKS) if( uppercase_LLVM_ABI_BREAKING_CHECKS STREQUAL "WITH_ASSERTS" ) Index: llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h =================================================================== --- llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h +++ llvm/trunk/include/llvm/Analysis/RegionInfoImpl.h @@ -665,7 +665,7 @@ new RegionT(entry, exit, static_cast(this), DT); BBtoRegion.insert(std::make_pair(entry, region)); -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS region->verifyRegion(); #else DEBUG(region->verifyRegion()); @@ -764,7 +764,7 @@ } } -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS template bool RegionInfoBase::VerifyRegionInfo = true; #else @@ -798,7 +798,7 @@ template void RegionInfoBase::verifyAnalysis() const { - // Do only verify regions if explicitely activated using XDEBUG or + // Do only verify regions if explicitely activated using EXPENSIVE_CHECKS or // -verify-region-info if (!RegionInfoBase::VerifyRegionInfo) return; Index: llvm/trunk/include/llvm/Support/GenericDomTree.h =================================================================== --- llvm/trunk/include/llvm/Support/GenericDomTree.h +++ llvm/trunk/include/llvm/Support/GenericDomTree.h @@ -453,7 +453,7 @@ // Compare the result of the tree walk and the dfs numbers, if expensive // checks are enabled. -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS assert((!DFSInfoValid || (dominatedBySlowTreeWalk(A, B) == B->DominatedBy(A))) && "Tree walk disagrees with dfs numbers!"); Index: llvm/trunk/lib/Analysis/LoopInfo.cpp =================================================================== --- llvm/trunk/lib/Analysis/LoopInfo.cpp +++ llvm/trunk/lib/Analysis/LoopInfo.cpp @@ -38,7 +38,7 @@ template class llvm::LoopInfoBase; // Always verify loopinfo if expensive checking is enabled. -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS static bool VerifyLoopInfo = true; #else static bool VerifyLoopInfo = false; Index: llvm/trunk/lib/Analysis/ScalarEvolution.cpp =================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp @@ -111,7 +111,7 @@ "derived loop"), cl::init(100)); -// FIXME: Enable this with XDEBUG when the test suite is clean. +// FIXME: Enable this with EXPENSIVE_CHECKS when the test suite is clean. static cl::opt VerifySCEV("verify-scev", cl::desc("Verify ScalarEvolution's backedge taken counts (slow)")); Index: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp =================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -204,7 +204,7 @@ // Now that we have a set of nodes to process, handle them all. while (!Worklist.empty()) { -#ifndef XDEBUG +#ifndef EXPENSIVE_CHECKS if (EnableExpensiveChecks) #endif PerformExpensiveChecks(); @@ -394,7 +394,7 @@ } } -#ifndef XDEBUG +#ifndef EXPENSIVE_CHECKS if (EnableExpensiveChecks) #endif PerformExpensiveChecks(); Index: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp =================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -7294,9 +7294,9 @@ bool force) { #ifndef NDEBUG bool check = force; -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS check = true; -#endif // XDEBUG +#endif // EXPENSIVE_CHECKS if (check) { assert(N && "Checking nonexistent SDNode"); SmallPtrSet visited; Index: llvm/trunk/lib/IR/Dominators.cpp =================================================================== --- llvm/trunk/lib/IR/Dominators.cpp +++ llvm/trunk/lib/IR/Dominators.cpp @@ -28,7 +28,7 @@ using namespace llvm; // Always verify dominfo if expensive checking is enabled. -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS static bool VerifyDomInfo = true; #else static bool VerifyDomInfo = false; Index: llvm/trunk/lib/Target/ARM/ARMFrameLowering.cpp =================================================================== --- llvm/trunk/lib/Target/ARM/ARMFrameLowering.cpp +++ llvm/trunk/lib/Target/ARM/ARMFrameLowering.cpp @@ -2155,7 +2155,7 @@ PrevStackMBB->addSuccessor(McrMBB); -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS MF.verify(); #endif } Index: llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp =================================================================== --- llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp +++ llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp @@ -1298,7 +1298,7 @@ materialize(Loc); removeDeadCode(); -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS // Run this only when expensive checks are enabled. verifyFunction(F); #endif Index: llvm/trunk/lib/Target/Sparc/SparcFrameLowering.cpp =================================================================== --- llvm/trunk/lib/Target/Sparc/SparcFrameLowering.cpp +++ llvm/trunk/lib/Target/Sparc/SparcFrameLowering.cpp @@ -350,7 +350,7 @@ } assert(verifyLeafProcRegUse(&MRI)); -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS MF.verify(0, "After LeafProc Remapping"); #endif } Index: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp =================================================================== --- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp +++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp @@ -2279,7 +2279,7 @@ checkMBB->addSuccessor(allocMBB); checkMBB->addSuccessor(&PrologueMBB); -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS MF.verify(); #endif } @@ -2423,7 +2423,7 @@ incStackMBB->addSuccessor(&PrologueMBB, {99, 100}); incStackMBB->addSuccessor(incStackMBB, {1, 100}); } -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS MF.verify(); #endif } Index: llvm/trunk/lib/Transforms/ObjCARC/BlotMapVector.h =================================================================== --- llvm/trunk/lib/Transforms/ObjCARC/BlotMapVector.h +++ llvm/trunk/lib/Transforms/ObjCARC/BlotMapVector.h @@ -31,7 +31,7 @@ const_iterator begin() const { return Vector.begin(); } const_iterator end() const { return Vector.end(); } -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS ~BlotMapVector() { assert(Vector.size() >= Map.size()); // May differ due to blotting. for (typename MapTy::const_iterator I = Map.begin(), E = Map.end(); I != E; Index: llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp +++ llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp @@ -62,7 +62,7 @@ RematerializationThreshold("spp-rematerialization-threshold", cl::Hidden, cl::init(6)); -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS static bool ClobberNonLive = true; #else static bool ClobberNonLive = false; Index: llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp =================================================================== --- llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp +++ llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp @@ -805,7 +805,7 @@ CachedUpwardsClobberingAccess.clear(); } -#ifdef XDEBUG +#ifdef EXPENSIVE_CHECKS // Run this only when expensive checks are enabled. verifyRemoved(MA); #endif