LLVM Dependency Graph

Based on cmake/modules/LLVMLibDeps.cmake, I produced a graphviz dot file and then manually removed components and edges until the graph was small enough to be presentable. I don’t know if I can actually use LLVM due to its humongousness, but I hope the graph will be helpful to others attempting to comprehend LLVM. PNG attached; dot file follows.

digraph G {

ipo [shape=box,style=filled,color=olivedrab1];

ipa [shape=box,style=filled,color=olivedrab1];

X86Info [shape=box,style=filled,color=olivedrab1];

X86Disassembler [shape=box,style=filled,color=olivedrab1];

X86CodeGen [shape=box,style=filled,color=olivedrab1];

X86AsmPrinter [shape=box,style=filled,color=olivedrab1];

X86AsmParser [shape=box,style=filled,color=olivedrab1];

TransformUtils [shape=box,style=filled,color=olivedrab1];

Target [shape=box,style=filled,color=olivedrab1];

System [shape=box,style=filled,color=olivedrab1];

Support [shape=box,style=filled,color=olivedrab1];

SelectionDAG [shape=box,style=filled,color=olivedrab1];

ScalarOpts [shape=box,style=filled,color=olivedrab1];

MCParser [shape=box,style=filled,color=olivedrab1];

MC [shape=box,style=filled,color=olivedrab1];

Linker [shape=box,style=filled,color=olivedrab1];

JIT [shape=box,style=filled,color=olivedrab1];

Interpreter [shape=box,style=filled,color=olivedrab1];

Instrumentation [shape=box,style=filled,color=olivedrab1];

InstCombine [shape=box,style=filled,color=olivedrab1];

ExecutionEngine [shape=box,style=filled,color=olivedrab1];

Core [shape=box,style=filled,color=olivedrab1];

CodeGen [shape=box,style=filled,color=olivedrab1];

BitWriter [shape=box,style=filled,color=olivedrab1];

BitReader [shape=box,style=filled,color=olivedrab1];

AsmPrinter [shape=box,style=filled,color=olivedrab1];

AsmParser [shape=box,style=filled,color=olivedrab1];

Archive [shape=box,style=filled,color=olivedrab1];

Analysis [shape=box,style=filled,color=olivedrab1];

ARMInfo [shape=box,style=filled,color=olivedrab1];

ARMCodeGen [shape=box,style=filled,color=olivedrab1];

ARMAsmPrinter [shape=box,style=filled,color=olivedrab1];

ARMAsmParser [shape=box,style=filled,color=olivedrab1];

subgraph clusterARM { ARMAsmParser; ARMAsmPrinter; ARMInfo; ARMCodeGen; }

subgraph clusterX86 { X86AsmParser; X86AsmPrinter; X86Info; X86CodeGen; }

ARMAsmParser → ARMInfo

ARMAsmParser → MCParser

//ARMAsmParser → Support

ARMAsmPrinter → ARMCodeGen

ARMAsmPrinter → ARMInfo

ARMAsmPrinter → AsmPrinter

ARMAsmPrinter → CodeGen

//ARMAsmPrinter → Core

//ARMAsmPrinter → MC

//ARMAsmPrinter → Support

//ARMAsmPrinter → System

//ARMAsmPrinter → Target

ARMInfo → Support

ARMCodeGen → ARMInfo

ARMCodeGen → CodeGen

//ARMCodeGen → Core

//ARMCodeGen → MC

ARMCodeGen → SelectionDAG

//ARMCodeGen → Support

//ARMCodeGen → System

//ARMCodeGen → Target

//Analysis → Core

//Analysis → Support

//Analysis → System

Analysis → Target

Archive → BitReader

Archive → Core

//Archive → Support

//Archive → System

AsmPrinter → Analysis

AsmPrinter → CodeGen

//AsmPrinter → Core

//AsmPrinter → MC

//AsmPrinter → Support

//AsmPrinter → System

//AsmPrinter → Target

CodeGen → Analysis

//CodeGen → Core

CodeGen → MC

CodeGen → ScalarOpts

//CodeGen → Support

//CodeGen → System

//CodeGen → Target

CodeGen → TransformUtils

//ExecutionEngine → Core

//ExecutionEngine → Support

//ExecutionEngine → System

ExecutionEngine → Target

InstCombine → Analysis

//InstCombine → Core

//InstCombine → Support

//InstCombine → System

//InstCombine → Target

InstCombine → TransformUtils

Instrumentation → Analysis

//Instrumentation → Core

//Instrumentation → Support

//Instrumentation → System

Instrumentation → TransformUtils

Interpreter → CodeGen

//Interpreter → Core

Interpreter → ExecutionEngine

//Interpreter → Support

//Interpreter → System

//Interpreter → Target

JIT → Analysis

JIT → CodeGen

//JIT → Core

JIT → ExecutionEngine

//JIT → MC

//JIT → Support

//JIT → System

//JIT → Target

Linker → Archive

Linker → BitReader

//Linker → Core

//Linker → Support

//Linker → System

ScalarOpts → Analysis

//ScalarOpts → Core

ScalarOpts → InstCombine

//ScalarOpts → Support

//ScalarOpts → System

//ScalarOpts → Target

ScalarOpts → TransformUtils

SelectionDAG → Analysis

SelectionDAG → AsmPrinter

SelectionDAG → CodeGen

//SelectionDAG → Core

//SelectionDAG → Support

//SelectionDAG → System

//SelectionDAG → Target

TransformUtils → Analysis

//TransformUtils → Core

//TransformUtils → Support

//TransformUtils → System

//TransformUtils → Target

TransformUtils → ipa

X86AsmParser → MC

X86AsmParser → MCParser

//X86AsmParser → Support

X86AsmParser → X86Info

X86AsmPrinter → Analysis

X86AsmPrinter → AsmPrinter

X86AsmPrinter → CodeGen

//X86AsmPrinter → Core

//X86AsmPrinter → MC

//X86AsmPrinter → Support

//X86AsmPrinter → System

//X86AsmPrinter → Target

X86AsmPrinter → X86CodeGen

X86AsmPrinter → X86Info

X86CodeGen → CodeGen

//X86CodeGen → Core

//X86CodeGen → MC

X86CodeGen → SelectionDAG

//X86CodeGen → Support

//X86CodeGen → System

//X86CodeGen → Target

X86CodeGen → X86Info

X86Info → Support

X86Disassembler → MC

//X86Disassembler → Support

X86Disassembler → X86Info

ipa → Analysis

//ipa → Core

//ipa → Support

//ipa → System

ipo → Analysis

//ipo → Core

//ipo → Support

//ipo → System

//ipo → Target

ipo → TransformUtils

ipo → ipa

Target → Core

Target → MC

//Target → Support

AsmParser → Core

//AsmParser → Support

BitReader → Core

//BitReader → Support

BitWriter → Core

//BitWriter → Support

//BitWriter → System

Core → Support

Core → System

MCParser → MC

//MCParser → Support

MC → Support

//MC → System

Support → System

/*

XCoreInfo → Support

XCore → CodeGen

XCore → Core

XCore → MC

XCore → SelectionDAG

XCore → Support

XCore → Target

XCore → XCoreInfo

XCoreAsmPrinter → AsmPrinter

XCoreAsmPrinter → CodeGen

XCoreAsmPrinter → Core

XCoreAsmPrinter → MC

XCoreAsmPrinter → Support

XCoreAsmPrinter → System

XCoreAsmPrinter → Target

XCoreAsmPrinter → XCoreInfo

MSP430Info → Support

MSP430AsmPrinter → AsmPrinter

MSP430AsmPrinter → CodeGen

MSP430AsmPrinter → Core

MSP430AsmPrinter → MC

MSP430AsmPrinter → MSP430Info

MSP430AsmPrinter → Support

MSP430AsmPrinter → System

MSP430AsmPrinter → Target

MSP430CodeGen → CodeGen

MSP430CodeGen → Core

MSP430CodeGen → MC

MSP430CodeGen → MSP430Info

MSP430CodeGen → SelectionDAG

MSP430CodeGen → Support

MSP430CodeGen → System

MSP430CodeGen → Target

MipsInfo → Support

MipsAsmPrinter → AsmPrinter

MipsAsmPrinter → CodeGen

MipsAsmPrinter → Core

MipsAsmPrinter → MC

MipsAsmPrinter → MipsCodeGen

MipsAsmPrinter → MipsInfo

MipsAsmPrinter → Support

MipsAsmPrinter → System

MipsAsmPrinter → Target

MipsCodeGen → CodeGen

MipsCodeGen → Core

MipsCodeGen → MC

MipsCodeGen → MipsInfo

MipsCodeGen → SelectionDAG

MipsCodeGen → Support

MipsCodeGen → System

MipsCodeGen → Target

PIC16Info → Support

PIC16 → Analysis

PIC16 → CodeGen

PIC16 → Core

PIC16 → MC

PIC16 → PIC16Info

PIC16 → SelectionDAG

PIC16 → Support

PIC16 → Target

PIC16AsmPrinter → AsmPrinter

PIC16AsmPrinter → CodeGen

PIC16AsmPrinter → Core

PIC16AsmPrinter → MC

PIC16AsmPrinter → PIC16

PIC16AsmPrinter → PIC16Info

PIC16AsmPrinter → Support

PIC16AsmPrinter → Target

PowerPCInfo → Support

PowerPCAsmPrinter → AsmPrinter

PowerPCAsmPrinter → CodeGen

PowerPCAsmPrinter → Core

PowerPCAsmPrinter → MC

PowerPCAsmPrinter → PowerPCInfo

PowerPCAsmPrinter → Support

PowerPCAsmPrinter → System

PowerPCAsmPrinter → Target

PowerPCCodeGen → CodeGen

PowerPCCodeGen → Core

PowerPCCodeGen → MC

PowerPCCodeGen → PowerPCInfo

PowerPCCodeGen → SelectionDAG

PowerPCCodeGen → Support

PowerPCCodeGen → System

PowerPCCodeGen → Target

SystemZInfo → Support

SystemZAsmPrinter → AsmPrinter

SystemZAsmPrinter → CodeGen

SystemZAsmPrinter → Core

SystemZAsmPrinter → MC

SystemZAsmPrinter → Support

SystemZAsmPrinter → System

SystemZAsmPrinter → SystemZInfo

SystemZAsmPrinter → Target

SystemZCodeGen → CodeGen

SystemZCodeGen → Core

SystemZCodeGen → MC

SystemZCodeGen → SelectionDAG

SystemZCodeGen → Support

SystemZCodeGen → SystemZInfo

SystemZCodeGen → Target

MSILInfo → Support

MSIL → Analysis

MSIL → CodeGen

MSIL → Core

MSIL → MSILInfo

MSIL → ScalarOpts

MSIL → Support

MSIL → Target

MSIL → TransformUtils

MSIL → ipa

CppBackendInfo → Support

CppBackend → Core

CppBackend → CppBackendInfo

CppBackend → Support

CppBackend → Target

AlphaInfo → Support

AlphaAsmPrinter → AlphaInfo

AlphaAsmPrinter → AsmPrinter

AlphaAsmPrinter → CodeGen

AlphaAsmPrinter → Core

AlphaAsmPrinter → MC

AlphaAsmPrinter → Support

AlphaAsmPrinter → System

AlphaAsmPrinter → Target

AlphaCodeGen → AlphaInfo

AlphaCodeGen → CodeGen

AlphaCodeGen → Core

AlphaCodeGen → MC

AlphaCodeGen → SelectionDAG

AlphaCodeGen → Support

AlphaCodeGen → System

AlphaCodeGen → Target

SparcInfo → Support

SparcAsmPrinter → AsmPrinter

SparcAsmPrinter → CodeGen

SparcAsmPrinter → Core

SparcAsmPrinter → MC

SparcAsmPrinter → SparcInfo

SparcAsmPrinter → Support

SparcAsmPrinter → System

SparcAsmPrinter → Target

SparcCodeGen → CodeGen

SparcCodeGen → Core

SparcCodeGen → MC

SparcCodeGen → SelectionDAG

SparcCodeGen → SparcInfo

SparcCodeGen → Support

SparcCodeGen → System

SparcCodeGen → Target

BlackfinInfo → Support

BlackfinAsmPrinter → AsmPrinter

BlackfinAsmPrinter → BlackfinInfo

BlackfinAsmPrinter → CodeGen

BlackfinAsmPrinter → Core

BlackfinAsmPrinter → MC

BlackfinAsmPrinter → Support

BlackfinAsmPrinter → System

BlackfinAsmPrinter → Target

BlackfinCodeGen → BlackfinInfo

BlackfinCodeGen → CodeGen

BlackfinCodeGen → Core

BlackfinCodeGen → MC

BlackfinCodeGen → SelectionDAG

BlackfinCodeGen → Support

BlackfinCodeGen → Target

CBackendInfo → Support

CBackend → Analysis

CBackend → CBackendInfo

CBackend → CodeGen

CBackend → Core

CBackend → MC

CBackend → ScalarOpts

CBackend → Support

CBackend → System

CBackend → Target

CBackend → TransformUtils

CBackend → ipa

CellSPUInfo → Support

CellSPUAsmPrinter → AsmPrinter

CellSPUAsmPrinter → CellSPUInfo

CellSPUAsmPrinter → CodeGen

CellSPUAsmPrinter → Core

CellSPUAsmPrinter → MC

CellSPUAsmPrinter → Support

CellSPUAsmPrinter → System

CellSPUAsmPrinter → Target

CellSPUCodeGen → CellSPUInfo

CellSPUCodeGen → CodeGen

CellSPUCodeGen → Core

CellSPUCodeGen → MC

CellSPUCodeGen → SelectionDAG

CellSPUCodeGen → Support

CellSPUCodeGen → Target

*/

}

This is really cool. Do you have a script that produces the .dot file? If so, we could check it in and add a makefile target,

-Chris

Chris Lattner <clattner@apple.com> writes: