Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
llvm-native
A clean-room, forensic-parity, black-box reimplementation of the LLVM project — in native Rust.
Every single surface — every file, every pass, every backend, every tool, every target — reconstructed through behavioral oracle comparison against pinned LLVM 22.1.6 binaries. Zero LLVM C++ source code consulted. Zero shortcuts. Zero deferrals.
Status
| Phase | Advanced — Golden path (Clang→X86) complete. cargo build clean, 0 errors. |
| Total lines of Rust | 2,531,736 across 15 development sessions |
| Oracle | LLVM 22.1.6 (84 binaries, SHA-256 pinned) |
| Target backends | 19+ (X86, ARM/AArch64, RISC-V, MIPS, PowerPC, SystemZ, Sparc, BPF, AVR, Hexagon, MSP430, XCore, NVPTX, AMDGPU, Lanai, WebAssembly, ARC, CSKY, Xtensa) — all with X86 bridge modules |
| Clang | 174 files — full C/C++ frontend |
| X86 Backend | 131 files — 717+ opcodes, full ISA coverage |
| Optimization passes | 80+ (GVN, LICM, SCEV, Inline, Vectorize, LoopUnroll, SCCP, InstCombine, SimplifyCFG, DCE, Mem2Reg, JumpThreading, etc.) |
| Golden path | ✅ Clang→X86 compilation pipeline: C/C++ → IR → Optimize → ISel → RA → Encode → Object |
| Tests | 7,901+ passing across workspace |
| Build | cargo build passes with 0 errors. Golden path receipt sealed: return 42. |
| Clean-room scan | 0 LLVM contamination |
Why llvm-native
- Forensic parity, not folklore. Each surface is a court: a bounded claim of behavioral equivalence, decided by running the same fixture through both the LLVM oracle and
llvm-nativeand comparing observable behavior. A court that passes is sealed. - Zero LLVM contamination. LLVM is Apache 2.0 with LLVM Exceptions;
llvm-nativeisMIT OR Apache-2.0and was written clean-room from the black-box oracle, the LLVM Language Reference, LLVM documentation, and published specifications — NEVER from LLVM's C++ source. A committed clean-room scan keeps it that way. - A real engine, not a wrapper. The entire IR infrastructure, bitcode reader/writer, assembler/disassembler, all analysis passes, full code generation pipeline, MC layer, all 19+ target backends (each with X86 bridge modules), linker, LTO, JIT, debug info (DWARF5 + PDB), Clang frontend (174 files), LLDB, LLD, MLIR, and runtime libraries — all native Rust. 2.51M lines across 14 sessions.
- Safe, embeddable. A pure Rust workspace.
std+serdeonly. No C/C++ dependencies.
Architecture
| Crate | Version | Purpose |
|---|---|---|
llvm-native-core |
0.1.14 | The semantic engine: IR, bitcode, MC, Analysis, CodeGen, 19+ Target backends (all with X86 bridges), Linker, LTO, JIT, Debug Info, Clang (174 files), LLDB, MLIR, BOLT, Polly, OpenMP, Sanitizers, Fuzzer, XRay, TableGen |
llvm-native-cli |
0.1.0 | CLI frontends: drop-in llc, opt, llvm-as, llvm-dis, and more |
llvm-native-core-ext |
0.1.0 | Extended modules: analysis passes, transforms, codegen extras, bitcode, linker, JIT |
llvm-oracle-rs |
0.1.0 | Oracle admission: locate, fingerprint, and query pinned LLVM binaries |
llvm-casefile-rs |
0.1.0 | Receipt and claim-ladder schema for forensic parity courts |
Dependencies: ONLY std + serde, serde_json, sha2 — no external crates beyond workspace deps.
Module Map
| Section | Modules | Status |
|---|---|---|
| Core IR | attributes, basic_block, constants, context, debug_info, function, instruction, ir_builder, metadata, module, opcode, types, user, value, verifier | ✅ Deep X86 integration |
| IR Serialization | asm_parser, asm_writer, bitcode_reader, bitcode_writer, bitstream | ✅ Deep X86 integration |
| Target Infrastructure | data_layout, target_info, target_machine, triple | ✅ Full X86 target model |
| MC Layer | llvm_mca, mc_assembler, mc_disassembler, mc_inst, mc_streamer, mc_target, objdump, object_writer | ✅ X86 MC encoding complete |
| ELF/Object | elf/, object_emitter, object_file | ✅ X86 ELF emission |
| Analysis | 40+ passes: alias_analysis, analysis, gvn, licm, scalar_evolution, loop_access_analysis, memory_ssa, etc. | ✅ X86-tuned analyses |
| Target Backends | X86 (131 files, 717+ opcodes), ARM (16.7K), RISC-V (11.7K), MIPS, PowerPC, SystemZ, Sparc, BPF, AVR, Hexagon, MSP430, XCore, NVPTX, AMDGPU, Lanai, WebAssembly, ARC, CSKY, Xtensa | ✅ All 19+ with X86 bridge modules |
| CodeGen | branch_folding, codegen, if_conversion, machine_block_placement, machine_cse, machine_licm, machine_pipeliner, machine_scheduler, machine_verifier, register_coalescing, selection_dag/, tail_duplication | ✅ Deep X86 ISel + RA |
| Support | support/ (ADT: APInt, APFloat, SmallVector, DenseMap, StringRef, etc.), command_line, diagnostics, dwarf/, pdb/, exception_handling, pgo, profile_data/, remarks | ✅ X86-aware support layer |
| Linker/LTO | linker, lld/, lto, lto_merge, lto_thin, linker_map | ✅ X86 LTO pipeline |
| Runtime | compiler_rt/ (builtins, sanitizers, PGO runtime), libunwind/, libfuzzer/, xray/, sanitize, dfsan, hwasan, lsan, sanitizer_coverage | ✅ X86 runtime support |
| JIT | jit_engine, orc_jit, orc_concurrent, ir_interpreter | ✅ X86 JIT code emission |
| Frontend | clang/ (174 files: C + C++ frontend, lexer, parser, AST, sema, codegen, driver, static analyzer, tools) | ✅ Clang→X86 golden path — unit tests pass. Corpus test (LLVM.ORIGINAL.C.SYMBOLS.1) NOT YET ATTEMPTED. |
| Debugger | lldb/ (target, breakpoint, interpreter, expression eval, GDB RSP server) | ✅ X86 debugging support |
| Advanced | mlir/ (5 dialects), polly/, bolt/, openmp/, tablegen/ | ✅ X86-aware advanced tooling |
| Developer Tools | llvm_intrinsics, llvm_objcopy, llvm_diff, llvm_extract, llvm_reduce, llvm_cxxfilt, llvm_split, llvm_stress, tools/ | ✅ X86-targeted tools |
| Security | security/ (CFI, SafeStack), sanitizers (ASan, TSan, MSan, HWASan, LSAN, DFSan, UBSan), static_analyzer/ | ✅ X86 sanitizer runtimes |
| Loop Opts | guard_widening, irce, loop_access_info, loop_distribution, loop_fusion, loop_interchange, loop_load_elim, loop_predication, loop_reroll, loop_versioning, simple_loop_unswitch | ✅ X86-tuned loop transforms |
| GlobalISel | global_isel/ (MachineIR builder, legalizer, combiner) | ✅ X86 GlobalISel pipeline |
Golden Path: Clang→X86
The project's centerpiece is the complete Clang-to-X86 compilation pipeline:
C/C++ Source → Clang Frontend (174 files) → LLVM IR
→ Optimization Pipeline (80+ passes) → X86 SelectionDAG/GlobalISel
→ Register Allocation → X86 MC Encoding (131 files)
→ Object File Emission
All 19+ target backends include X86 bridge modules for cross-target interoperability and lowering. Every major subsystem — CodeGen, MLIR, LLDB, LLD, runtime libraries — has deep X86 integration.
Surface Taxonomy — 28 Courts
| Court | Surface | Status |
|---|---|---|
| LLVM.ORACLE.1 | Oracle Admission | ✅ 84 LLVM 22.1.6 binaries admitted, SHA-256 pinned |
| LLVM.SUPPORT.1 | Support Library | ✅ 15K+ lines: APInt, APFloat, DenseMap, SmallVector, etc. |
| LLVM.IR.1 | Core IR Types | ✅ 4K+ lines: Type, Value, User, Instruction, BasicBlock, Function, Module |
| LLVM.IR.2 | Constants & Metadata | ✅ 3K+ lines: Constant, MDNode, DebugInfo |
| LLVM.IR.3 | IRBuilder & Verifier | ✅ 2.5K verifier, 1.3K IRBuilder |
| LLVM.BITCODE.WRITER.1 | Bitcode Writer | ✅ 1.4K lines |
| LLVM.BITCODE.READER.1 | Bitcode Reader | ✅ 2.3K lines |
| LLVM.ASM.PARSER.1 | Assembly Parser | ✅ 2.9K lines |
| LLVM.ASM.WRITER.1 | Assembly Writer | ✅ 1.7K lines |
| LLVM.MC.1 | MC Layer | ✅ 8K+ lines |
| LLVM.MC.DIS.1 | Disassembler | ✅ 2.8K lines |
| LLVM.OBJECT.1 | Object Files | ✅ 13K+ lines |
| LLVM.ANALYSIS.1 | Analysis Passes | ✅ SCEV, LVI, LAA, AliasAnalysis, DomTree, LoopInfo, CallGraph |
| LLVM.TRANSFORMS.1 | Transform Passes | ✅ 80+ passes |
| LLVM.PASSES.1 | Pass Manager | ✅ Full O0-O3/Os/Oz pipeline |
| LLVM.CODEGEN.1 | CodeGen Framework | ✅ RegAlloc, FrameLowering, ISel |
| LLVM.CODEGEN.DAG.1 | SelectionDAG | ✅ 10K lines |
| LLVM.TARGET.1 | Target Infrastructure | ✅ DataLayout, TargetInfo, TargetMachine, Triple |
| LLVM.TARGET.X86.1 | X86 Backend | ✅ 25K lines, 717 opcodes |
| LLVM.TARGET.ARM.1 | ARM/AArch64 Backend | ✅ 16.7K lines, 600+ opcodes |
| LLVM.LINKER.1 | IR Linker | ✅ 1.6K lines |
| LLVM.LTO.1 | LTO | ✅ 4.4K lines |
| LLVM.CLI.1 | CLI Harness | ✅ Tool dispatch |
| LLVM.DIAG.1 | Diagnostics | ✅ DiagnosticEngine, severity levels, fix-it hints |
| LLVM.SECURITY.1 | Security | ✅ SafeStack, CFI, 7 sanitizers |
| LLVM.JIT.1 | JIT | ✅ JIT engine + ORC JIT |
| LLVM.DWARF.1 | DWARF | ✅ Full DWARF5: 10K lines |
| LLVM.CLANG.1 | Clang | ✅ C + C++ frontend: 24K lines |
| LLVM.LLDB.1 | LLDB | ✅ 6K lines: GDB RSP, breakpoints, stepping |
| LLVM.LLD.1 | LLD | ✅ 14K lines: ELF/Mach-O/COFF/Wasm |
| LLVM.MLIR.1 | MLIR | ✅ 5.0K lines, 5 dialects |
| LLVM.FUZZER.1 | libFuzzer | ✅ 11 mutators |
| LLVM.POLLY.1 | Polly | ✅ Polyhedral optimizer |
| LLVM.BOLT.1 | BOLT | ✅ Binary optimizer |
| LLVM.OPENMP.1 | OpenMP | ✅ Parallel/loop/simd + GPU offloading |
| LLVM.UNWIND.1 | libunwind | ✅ DWARF CFI + Itanium C++ ABI |
| LLVM.ORIGINAL.C.1 | LLVM Original C Compilation | 🔴 DEMO ONLY — Toy pipeline (NOT real Clang frontend) survives 186 files without panic. 69% produce synthetic stubs. Real frontend test is future work. |
Non-Claims (Permanent)
| ID | Claim | Note |
|---|---|---|
| NC.PERM.1 | Drop-in replacement | Forensic-parity, not byte-exact |
| NC.PERM.2 | Performance parity | Non-goal for clean-room |
| NC.ADMIT.1 | Byte-exact output | Semantic equivalence only |
Methodology
Oracle Courts
- Admit oracle: Pin LLVM 22.1.6, SHA-256 fingerprint all 84 binaries
- Define court: Bounded behavioral surface (e.g., "X86 ADD instruction encoding")
- Run fixtures: Same input → both oracle and llvm-native
- Compare output: Behavioral equivalence (not byte-exact)
- Seal court: Record verdict in signed receipt
Forensic Parity
- Every claim backed by a verifiable receipt
- Receipts contain: timestamp, command run, actual output, hash
- No receipt → claim is VOID
- The ultimate truth is
diff <(llvm-native) <(oracle-llvm)
Clean Room
- Zero LLVM C++ source code consulted — EVER
- All behavior reconstructed from: LLVM Language Reference, LLVM documentation, published specifications, oracle interrogation
- Committed clean-room scan:
cargo xtask cleanroomverifies zero contamination .RULEShard enforcement: receipts required, gate checks mandatory, no stale docs
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option. llvm-native contains no LLVM C++ source and is not an LLVM project; it is an independent clean-room reimplementation of LLVM's behavior.
llvm-native is a clean-room forensic-parity behavioral reconstruction of LLVM in native Rust.