openjdk.ruOpenJDK на русском

JEP 399: Intermediate-Representation Graph Serialization

Сериализация графов промежуточного представления

ОтветственныйIgor Ignatyev
ТипFeature
ОбластьImplementation
СтатусCandidate
Компонентhotspot / compiler
Обсуждениеhotspot dash compiler dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
РецензентыAleksandre Iline, Mikael Vidstedt, Vladimir Kozlov
Создан2014/05/19 18:30
Обновлён2024/06/07 08:53
Задача8043472

Аннотация

Для упрощения тестирования создать средство сериализации и десериализации графов промежуточного представления (intermediate representation, IR), которые используются в компиляторах времени выполнения HotSpot.

Что не является целью

Не является целью предоставить средство сериализации графов IR для каких-либо целей, кроме тестирования.

Мотивация

Сегодня тесты компиляторов времени выполнения HotSpot не могут тестировать оптимизации компилятора напрямую. Чтобы протестировать конкретную оптимизацию, им приходится приводить JVM в такое состояние, в котором эта оптимизация будет выполнена. Это тесты по принципу «серого ящика»: они зависят от деталей реализации HotSpot, но не имеют доступа к внутреннему устройству HotSpot. Такие тесты хрупкие, поскольку изменение реализации может сделать тест бесполезным.

Большинство оптимизаций компиляторов времени выполнения работают с графом IR. Если бы мы могли загрузить граф в JVM, выполнить над ним конкретную оптимизацию, а затем экспортировать его для анализа, то могли бы писать стабильные и надёжные тесты оптимизатора, не зависящие от деталей реализации HotSpot. Это также упростило бы разработку регрессионных тестов оптимизатора.

Описание

Мы предлагаем добавить новые HotSpot WhiteBox API, чтобы импортировать граф IR, выполнить над ним конкретную оптимизацию, а затем экспортировать его:

  • IRHandle import(InputStream)
  • IRHandle optimize(IRHandle, OptimizationEnum)
  • InputStream export(IRHandle)

где IRHandle — ссылка на объект графа IR, а OptimizationEnum — перечисление всех поддерживаемых оптимизаций.

Для C2 IR уже существует формат сериализации, а именно формат XML, который используется в Ideal Graph Visualizer (IGV). Мы предлагаем использовать этот формат и при необходимости расширить его для C1 IR. Кроме того, использование формата IGV позволит нам доработать инструмент IGV так, чтобы он мог служить WSYIWYG-редактором графов IR.

Риски и допущения

Добавление этого кода в продуктовые сборки немного увеличит размер libjvm.so. Если это станет проблемой, мы можем вынести его в отдельную динамически подключаемую библиотеку.