compiler-optimizations-deep
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.
How do I install this agent skill?
npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deepIs this agent skill safe to install?
- Gen Agent Trust Hubpass
No security issues detected. The skill provides educational content and standard command-line examples for compiler optimizations using Clang and LLVM tools.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
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
-O3did 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
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)
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)
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 detailskills/compiler-internals/llvm-ir-and-passes— IR-level optsskills/compiler-internals/code-generation-and-backends— ISel and backendsskills/computer-architecture/cpu-pipelines-and-hazards— scheduling contextskills/low-level-programming/simd-intrinsics— manual vectorization
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/mohitmishra786/low-level-dev-skills/compiler-optimizations-deep">View compiler-optimizations-deep on skillZs</a>