SWPrefetching (Software Prefetching)
File: lib/Optimization/Prefetch/, include/Optimization/Prefetch/Prefetch.h
Implements profile-guided software prefetching for indirect memory accesses.
This pass injects llvm.prefetch intrinsics to reduce cache misses.
Features
Profile-guided prefetch distance computation
Supports Sample FDO profiles, user-provided LBR (Last Branch Record) distances, or user-specified LLM distances
Discovers loop-carried induction variables that feed load addresses
Clones dependence chains to compute future addresses before issuing prefetches
Command-line options
-prefetch-distance-provider=profile|lbr|llm|static
-input-file=<filename> # Sample profile (profile mode only)
-dist=<value> # LBR distances (lbr mode, or fallback)
-llm-dist=<value> # LLM-provided distances (llm mode)
Distance providers
The pass can obtain prefetch distances from multiple sources:
profile: Read sample profiles from-input-fileand query call target maps for distance hints.lbr: Use the values passed to-distas prefetch distances.llm: Use values passed to-llm-distas prefetch distances. This is a heuristic mode intended for experimentation.static: Reserved for future static-analysis-driven distance estimation.
Algorithm
The pass:
Loads profile hints (or uses the selected distance provider)
Discovers loop-carried induction variables feeding load addresses
Clones the dependence chain to compute a future address
Issues
llvm.prefetchintrinsics at the computed distance
When to use
Improve cache performance for memory-bound loops
Reduce cache misses for indirect memory accesses
Optimize hot paths identified by profiling