awesome-llvm
Tools
Shell
Useful resources and samples for using LLVM-related techniques and tools; for Clang-specific resources, please see awesome-clang.
REF)
Documentation (- LLVM Language Reference Manual
- LLVM Programmer’s Manual
- LLVM Coding Standards
- LLVM Style RTTI
- Writing an LLVM Pass
- LLVM Alias Analysis Infrastructure
- Source Level Debugging
- Create A Project
- LLVM Developer Policy
- CommandLine 2.0 Library Manual
- Getting Started with the LLVM System
- LLVM Tutorials
- Python Version of the LLVM Tutorial
- LLVM’s Analysis and Transform Passes
- FAQ
- LLVM Testing Infrastructure Guide
- The Often Misunderstood GEP Instruction
- Exception Handling in LLVM
- LLVM Bitcode File Format
- Writing an LLVM Backend
- Sanitizers – AddressSanitizer, MemorySanitizer, ThreadSanitizer, UndefinedBehaviorSanitizer, LeakSanitizer, etc
Official Pages
- http://llvm.org/, and its doxygen docs
- http://blog.llvm.org/
- http://llvm.org/devmtg/
- Mailing List: llvm-dev(nabble forum page)
- Mailing List: llvm-weekly
Other Pages
- The Architecture of Open Source Applications – LLVM
- ELLCC – Online LLVM Demo Page
- Eli Bendersky’s website
- ChenWj’s LLVM Wiki(Traditional Chinese)
- An Unofficial LLVM Website
- LLVM @ StackOverflow
- LLVM @ reddit
- Papers
R1, R2)
Official Tools (- opt – LLVM optimizer
- lit – LLVM Integrated Tester
- lli – Directly execute programs from LLVM bitcode
- llvm-dis – LLVM disassembler
- llvm-as – LLVM assembler
- llvm-link – LLVM bitcode linker
- llvm-ld(<=2.9) – LLVM linker
- llvm-dwarfdump – Print contents of DWARF sections
- llvm-config – Print LLVM compilation options
- llvm-extract – Extract functions from an LLVM module
- llvm-bcanalyzer – LLVM bitcode analyzer
- llvm-objdump – LLVM objdump
- llvm-nm – LLVM nm
- llvm-readobj – LLVM object reader
- llvm-diff – LLVM structural “diff”
- llc – LLVM static compiler
- llvm-ar(llvm-ranlib) – LLVM archiver
- DragonEgg – Using LLVM as a GCC backend
- Polly – LLVM Framework for High-Level Loop and Data-Locality Optimizations
- LLDB – The LLDB Debugger
- libfuzzer – a library for coverage-guided fuzz testing
Unofficial Tools/Framework
- American fuzzy lop (AFL) – LLVM mode for instrumentation
- SVF-tools – Pointer Analysis and Program Dependence Analysis for C and C++ Programs
- Infer – Facebook’s static analysis framework; C/C++/objc is based on LLVM/Clang
- wllvm – A wrapper script to build whole-program LLVM bitcode files; its go port gllvm
- klee – Symbolic Virtual Machine
- S2E – Selective Symbolic Execution (use KLEE as symbolic executor)
- RetDec – a retargetable machine-code decompiler based on LLVM
- capstone – Disassembler based on the MC component of the LLVM compiler infrastructure
- slicer – Schedule Specialization Framework
- LLBMC – The Low-Level Bounded Model Checker
- whole-program-llvm – A wrapper script to build whole-program LLVM bitcode files
- DWGrep – A tool for querying Dwarf (debuginfo) graphs
- Emscripten – An LLVM-to-JavaScript Compiler
- mcsema – An x86 to LLVM IR decompiler
- stack – A static checker for identifying unstable code
- andersen – Andersen’s inclusion-based pointer analysis re-implementation in LLVM
- NeonGoby – Alias Analysis Checker
- lsif-clangd – Language Server Indexing Format (LSIF) generator for C, C++ and Objective C
Books
- Learn LLVM 12
- Getting Started with LLVM Core Libraries, also available on ACM library
- LLVM Cookbook
- LLVM Essentials
- LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries
- LLVM compiler combat tutorial(Chinese Edition)
- Engineering LLVM Backend
Tutorials
- https://github.com/banach-space/llvm-tutor
- Get Started with the LLVM C API
Installation
- LLVM Debian/Ubuntu nightly packages
- Mac OS Homebrew Formula
LLVM backed Languages
- C/C++/ObjC/ObjC++
- Swift
- GHC Haskell
- Rust
- Julia
- go-llvm
- scala-native
- ldc
- Crystal
Bindings
- llvmlite – A lightweight LLVM python binding for writing JIT compilers
- LLVM Rust crates