LLVM overview 20110122

Embed Size (px)

Citation preview

LLVM

URL:Outline1.2.3.4.5. BitCode

mail:[email protected]:nothingcosmos

LLVM wiki http://nothingcosmos.wiki.fc2.com/

LLVM

Outline1.2.3.4.5. BitCode

LLVM

JVMGCC

Better GNU GCC

COINS

50%Apple

LLVM

UIUC BSD-Style LicenseFreeBSDGNU)

2.82.92011043.02011

verBitcodeAPI

Clang

C/C++/Obj-C/Obj-C++LLVMC

Clang-2.8C++2003LLVM/Clang/CMake/Boost/Qtclang-2.9C++0x

ClangWEB

LLVM

Outline1.2.3.4.5. BitCode

COINS

LLVM

GCC

GCC 4.6C/C++/Obj-C/Fortran/Java/Ada...x86/ARM/MIPS/PowerPC/...tool(ld as)

LLVM 2.8C/C++/Obj-C()gccc/c++/PTX

BSD-Style License/JIT/Interpreter

GCC

GCC 4.6C/C++/Obj-C/Fortran/Java/Ada...x86/ARM/MIPS/PowerPC/...tool(ld as)

LLVM 2.8C/C++/Obj-C()gccc/c++/PTX

BSD-Style License/JIT/Interpreter

LLVMLLVM

GCC()

GCC 4.6gcc-4.0(tree-ssa)gcc-4.1(profile guide optimization)gcc-4.2(vectorize OpenMP)gcc-4.3(IPO)gcc-4.4(Graphite)gcc-4.5(LinkTimeOptimization)gcc-4.6(IPOLTO)

LLVM 2.8SSAPollyPolly

GCC( CoreMark)

Pen4 3.0GHz Ubentu Os O3 fast[kbyte]

GCC( SPEC)

SPECInt2000GCC4.55~10

SPECFP2000GCC4.510~20

LLVMcloningO3GCC

OsGCC

llvm-2.8-fastiic-12-Osllvmiicx86

LLVM

Outline1.2.3.4.5. BitCode

CX86a.outARMa.outXXXa.outC++Obj-CClang

$ clang main.c sub.clibLLVMldas

Clang driverlibClang

Cmain.cx86main.slibClanglibLLVMSourceToBitCodeCsub.cBitCodemain.bcBitCodesub.bc

OptimizerCodeGenerator

(clang)

Cmain.clibClanglexparseCsub.csemanticscodegenBitCodemain.bcBitCodesub.bcASTmain.astASTsub.astIndexerAnalysisCheckerAST

IDE(Eclipse???)(XCode???)

Serialize/Deserialize

(Optimizer)

libLLVMBitCodemain.bcBitCodesub.bcAnalysisTransformsBitCodeparserBitCodeLinkerInterprecedualBitCodemain.opt.bcBitCodesub.opt.bcBitCodemain.lto.bc

AnalysisTransformsBitCodeBitCodewriter

ARM.tdInstrInfoRegisterSubtargetFrameLoweringCallingConv

(CodeGenerator)

libLLVMTransformSDNodeTransformMachineInstrBitCodeparserx86main.s

InstructionSelectionInstructionSchedulerBitCodeAsmEmitterBitCodemain.lto.bcX86.tdInstrInfoRegisterSubtargetFrameLoweringCallingConvMachineTransformsMachineAnalysisMachineInstrRegisterAllocationCodeGen

Cmain.cC++main.cppExecutionEngineInterPreterX86CallbackUtilsTransforms

SDNode


ASTSerialize/DeserializeTree

BitCode(opt)Serialize/DeserializeSSA

BitCode(opt)Serialize/DeserializeSSA

SDNodeSerialize/DeserializeDAG()

MachineInstrSerialize/Deserialize3

define i32 @max(i32 %x, i32 %y) nounwind readnone { %1 = icmp sgt i32 %x, %y %.0 = select i1 %1, i32 %x, i32 %y ret i32 %.0}

Function Live Ins: %R0 in reg%16384, %R1 in reg%16385Function Live Outs: %R0

BB#0: derived from LLVM BB %0 Live Ins: %R0 %R1 CMPrr %R0, %R1, pred:14, pred:%reg0, %CPSR %R1 = MOVCCr %R1, %R0, pred:12, pred:%CPSR %R0 = MOVr %R1, pred:14, pred:%reg0, opt:%reg0 BX_RET pred:14, pred:%reg0, %R0

