compiler-optimizations-deep — скилл для Claude Code: как установить
Разбирает причины неудачной автовекторизации, сброса регистров на стек и настраивает профильную оптимизацию PGO или BOLT при сборке проектов на C и C++.
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a claude-codeЧто делает compiler-optimizations-deep
Скилл объясняет этапы работы компилятора глубже стандартных флагов -O2 и -O3. Он сопоставляет стадии LLVM IR и GCC GIMPLE: вынос инвариантов цикла (LICM), инлайнинг, выбор инструкций и жадное распределение регистров. Агент помогает разобрать вывод clang -Rpass-missed=loop-vectorize, когда цикл не векторизуется из-за неизвестного числа итераций или невыровненных указателей.
Для двухэтапной сборки скилл даёт последовательность команд сбора профиля через llvm-profdata и оптимизации бинарника утилитой BOLT после линковки. Для работы BOLT бинарный файл нельзя очищать от отладочных символов, а линкер обязан сохранить релокации с помощью флага -Wl,--emit-relocs. Без этого утилита завершится аварийно.
Какие задачи решает
- разобрать диагностику Clang при срыве автовекторизации цикла
- снизить регистровое давление и убрать лишние сбросы переменных на стек
- настроить двухэтапную сборку с профильной оптимизацией Clang PGO
- оптимизировать размещение кода в бинарнике утилитой BOLT
Примеры запросов агенту
- /compiler-optimizations-deep Почему LLVM не может векторизовать цикл редукции в
foo.c? - /compiler-optimizations-deep Как уменьшить spilling регистров в горячей функции?
- /compiler-optimizations-deep Настрой шаги компиляции PGO и BOLT для Clang
Как установить compiler-optimizations-deep
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a claude-code2Вручную: положить файлы
~/.claude/skills/compiler-optimizations-deep/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/compiler-optimizations-deep/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a codex2Вручную: положить файлы
.agents/skills/compiler-optimizations-deep/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a cursor2Вручную: положить файлы
.cursor/skills/compiler-optimizations-deep/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills compiler-optimizations-deep2Вручную: положить файлы
.github/skills/compiler-optimizations-deep/SKILL.md1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a gemini-cli2Командой платформы
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/compiler-internals/compiler-optimizations-deepВручную: положить файлы
.devin/skills/compiler-optimizations-deep/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о compiler-optimizations-deep
Как установить compiler-optimizations-deep в Claude Code?
Выполните команду npx skills add mohitmishra786/low-level-dev-skills --skill compiler-optimizations-deep -a claude-code. Инструкция сохранится по пути ~/.claude/skills/compiler-optimizations-deep/SKILL.md.
Для чего нужен compiler-optimizations-deep?
Скилл объясняет поведение оптимизатора за рамками стандартных флагов: причины неудачной векторизации циклов, распределение регистров и применение BOLT.
Что требуется для запуска утилиты BOLT?
Скомпилируйте приложение с флагом -Wl,--emit-relocs и не вырезайте отладочные символы, иначе BOLT завершится с ошибкой.
Исходный текст
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