[LLVMdev] Is there a guide to LLVM's components?

David Piepgrass dpiepgrass at mentoreng.com
Thu Jul 22 10:22:04 PDT 2010


One thing that helps me understand complex software is a dependency graph. I found an LLVM dependency graph at

https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_16/docs/UsingLibraries.html#dependencies

but it's really messy and hard to follow. From that graph I made a cleaner graph by hand (attached)... sorry about the fax-quality scan. But I have some questions about it...


-          How old is this graph?

-          Is anything missing? (e.g. only SPARC stuff is present, I guess x86 et al would have similar dependencies?)

-          The web page says "Where a library has both archive and object forms, only the archive form is shown." Are "archive library" and "object library" the names Unix uses for dynamic link libraries and static libraries? What difference does it make to the dependency graph whether a library is "archive" or "object"?

From: David Piepgrass
Sent: Wednesday, July 21, 2010 4:16 PM
To: 'llvmdev at cs.uiuc.edu'
Subject: Is there a guide to LLVM's components?

I constructed an LLVM 2.7 VS solution with cmake, but it has 66 projects:

                ALL_BUILD, ".\ALL_BUILD.vcproj"
                BrainF, "examples\BrainF\BrainF.vcproj"
                Fibonacci, "examples\Fibonacci\Fibonacci.vcproj"
                FileCheck, "utils\FileCheck\FileCheck.vcproj"
                HowToUseJIT, "examples\HowToUseJIT\HowToUseJIT.vcproj"
                INSTALL, ".\INSTALL.vcproj"
                Kaleidoscope-Ch2, "examples\Kaleidoscope\Chapter2\Kaleidoscope-Ch2.vcproj"
                Kaleidoscope-Ch3, "examples\Kaleidoscope\Chapter3\Kaleidoscope-Ch3.vcproj"
                Kaleidoscope-Ch4, "examples\Kaleidoscope\Chapter4\Kaleidoscope-Ch4.vcproj"
                Kaleidoscope-Ch5, "examples\Kaleidoscope\Chapter5\Kaleidoscope-Ch5.vcproj"
                Kaleidoscope-Ch6, "examples\Kaleidoscope\Chapter6\Kaleidoscope-Ch6.vcproj"
                Kaleidoscope-Ch7, "examples\Kaleidoscope\Chapter7\Kaleidoscope-Ch7.vcproj"
                LLVMAnalysis, "lib\Analysis\LLVMAnalysis.vcproj"
                LLVMArchive, "lib\Archive\LLVMArchive.vcproj"
                LLVMAsmParser, "lib\AsmParser\LLVMAsmParser.vcproj"
                LLVMAsmPrinter, "lib\CodeGen\AsmPrinter\LLVMAsmPrinter.vcproj"
                LLVMBitReader, "lib\Bitcode\Reader\LLVMBitReader.vcproj"
                LLVMBitWriter, "lib\Bitcode\Writer\LLVMBitWriter.vcproj"
                LLVMCodeGen, "lib\CodeGen\LLVMCodeGen.vcproj"
                LLVMCore, "lib\VMCore\LLVMCore.vcproj"
                LLVMExecutionEngine, "lib\ExecutionEngine\LLVMExecutionEngine.vcproj"
                LLVMInstCombine, "lib\Transforms\InstCombine\LLVMInstCombine.vcproj"
                LLVMInstrumentation, "lib\Transforms\Instrumentation\LLVMInstrumentation.vcproj"
                LLVMInterpreter, "lib\ExecutionEngine\Interpreter\LLVMInterpreter.vcproj"
                LLVMJIT, "lib\ExecutionEngine\JIT\LLVMJIT.vcproj"
                LLVMLinker, "lib\Linker\LLVMLinker.vcproj"
                LLVMMC, "lib\MC\LLVMMC.vcproj"
                LLVMMCParser, "lib\MC\MCParser\LLVMMCParser.vcproj"
                LLVMScalarOpts, "lib\Transforms\Scalar\LLVMScalarOpts.vcproj"
                LLVMSelectionDAG, "lib\CodeGen\SelectionDAG\LLVMSelectionDAG.vcproj"
                LLVMSupport, "lib\Support\LLVMSupport.vcproj"
                LLVMSystem, "lib\System\LLVMSystem.vcproj"
                LLVMTarget, "lib\Target\LLVMTarget.vcproj"
                LLVMTransformUtils, "lib\Transforms\Utils\LLVMTransformUtils.vcproj"
                LLVMX86AsmParser, "lib\Target\X86\AsmParser\LLVMX86AsmParser.vcproj"
                LLVMX86AsmPrinter, "lib\Target\X86\AsmPrinter\LLVMX86AsmPrinter.vcproj"
                LLVMX86CodeGen, "lib\Target\X86\LLVMX86CodeGen.vcproj"
                LLVMX86Disassembler, "lib\Target\X86\Disassembler\LLVMX86Disassembler.vcproj"
                LLVMX86Info, "lib\Target\X86\TargetInfo\LLVMX86Info.vcproj"
                LLVMipa, "lib\Analysis\IPA\LLVMipa.vcproj"
                LLVMipo, "lib\Transforms\IPO\LLVMipo.vcproj"
                ModuleMaker, "examples\ModuleMaker\ModuleMaker.vcproj"
                X86CodeGenTable_gen, "lib\Target\X86\X86CodeGenTable_gen.vcproj"
                ZERO_CHECK, ".\ZERO_CHECK.vcproj"
                bugpoint, "tools\bugpoint\bugpoint.vcproj"
                check, "test\check.vcproj"
                count, "utils\count\count.vcproj"
                intrinsics_gen, "include\llvm\intrinsics_gen.vcproj"
                llc, "tools\llc\llc.vcproj"
                lli, "tools\lli\lli.vcproj"
                llvm-ar, "tools\llvm-ar\llvm-ar.vcproj"
                llvm-as, "tools\llvm-as\llvm-as.vcproj"
                llvm-bcanalyzer, "tools\llvm-bcanalyzer\llvm-bcanalyzer.vcproj"
                llvm-dis, "tools\llvm-dis\llvm-dis.vcproj"
                llvm-extract, "tools\llvm-extract\llvm-extract.vcproj"
                llvm-ld, "tools\llvm-ld\llvm-ld.vcproj"
                llvm-link, "tools\llvm-link\llvm-link.vcproj"
                llvm-mc, "tools\llvm-mc\llvm-mc.vcproj"
                llvm-nm, "tools\llvm-nm\llvm-nm.vcproj"
                llvm-prof, "tools\llvm-prof\llvm-prof.vcproj"
                llvm-ranlib, "tools\llvm-ranlib\llvm-ranlib.vcproj"
                llvm-stub, "tools\llvm-stub\llvm-stub.vcproj"
                llvm_headers_do_not_build, "include\llvm\llvm_headers_do_not_build.vcproj"
                not, "utils\not\not.vcproj"
                opt, "tools\opt\opt.vcproj"
                tblgen, "utils\TableGen\tblgen.vcproj"

Is there a guide that explains the purpose of each? Obviously the ones in an "example" folder are examples, but what about everything else? Is there a guide to the LLVM components or source code?

If there are no such guides, could someone tell me which parts of LLVM are needed for "minimal" JIT compilation? I would like to create small amounts of IR at run-time, compile them in-memory, and run them. Basically I would like to do as described at http://www.codeproject.com/KB/cpp/runtime_compile.aspx, except that (in order to minimize the code size), I would like to omit most/all optimizations.

Thanks,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100722/9cf5b20a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: LLVMdependencies.png
Type: image/png
Size: 32867 bytes
Desc: LLVMdependencies.png
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100722/9cf5b20a/attachment.png>


More information about the llvm-dev mailing list