Function Live Ins: %R0 in reg%16384, %R1 in reg%16385Function Live Outs: %R0

BB#0: derived from LLVM BB %0 Live Ins: %R0 %R1 %reg16385 = COPY %R1; GPR:%reg16385 %reg16384 = COPY %R0; GPR:%reg16384 CMPrr %reg16384, %reg16385, pred:14, pred:%reg0, %CPSR; ;GPR:%reg16384,16385 %reg16386 = MOVCCr %reg16385, %reg16384, pred:12, pred:%CPSR;;GPR:%reg16386,16385,16384 %R0 = COPY %reg16386; GPR:%reg16386 BX_RET pred:14, pred:%reg0

define i32 @max(i32 %x, i32 %y) nounwind { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i32, align 4 store i32 %x, i32* %2, align 4 store i32 %y, i32* %3, align 4 %4 = load i32* %2, align 4 %5 = load i32* %3, align 4 %6 = icmp sgt i32 %4, %5 br i1 %6, label %7, label %9

; :7 ; preds = %0 %8 = load i32* %2, align 4 store i32 %8, i32* %1 br label %11

; :9 ; preds = %0 %10 = load i32* %3, align 4 store i32 %10, i32* %1 br label %11

; :11 ; preds = %9, %7 %12 = load i32* %1 ret i32 %12}

LLVM

Outline1.2.3.4.5. BitCode

libClangLibLLVMOptimizerArch.td

C/C++/Obj-ClibLLVMCodeGeneratorASTBitCode

BitCode

xxx.s

libClangLibLLVMOptimizerArch.td

C/C++/Obj-CLibLLVMCodeGeneratorASTBitCode

BitCode

xxx.s

BitCode

IDEBitCodeBitCode-to-xxx-to-BitCode

C/C++/Obj-CEDGcosy

libClangLibLLVMOptimizerArch.td

C/C++/Obj-CLibLLVMCodeGeneratorASTBitCode

BitCode

xxx.sFPGAGPGPU

Haskell-toClay-toCrack-toOpenCLtoEDG-to

To-JavaScriptTo-ByteCodeTo-CLITo-PTX

StrengthReductionProfile-gen/useAliasAnalysisregaloc=Pazzle|GraphObjectCodeEmitterXcode Eclipse

OpenCLPolly

LLVM

Outline1.2.3.4.5. BitCode

BitCode

BitCode

MetadataInstruction

)

)LLVMpragma

BitCode()

ModuleFunctionBasicBlockInstructionMetadataMDNodeFunctionBasicBlockBasicBlockBasicBlockInstructionInstructionInstructionInstructionInstruction

BitCode
Metadata

%call = call i32 (...)* @max(i32* %tmp4, i32* %tmp5), !dbg !22, !tbaa !25, !message !30

!1 = metadata !{i32 524329, metadata !"test001.c", metadata !"/home/elise/language/llvm/work/metadata", metadata !2}!22 = metadata !{i32 8, i32 5, metadata !23, null}!23 = metadata !{i32 524299, metadata !24, i32 7, i32 23, metadata !1, i32 2}!25 = metadata !{metadata !"int", metadata !26}!26 = metadata !{metadata !"an example type tree"}!30 = metadata !{metadata !"readonly,restrict,"}

llvm-as/llvm-dis/opt

BitCode

libClangLibLLVMOptimizer

C/C++/Obj-ClibLLVMCodeGeneratorBitCode

BitCode

xxx.s

dwarfTypeBaseAliasAnalysisMetadataTBAAMetadataDbgDwarfWriterMetadataTBAAMetadataDbg/

BitCode

libClangLibLLVMOptimizer

C/C++/Obj-ClibLLVMCodeGeneratorBitCode

BitCode

xxx.s

dwarfTypeBaseAliasAnalysisMetadataTBAAMetadataDbgDwarfWriterMetadataTBAAMetadataDbg/llvm-2.7

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso

CoreMarksize[kbyte]

clang-2.8 Os560017.4

clang-2.6 O3560021.5

clang-2.8 fast616520.2

gcc-4.4.3 Os534017.1

gcc-4.4.3 O3678025.3

gcc-4.4.3 fast698025.3

icc-12 Os628029.3

icc-12 O3864038.8

icc-12 fast8770611.7