Это, вероятно, сильно зависит от языка ... Clang (C / C ++) может делать очень мало с точки зрения оптимизации во внешнем интерфейсе.Единственная оптимизация, которую я могу придумать, выполняется для производительности сгенерированного кода, это то, что clang выполняет некоторую девиртуализацию методов C ++ во внешнем интерфейсе.clang выполняет некоторые другие оптимизации, такие как постоянное свертывание и устранение мертвого кода, но в основном это делается для ускорения времени компиляции, а не для производительности сгенерированного кода.
РЕДАКТИРОВАТЬ: На самом деле, думаяоб этом чуть больше, я только что вспомнил еще одну важную оптимизацию, которую выполняет clang для C ++: clang знает несколько хитростей, чтобы исключить конструкторы копирования в C ++ (google для NRVO).
В некоторых случаях IR для конкретного языкаОптимизация может быть полезна.Существует проход SimplifyLibCalls, который знает, как оптимизировать вызовы в стандартную библиотеку C.Для новой функции языка ARC в Objective-C clang помещает в конвейер некоторые проходы, специфичные для ARC;они оптимизируют вызовы различных функций времени выполнения Objective C.
В общем, реализация оптимизаций во внешнем интерфейсе обычно полезна только тогда, когда код имеет свойства, которые не могут быть закодированы в IR (например, объекты C ++ имеют постоянный указатель vtable).).И на практике вы, скорее всего, захотите сначала реализовать тупую генерацию кода и посмотреть, есть ли важные случаи, которые не оптимизированы.Оптимизаторы могут выполнять некоторые удивительно сложные преобразования.
См. Также http://llvm.org/docs/tutorial/LangImpl7.html;Правильное использование alloca - это одна вещь, которая существенно помогает оптимизаторам, хотя сама по себе она не является оптимизацией.