If you can't read please download the document
Upload
nothingcosmos
View
5.621
Download
0
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