[LLVMdev] Debug Info Slowing Things Down?!

Manman Ren manman.ren at gmail.com
Mon Nov 18 11:06:13 PST 2013


On Mon, Nov 18, 2013 at 10:55 AM, Eric Christopher <echristo at gmail.com>wrote:

> On Sun, Nov 17, 2013 at 6:35 PM, Manman Ren <manman.ren at gmail.com> wrote:
> > Hi Bill,
> >
> > Thanks for the testing case. Most of the time is spent on debug info
> > verifier.
> > I fixed a bug in r194974, now it takes too long to run debug info
> > verification.
> >
> > Debug info verifier is part of the verifier which is a Function Pass. Tot
> > currently tries to pull all reachable debug info MDNodes in each
> function,
> > which is too time-consuming. The correct fix seems to be separating debug
> > info verification to its own module pass.
> >
> > I will disable the debug info verifier until a correct fix is found.
> >
>
> Most likely what's going on here is that we're verifying the same sets
> of debug info multiple times. A way to quickly speed it up would be to
> cache/memoize the nodes we've already visited.
>

Yes, we are verifying some debug info MDNodes multiple times. I am not sure
if caching MDNodes visited in one function makes sense.
For each function, we apply a series of passes, so there are optimizations
run between verifying one function and verifying another function.
The content of MDNodes verified in one function can potentially change when
we are trying to verify another function.

Manman


