compiler-optimizations-deep — Claude Code skill: how to install
Explains vectorization failures, register spills, and profiling pipelines with PGO or BOLT when default -O3 flags fail to optimize critical C and C++ loops.
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a claude-codeWhat compiler-optimizations-deep does
This skill covers compiler internals beyond static flags. It walks through LLVM IR and GCC GIMPLE stages: loop-invariant code motion (LICM), instruction selection, and greedy register allocation. When loops fail to vectorize, it helps analyze diagnostic output from Clang flag -Rpass-missed=loop-vectorize to spot aliasing or unknown trip counts.
The guide provides step-by-step commands for Clang profile-guided optimization and post-link optimization using BOLT. Running BOLT requires passing -Wl,--emit-relocs during linking and keeping binary symbols intact. A stripped binary will crash.
What it helps with
- diagnose loop vectorization misses using Clang optimization remarks
- shorten variable live ranges to avoid costly register stack spills
- configure profile-guided optimization pipelines using llvm-profdata
- reorder machine code blocks with LLVM BOLT after linking
Example prompts for the agent
- /compiler-optimizations-deep Why did LLVM fail to vectorize this reduction loop?
- /compiler-optimizations-deep How can I reduce register spills in this inner loop?
- /compiler-optimizations-deep Show the compilation commands for PGO and BOLT in Clang
How to install compiler-optimizations-deep
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a claude-code2Manually: put the files in place
~/.claude/skills/compiler-optimizations-deep/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/compiler-optimizations-deep/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a codex2Manually: put the files in place
.agents/skills/compiler-optimizations-deep/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a cursor2Manually: put the files in place
.cursor/skills/compiler-optimizations-deep/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills compiler-optimizations-deep2Manually: put the files in place
.github/skills/compiler-optimizations-deep/SKILL.md1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a gemini-cli2Platform CLI
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/compiler-internals/compiler-optimizations-deepManually: put the files in place
.devin/skills/compiler-optimizations-deep/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about compiler-optimizations-deep
How to install compiler-optimizations-deep in Claude Code?
Run npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a claude-code. The file will be placed in ~/.claude/skills/compiler-optimizations-deep/SKILL.md.
What does compiler-optimizations-deep do?
It guides agents through lower-level compiler decisions, explaining register allocation, instruction scheduling, and reasons why -O3 missed a vectorization pass.
What is required to use BOLT with this skill?
Link the target binary with -Wl,--emit-relocs and preserve all binary symbols, otherwise BOLT cannot inspect relocations and will fail.
Source text
SKILL.md · MIT
--- name: compiler-optimizations-deep description: Deep compiler optimizations skill for RA, ISel, and PGO. Use when explaining register allocation, instruction selection, LICM, vectorization limits, or profile-guided optimization beyond -O3. Activates on queries about register allocation, instruction selection, LICM, auto-vectorization failure, PGO, or BOLT. --- # Compiler Optimizations (Deep) ## Purpose Explain optimization phases beyond flags: mid-level IR opts, register allocation, instruction selection/scheduling, vectorization boundaries, PGO, and post-link BOLT — bridging `skills/compilers/pgo` and LLVM/GCC internals. ## When to Use - `-O3` did not vectorize a hot loop - Teaching why register pressure causes spills - Planning PGO or BOLT deployment - Understanding pass interaction (e.g., LICM before vectorize) ## Workflow ### 1. Compiler pipeline map ``` Frontend → LLVM IR / GCC GIMPLE ├── Mid-level: DCE, GVN, LICM, inlining ├── Loop opts: unroll, vectorize ├── Codegen prep: legalize types ├── Instruction selection (DAG → machine ops) ├── Register allocation (greedy, linear scan) └── Peephole / scheduling ``` ### 2. Vectorization failure triage ```bash clang -O3 -Rpass=loop-vectorize -Rpass-missed=loop-vectorize foo.c ``` | Miss reason | Typical fix | |-------------|-------------| | Unknown trip count | peel loop; assert count | | Dependence | reorder / separate accumulators | | Function call in loop | inline or outline | | Alignment unknown | `__builtin_assume_aligned` | ### 3. Register allocation intuition When live ranges exceed physical registers, the allocator **spills** to stack slots — costly loads/stores. Reducing live ranges (splitting variables, rematerialization) helps. GCC/LLVM both use graph coloring variants (LLVM "greedy regalloc"). ### 4. PGO workflow (Clang) ```bash clang -fprofile-instr-generate -O2 -o app foo.c ./app # training workload llvm-profdata merge default.profraw -o default.profdata clang -fprofile-instr-use=default.profdata -O2 -o app_pgo foo.c ``` Improves branch layout, inlining, and vectorization thresholds. See `skills/compilers/pgo` for GCC and BOLT. ### 5. BOLT (post-link) ```bash llvm-bolt -instrument app -o app.inst ./app.inst llvm-bolt -data=perf.fdata -reorder-blocks=+ -o app.bolt app ``` Optimizes layout after linker — needs relocations (`-Wl,--emit-relocs`). ### 6. LICM example Loop-invariant code motion hoists `x * scale` out of inner loop when legal — reduces work per iteration. ### 7. Agent usage ``` /compiler-optimizations-deep Why did LLVM fail to vectorize this reduction loop? ``` ## Common Problems | Symptom | Cause | Fix | |---------|-------|-----| | PGO no gain | Unrepresentative training | Match production input | | BOLT crash | Stripped binary | Keep symbols + relocs | | Spills in asm | Register pressure | Simplify live ranges | | `-O3` slower | Code bloat / cache | Try `-O2` or PGO | | Different GCC/Clang | Pass ordering differs | Compare IR + asm | ## Related Skills - `skills/compilers/pgo` — PGO and BOLT detail - `skills/compiler-internals/llvm-ir-and-passes` — IR-level opts - `skills/compiler-internals/code-generation-and-backends` — ISel and backends - `skills/computer-architecture/cpu-pipelines-and-hazards` — scheduling context - `skills/low-level-programming/simd-intrinsics` — manual vectorization
© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills