2013-04-05 3 views
5

В LLVM Language Reference говорится, что она может быть использованаНасколько стабильным является язык сборки LLVM?

как на диске представление битового кода (подходит для быстрой загрузки на Just-In-Time компилятор)

Насколько стабильна это представление? Например, могу ли я создать его сегодня с использованием LLVM 3.1 и все еще ожидать, что он будет использоваться с использованием будущего LLVM, скажем, гипотетического LLVM 4.5 за три года?

Предполагая, что у меня нет внешних зависимостей, могу ли я использовать его для генерации двоичного кода для другой архитектуры?

+0

Моя догадка «полностью обратно совместимы» –

+2

Вы на самом деле есть два вопроса: является ли она стабильна между версиями, и является ли это независимый от платформы. [Второй вопрос уже задан (и ответил) здесь] (http://stackoverflow.com/questions/14258194/llvm-bitcode-cross-platform). – Oak

+0

@Oak Спасибо за указатель. – Tobias

ответ

7

Ответьте на свой первый вопрос: Нет. Это не стабильно. Нет, вы не можете ожидать, что IR/bitcode, сгенерированный 3.1, будет читабель в 4.5 - проект LLVM явно не делает эту гарантию, жертвуя обратной совместимостью в пользу способности двигаться вперед быстрее, создавать лучшие оптимизации и инструменты, а рефакторинг частей рамок по мере необходимости. LLVM в первую очередь ориентирован на статичные компиляторы времени и времени (AOT), поэтому этот подход имеет смысл для крупных игроков.

Второй вопрос, который я действительно не понимаю. LLVM имеет цели (бэкенды) для многих архитектур и хорошо работает для большинства популярных. Но опять же, их ввод IR, который может быть изменен между релизами. Кроме того, убедитесь, чтобы прочитать это: http://llvm.org/docs/FAQ.html#can-i-compile-c-or-c-code-to-platform-independent-llvm-bitcode, а также раздел «Целевая зависимость» здесь: https://llvm.org/docs/tutorial/LangImpl10.html

Проблема заключается в том, что, когда просят о LLVM платформенной независимости многие люди спрашивают «будет LLVM IR компилируется из моего кода C будет предназначаться независимым? ». Ответ на этот вопрос: Нет, потому что сам C зависит от цели.

+0

Ваша вторая ссылка сейчас сломана. – Culex

+0

@Culex: исправлено, спасибо –

3

Отвечая на ваш первый вопрос: вот цитата из политики разработчиков LLVM.

Когда необходимо изменить формат ИК-диапазона, имейте в виду, что мы стараемся поддерживать некоторую обратную совместимость. Правила предназначены в качестве баланса между удобством для пользователей llvm и не налагают большую нагрузку на разработчиков llvm:

  • Текстовый формат не соответствует обратному методу. Мы не меняем его слишком часто, но особых обещаний нет.
  • Формат биткода, созданный выпуском X.Y, будет доступен для чтения всеми последующими релизами X.Z и релизом (X + 1) .0.
  • Новые выпуски могут игнорировать функции предыдущих версий, но они не могут ошибочно их уничтожить. Например, если nsw когда-либо заменяется чем-то другим, то сбросить его было бы правильным способом обновления IR.
  • Отладочные метаданные являются особыми в том смысле, что они в настоящее время удалены во время обновлений.
  • Отказоустойчивые метаданные определены как безопасные для удаления, поэтому действительный способ его обновления - это отказаться от него. Это не очень удобно для пользователей, и ожидается, что потребуется больше усилий, но никаких обещаний не будет.
Смежные вопросы