/awesome-llvm

A curated list of awesome LLVM related docs, tools, and other resources.

Primary LanguagePython

Awesome LLVM Awesome

This README contains bare resources for LLVM-relevant techniques; for Clang-specific resources, please check Clang.md in this repo. Only well-maintained projects/websites/docs are included; PRs are welcome.

Starchart

Star History Chart

Documentation (reference)

Official Websites

Unofficial Websites

Tutorials

Publications

Official Tools/Libraries (reference)

  • Core Utilities
    • opt - LLVM optimizer, for LLVM analysis and transformation passes, works on .ll or .bc files
    • lli - Directly execute/intepreter programs from LLVM bitcode, running on .ll or .bc files
    • llvm-dis - LLVM disassembler, from .bc to .ll
    • llvm-as - LLVM assembler, from .ll to .bc
    • llvm-link - LLVM bitcode linker, merge multiple .bcs/.lls into one
    • llvm-dwarfdump - Print contents of DWARF sections, llvm-dwarfdump -a main.o
    • llvm-config - Print LLVM compilation options, e.g., llvm-config --includedir
    • llvm-extract - Extract functions from an LLVM module
    • llvm-bcanalyzer - LLVM bitcode analyzer, llvm-bcanalyzer main.bc
    • llvm-objdump - LLVM's objdump, llvm-objdump -a main.o
    • llvm-nm - LLVM's nm
    • llvm-readelf - LLVM's readelf, llvm-readelf -a main.o
    • llvm-readobj - LLVM object reader, llvm-readobj --all main.o
    • llvm-diff - LLVM structural "diff"
    • llc - LLVM static compiler, compile LLVM IR to native assembly, llc main.ll -o main.s
    • llvm-ar(llvm-ranlib) - LLVM archiver
    • lit - LLVM Integrated Tester, for testing purpose during development
  • libc++ - LLVM's implementation of C++ standard library
  • Compiler-RT - runtime libraries, including sanitizers, profiling utilities, etc
  • MLIR - Multi-Level Intermediate Representation
  • libfuzzer - a library for coverage-guided fuzz testing
  • LLDB - The LLDB Debugger
  • LLVM's libunwind - an implementation of the interface defined by the HP libunwind project
  • Polly - LLVM Framework for High-Level Loop and Data-Locality Optimizations
  • OpenMP in LLVM
  • OpenCL C in LLVM - open source, BSD/MIT dual licensed implementation of the library requirements of the OpenCL C programming language
  • BOLT - a post-link optimizer developed to speed up large applications
  • llvm/Torch-LLVM - first class support from the PyTorch ecosystem to the MLIR ecosystem
  • llvm/Polygeist - C/C++ frontend for MLIR

Unofficial Tools/Libraries (reference)

  • SVF-tools - Pointer Analysis and Program Dependence Analysis for C and C++ Programs
  • smack - SMACK Software Verifier and Verification Toolchain
  • Phasar - A LLVM-based static analysis framework
  • Infer - Facebook's static analysis framework; C/C++/objc is based on LLVM/Clang
  • mstorsjo/llvm-mingw - An LLVM/Clang/LLD based mingw-w64 toolchain
  • microsoft/llvm-mctoll - statically (AOT) translates (or raises) binaries to LLVM IR
  • mcsema - An x86 to LLVM IR decompiler
  • whole-program-llvm - A wrapper script to build whole-program LLVM bitcode files; its go port gllvm
  • ollvm - code obfuscation based on LLVM4.0
  • 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
  • DWGrep - A tool for querying Dwarf (debuginfo) graphs
  • Emscripten - An LLVM-to-JavaScript Compiler
  • cling - The cling C++ interpreter
  • remill - Library for lifting machine code to LLVM bitcode
  • llvm2cpg - LLVM meets Code Property Graphs
  • QBDI - A Dynamic Binary Instrumentation framework based on LLVM
  • circt - Circuit IR Compilers and Tools
  • American fuzzy lop (AFL) - LLVM mode for instrumentation
  • klee - Symbolic Virtual Machine
  • IKOS - Static analyzer for C/C++ based on the theory of Abstract Interpretation.
  • diffkemp - Static analysis of semantic differences in kernel versionsa
  • GaloisInc/yapall - A precise and scalable pointer analysis for LLVM, written in Ascent
  • SCRT/avcleaner - C/C++ source obfuscator for antivirus bypass
  • llvm2c - Decompiler of LLVM bitcode to C
  • dr checker - A Soundy Vulnerability Detection Tool for Linux Kernel Drivers
  • DG - Various program analyses, construction of dependence graphs and program slicing of LLVM bitcode
    • dg can integrate SVF, see here for details
  • llvm-crash-analyzer -- crash analysis against coredump files based on LLVM Machine-IR, together with LLDB

Bindings

LLVM-backed Languages

Setup

Other relevant resources: