[PATCH] D62570: Use LLVM's debug line parser in LLDB

Jonas Devlieghere via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 12 17:09:24 PDT 2019


JDevlieghere added a comment.

I used `image dump line-table` to benchmark the performance difference. I did a RelWithDebugInfo build of clang and picked 237 files to dump.

  repeat 10 "time ./bin/lldb -b -o 'image dump line-table ARCMT.cpp ARCMTActions.cpp FileRemapper.cpp ObjCMT.cpp PlistReporter.cpp TransAPIUses.cpp TransARCAssign.cpp TransAutoreleasePool.cpp TransBlockObjCVariable.cpp TransEmptyStatementsAndDealloc.cpp TransGCAttrs.cpp TransGCCalls.cpp TransProperties.cpp TransProtectedScope.cpp TransRetainReleaseDealloc.cpp TransUnbridgedCasts.cpp TransUnusedInitDelegate.cpp TransZeroOutPropsInDealloc.cpp TransformActions.cpp Transforms.cpp APValue.cpp ASTConsumer.cpp ASTContext.cpp ASTDiagnostic.cpp ASTDumper.cpp ASTImporter.cpp ASTImporterLookupTable.cpp ASTStructuralEquivalence.cpp ASTTypeTraits.cpp AttrImpl.cpp CXXInheritance.cpp Comment.cpp CommentBriefParser.cpp CommentCommandTraits.cpp CommentLexer.cpp CommentParser.cpp CommentSema.cpp ComparisonCategories.cpp DataCollection.cpp Decl.cpp DeclBase.cpp DeclCXX.cpp DeclFriend.cpp DeclGroup.cpp DeclObjC.cpp DeclOpenMP.cpp DeclPrinter.cpp DeclTemplate.cpp DeclarationName.cpp Expr.cpp ExprCXX.cpp ExprClassification.cpp ExprConstant.cpp ExprObjC.cpp ExternalASTSource.cpp FormatString.cpp ItaniumCXXABI.cpp ItaniumMangle.cpp JSONNodeDumper.cpp Mangle.cpp MicrosoftCXXABI.cpp MicrosoftMangle.cpp NSAPI.cpp NestedNameSpecifier.cpp ODRHash.cpp OSLog.cpp OpenMPClause.cpp ParentMap.cpp PrintfFormatString.cpp QualTypeNames.cpp RawCommentList.cpp RecordLayout.cpp RecordLayoutBuilder.cpp ScanfFormatString.cpp SelectorLocationsKind.cpp Stmt.cpp StmtCXX.cpp StmtIterator.cpp StmtObjC.cpp StmtOpenMP.cpp StmtPrinter.cpp StmtProfile.cpp StmtViz.cpp TemplateBase.cpp TemplateName.cpp TextNodeDumper.cpp Type.cpp TypeLoc.cpp TypePrinter.cpp VTTBuilder.cpp VTableBuilder.cpp ASTMatchFinder.cpp ASTMatchersInternal.cpp Parser.cpp AnalysisDeclContext.cpp BodyFarm.cpp CFG.cpp CFGReachabilityAnalysis.cpp CFGStmtMap.cpp CallGraph.cpp CloneDetection.cpp CocoaConventions.cpp CodeInjector.cpp ConstructionContext.cpp Consumed.cpp Dominators.cpp ExprMutationAnalyzer.cpp LiveVariables.cpp ObjCNoReturn.cpp PostOrderCFGView.cpp ProgramPoint.cpp ReachableCode.cpp RetainSummaryManager.cpp ThreadSafety.cpp ThreadSafetyCommon.cpp ThreadSafetyTIL.cpp UninitializedValues.cpp Attributes.cpp Builtins.cpp CharInfo.cpp CodeGenOptions.cpp Cuda.cpp Diagnostic.cpp DiagnosticIDs.cpp DiagnosticOptions.cpp FileManager.cpp FileSystemStatCache.cpp FixedPoint.cpp IdentifierTable.cpp LangOptions.cpp LangStandards.cpp Module.cpp ObjCRuntime.cpp OpenMPKinds.cpp OperatorPrecedence.cpp SanitizerBlacklist.cpp SanitizerSpecialCaseList.cpp Sanitizers.cpp SourceLocation.cpp SourceManager.cpp TargetInfo.cpp AArch64.cpp AMDGPU.cpp ARC.cpp ARM.cpp AVR.cpp BPF.cpp Hexagon.cpp Lanai.cpp Le64.cpp MSP430.cpp Mips.cpp NVPTX.cpp OSTargets.cpp PNaCl.cpp PPC.cpp RISCV.cpp SPIR.cpp Sparc.cpp SystemZ.cpp TCE.cpp WebAssembly.cpp X86.cpp XCore.cpp Targets.cpp TokenKinds.cpp Version.cpp Warnings.cpp XRayInstr.cpp XRayLists.cpp BackendUtil.cpp CGAtomic.cpp CGBlocks.cpp CGBuiltin.cpp CGCUDANV.cpp CGCUDARuntime.cpp CGCXX.cpp CGCXXABI.cpp CGCall.cpp CGClass.cpp CGCleanup.cpp CGCoroutine.cpp CGDebugInfo.cpp CGDecl.cpp CGDeclCXX.cpp CGException.cpp CGExpr.cpp CGExprAgg.cpp CGExprCXX.cpp CGExprComplex.cpp CGExprConstant.cpp CGExprScalar.cpp CGGPUBuiltin.cpp CGLoopInfo.cpp CGNonTrivialStruct.cpp CGObjC.cpp CGObjCGNU.cpp CGObjCMac.cpp CGObjCRuntime.cpp CGOpenCLRuntime.cpp CGOpenMPRuntime.cpp CGOpenMPRuntimeNVPTX.cpp CGRecordLayoutBuilder.cpp CGStmt.cpp CGStmtOpenMP.cpp CGVTT.cpp CGVTables.cpp CodeGenAction.cpp CodeGenFunction.cpp CodeGenModule.cpp CodeGenPGO.cpp CodeGenTBAA.cpp CodeGenTypes.cpp ConstantInitBuilder.cpp CoverageMappingGen.cpp ItaniumCXXABI.cpp MacroPPCallbacks.cpp MicrosoftCXXABI.cpp ModuleBuilder.cpp ObjectFilePCHContainerOperations.cpp PatternInit.cpp SanitizerMetadata.cpp SwiftCallingConv.cpp TargetInfo.cpp VarBypassDetector.cpp CrossTranslationUnit.cpp Action.cpp Compilation.cpp DarwinSDKInfo.cpp Distro.cpp Driver.cpp DriverOptions.cpp Job.cpp Multilib.cpp Phases.cpp SanitizerArgs.cpp Tool.cpp' ~/llvm/build-benchmark/bin/clang > /dev/null"

