Проход по оптимизации LLVM, CLang и LLC - PullRequest
4 голосов
/ 06 марта 2011

Я внедряю новый бэкэнд для LLVM, начиная с цели CBackend. Конечная цель - использовать «llc» для генерации исходных преобразований входного C-кода. Тем не менее, я хотел бы сделать ряд оптимизаций, которые, кажется, не очень хорошо поддерживаются в этом контексте. Код объекта LLVM находится на очень низком уровне, и я должен осмотреть его, чтобы заново обнаружить, что на самом деле происходит. Это было бы намного проще сделать на уровне AST. Однако, похоже, что уровень AST является внутренней структурой Clang, и нет простого способа подключиться к этому.

Нужно ли мне проверять объектный код LLVM и самостоятельно перепроектировать поток более высокого уровня? (Должен ли это делать каждый сервер? Это кажется расточительным!)

1 Ответ

6 голосов
/ 06 марта 2011

В общем, вы не можете все перепроектировать. Итак, у вас есть только две возможности:

  1. Делай все на уровне лягушки АСТ.
  2. Излучать дополнительную информацию (например, через метаданные), которая может помочь вам восстановить некоторые аспекты источника ввода.

Но на самом деле, вы не должны делать никаких преобразований источник-источник на уровне IR LLVM, это неправильный инструмент для данной цели. Вы можете наверняка подключиться к уровню AST. Например. clang sources содержит переписчик, который превращает код ObjC в простой C.

...