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. Если это станет проблемой, мы можем вынести его в отдельную динамически подключаемую библиотеку.