**LLDB Line Table Parser**

  6.13 real         4.97 user         1.13 sys
  6.15 real         5.00 user         1.12 sys
  6.11 real         4.96 user         1.11 sys
  6.10 real         4.95 user         1.12 sys
  6.14 real         4.98 user         1.13 sys
  6.15 real         4.98 user         1.13 sys
  6.10 real         4.94 user         1.13 sys
  6.18 real         5.02 user         1.13 sys
  6.15 real         4.95 user         1.16 sys
  6.06 real         4.92 user         1.10 sys
  --------------------------------------------
  6.13 real

**LLVM Line Table Parser**

  6.34 real         5.11 user         1.16 sys
  6.34 real         5.13 user         1.17 sys
  6.35 real         5.14 user         1.17 sys
  6.29 real         5.09 user         1.15 sys
  6.27 real         5.07 user         1.16 sys
  6.32 real         5.13 user         1.15 sys
  6.21 real         5.04 user         1.13 sys
  6.13 real         4.99 user         1.11 sys
  6.08 real         4.93 user         1.12 sys
  6.13 real         4.97 user         1.12 sys
  --------------------------------------------
  6.25 real

There's a small slowdown (~1.9%) which is not unexpected given that we need to do bridging to LLVM.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62570/new/

https://reviews.llvm.org/D62570





More information about the llvm-commits mailing list