>
> -eric
>
> > Thanks,
> > Manman
> >
> >
> >
> > On Sun, Nov 17, 2013 at 6:04 PM, Bill Wendling <isanbard at gmail.com>
> wrote:
> >>
> >> I think it might be. I’m attaching a preprocessed file that can show the
> >> problem. Compile it with ToT.
> >>
> >> $ clang++ -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti
> >> -fno-common -Woverloaded-virtual -Wcast-qual -fno-strict-aliasing -m64
> >> -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings
> >> -Wcovered-switch-default -Wno-uninitialized
>  -Wno-missing-field-initializers
> >> -c LLVMTidyModule.ii
> >>
> >> -bw
> >>
> >>
> >>
> >>
> >> On Nov 17, 2013, at 6:01 PM, Manman Ren <mren at apple.com> wrote:
> >>
> >> > Hi Bill
> >> >
> >> > Is this a recent regression? I recently changed the debug info
> verifier
> >> > to fix a bug.
> >> >
> >> > Thanks,
> >> > Manman
> >> >
> >> >> On Nov 17, 2013, at 5:52 PM, Bill Wendling <isanbard at gmail.com>
> wrote:
> >> >>
> >> >> I think that debug info is slowing a self-hosting build down. This
> >> >> build has been going for ages now and shows no sign of quitting. To
> >> >> reproduce, build a Release+Asserts build of clang. Then use that to
> build a
> >> >> Debug+Asserts version. Include all of the bells and whistles, like
> the
> >> >> clang-extras and compiler-rt libraries.
> >> >>
> >> >> The reason I suspect debug info is because of this stack trace:
> >> >>
> >> >> [morbo:llvm] lldb -p 92084
> >> >> Attaching to process with:
> >> >>   process attach -p 92084
> >> >> Process 92084 stopped
> >> >> Executable module set to
> >> >> "/Users/morbo/llvm/llvm-clean.obj/Release+Asserts/bin/clang".
> >> >> Architecture set to: x86_64-apple-macosx.
> >> >> (lldb) bt
> >> >> * thread #1: tid = 0xbebaf, 0x000000010c5f6dc1
> >> >> clang`llvm::SmallPtrSetImpl::insert_imp(void const*) + 161, queue =
> >> >> 'com.apple.main-thread, stop reason = signal SIGSTOP
> >> >>   frame #0: 0x000000010c5f6dc1
> >> >> clang`llvm::SmallPtrSetImpl::insert_imp(void const*) + 161
> >> >>   frame #1: 0x000000010c5147df
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 47
> >> >>   frame #2: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #3: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #4: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #5: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #6: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #7: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #8: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #9: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #10: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #11: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #12: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #13: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #14: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #15: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #16: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #17: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #18: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #19: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #20: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #21: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #22: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #23: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #24: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #25: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #26: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #27: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #28: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #29: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #30: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #31: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #32: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #33: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #34: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #35: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #36: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #37: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #38: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #39: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #40: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #41: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #42: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #43: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #44: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #45: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #46: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #47: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #48: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #49: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #50: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #51: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #52: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #53: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #54: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #55: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #56: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #57: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #58: 0x000000010c5145f3
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 547
> >> >>   frame #59: 0x000000010c514695
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 709
> >> >>   frame #60: 0x000000010c5148c4
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 276
> >> >>   frame #61: 0x000000010c514701
> >> >> clang`llvm::DebugInfoFinder::processType(llvm::DIType) + 817
> >> >>   frame #62: 0x000000010c5140e2
> >> >> clang`llvm::DebugInfoFinder::processScope(llvm::DIScope) + 50
> >> >>   frame #63: 0x000000010c514895
> >> >> clang`llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram) +
> 229
> >> >>   frame #64: 0x000000010c5141e2
> >> >> clang`llvm::DebugInfoFinder::processScope(llvm::DIScope) + 306
> >> >>   frame #65: 0x000000010c514cdb
> >> >> clang`llvm::DebugInfoFinder::processLocation(llvm::Module const&,
> >> >> llvm::DILocation) + 91
> >> >>   frame #66: 0x000000010c5af3d6 clang`(anonymous
> >> >> namespace)::Verifier::visitInstruction(llvm::Instruction&) + 2278
> >> >>   frame #67: 0x000000010c5b0bc1 clang`(anonymous
> >> >> namespace)::Verifier::VerifyCallSite(llvm::CallSite) + 1489
> >> >>   frame #68: 0x000000010c5af949 clang`(anonymous
> >> >> namespace)::Verifier::visitCallInst(llvm::CallInst&) + 73
> >> >>   frame #69: 0x000000010c5adbea clang`llvm::InstVisitor<(anonymous
> >> >> namespace)::Verifier, void>::visit(llvm::Instruction&) + 10058
> >> >>   frame #70: 0x000000010c5aa56b clang`(anonymous
> >> >> namespace)::Verifier::runOnFunction(llvm::Function&) + 1611
> >> >>   frame #71: 0x000000010c58963b
> >> >> clang`llvm::FPPassManager::runOnFunction(llvm::Function&) + 347
> >> >>   frame #72: 0x000000010c588e4b
> >> >> clang`llvm::legacy::FunctionPassManagerImpl::run(llvm::Function&) +
> 235
> >> >>   frame #73: 0x000000010c588d26
> >> >> clang`llvm::legacy::FunctionPassManager::run(llvm::Function&) + 86
> >> >>   frame #74: 0x000000010ad490f4
> >> >> clang`clang::EmitBackendOutput(clang::DiagnosticsEngine&,
> >> >> clang::CodeGenOptions const&, clang::TargetOptions const&,
> >> >> clang::LangOptions const&, llvm::Module*, clang::BackendAction,
> >> >> llvm::raw_ostream*) + 5492
> >> >>   frame #75: 0x000000010ae47b45
> >> >>
> clang`clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) +
> >> >> 453
> >> >>   frame #76: 0x000000010ae99764 clang`clang::ParseAST(clang::Sema&,
> >> >> bool, bool) + 516
> >> >>   frame #77: 0x000000010ae469da
> >> >> clang`clang::CodeGenAction::ExecuteAction() + 122
> >> >>   frame #78: 0x000000010abf3e66
> clang`clang::FrontendAction::Execute()
> >> >> + 134
> >> >>   frame #79: 0x000000010abcf70d
> >> >> clang`clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
> + 973
> >> >>   frame #80: 0x000000010ab97a44
> >> >> clang`clang::ExecuteCompilerInvocation(clang::CompilerInstance*) +
> 4276
> >> >>   frame #81: 0x000000010ab8f843 clang`cc1_main(char const**, char
> >> >> const**, char const*, void*) + 835
> >> >>   frame #82: 0x000000010ab93d52 clang`main + 1138
> >> >>   frame #83: 0x00007fff910165fd libdyld.dylib`start + 1
> >> >>   frame #84: 0x00007fff910165fd libdyld.dylib`start + 1
> >> >> (lldb)
> >> >>
> >> >> This is the command:
> >> >>
> >> >> morbo           92084 100.0  2.3  2888888 380520 s002  R+    5:47PM
> >> >> 1:10.64 /Users/morbo/llvm/llvm-clean.obj/Release+Asserts/bin/clang
> -cc1
> >> >> -triple x86_64-apple-macosx10.9.0 -emit-obj -mrelax-all -disable-free
> >> >> -main-file-name LLVMTidyModule.cpp -mrelocation-model pic -pic-level
> 2
> >> >> -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables
> >> >> -target-cpu core2 -target-linker-version 136 -gdwarf-2 -coverage-file
> >> >>
> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm/Debug+Asserts/LLVMTidyModule.o
> >> >> -resource-dir
> >> >> /Users/morbo/llvm/llvm-clean.obj/Release+Asserts/bin/../lib/clang/3.4
> >> >> -dependency-file
> >> >>
> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm/Debug+Asserts/LLVMTidyModule.d.tmp
> >> >> -MP -MT
> >> >>
> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm/Debug+Asserts/LLVMTidyModule.o
> >> >> -MT
> >> >>
> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm/Debug+Asserts/LLVMTidyModule.d
> >> >> -D _DEBUG -D _GNU_SOURCE -D __STDC_CONSTANT_MACROS -D __STDC_!
> >> >> FORMAT_MACROS -D __STDC_LIMIT_MACROS -I
> >> >> /Users/morbo/llvm/llvm.obj/include -I
> >> >> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm -I
> >> >> /Users/morbo/llvm/llvm.src/include -I
> >> >> /Users/morbo/llvm/llvm.src/tools/clang/tools/extra/clang-tidy/llvm -I
> >> >>
> /Users/morbo/llvm/llvm.src/tools/clang/tools/extra/clang-tidy/llvm/../../../../include
> >> >> -I
> >> >>
> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm/../../../../include
> >> >> -I /Users/morbo/llvm/llvm-clean.install/lib/c++/v1 -stdlib=libc++
> >> >> -Woverloaded-virtual -Wcast-qual -Wno-long-long -Wall -W
> >> >> -Wno-unused-parameter -Wwrite-strings -Wcovered-switch-default
> >> >> -Wno-uninitialized -Wno-missing-field-initializers -pedantic
> >> >> -fdeprecated-macro -fdebug-compilation-dir
> >> >> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm
> >> >> -ferror-limit 19 -fmessage-length 191 -fvisibility-inlines-hidden
> >> >> -stack-protector 1 -mstackrealign -fblocks -fno-rtti
> >> >> -fobjc-runtime=macosx-10.9.0 -fencode-extended-block-signature
> -fno-common
> >> >> -fdi!
> >> >> agnostics-show-option -fcolor-diagnostics -vectorize-slp -o
> >> >>
> /Users/morbo/llvm/llvm.obj/tools/clang/tools/extra/clang-tidy/llvm/Debug+Asserts/LLVMTidyModule.o
> >> >> -x c++
> >> >>
> /Users/morbo/llvm/llvm.src/tools/clang/tools/extra/clang-tidy/llvm/LLVMTidyModule.cpp
> >> >>
> >> >>
> >> >> -bw
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> LLVM Developers mailing list
> >> >> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >>
> >>
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131118/03771db0/attachment.html>


More information about the llvm-dev mailing list