Dead code elimination LLVM

Содержание

Слайд 2

Удаление мёртвого кода
В теории компиляторов удалением мёртвого кода называется оптимизация, удаляющая мёртвый код. 
Мёртвым кодом называют код,

Удаление мёртвого кода В теории компиляторов удалением мёртвого кода называется оптимизация, удаляющая
исполнение которого не влияет на вывод программы, все результаты вычисления такого кода являются мёртвыми переменными, то есть переменными, значения которых в дальнейшем в программе не используются.

Слайд 3

Примеры мёртвого кода

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

Примеры мёртвого кода Переменные, значения которых в дальнейшем в программе не используются.
имеет эффект только при взаимодействии с SSA -регистрами.

Слайд 4

Преимущества

1) Уменьшение:
размера IR программы
времени работы программы
2) Упрощение кода для дальнейших

Преимущества 1) Уменьшение: размера IR программы времени работы программы 2) Упрощение кода для дальнейших оптимизаций
оптимизаций

Слайд 5

DCE & LLVM

В LLVM технология DCE реализована на основе алгоритма Mark &

DCE & LLVM В LLVM технология DCE реализована на основе алгоритма Mark
Sweep.
Алгоритм выполняется в 2 этапа:
Фаза расставления меток
Фаза развертки

https://llvm.org/doxygen/DCE_8cpp_source.html

Слайд 6

Mark & Sweep Фаза расставления меток

В первой фазе сборщик мусора находит и помечает

Mark & Sweep Фаза расставления меток В первой фазе сборщик мусора находит
все достижимые объекты.
Объект называется достижимым, если на него указывает поле какого-нибудь другого достижимого объекта.

Слайд 7

Объекты, к которым программа может обратиться напрямую, называются корнями.
Корни – это

Объекты, к которым программа может обратиться напрямую, называются корнями. Корни – это
локальные переменные на стеке или глобальные переменные, указывающие на объекты в куче.

Mark & Sweep Фаза расставления меток

Слайд 8

Mark & Sweep Фаза развертки

Во второй фазе выполняется обход всех объектов в куче

Mark & Sweep Фаза развертки Во второй фазе выполняется обход всех объектов
и освобождение тех из них, которые не помечены как достижимые.
Для корректной работы при следующих сборках алгоритм также обнуляет все пометки о достижимости.

Слайд 9

Устранение мертвого кода в LLVM

Объекты, подлежащие удалению:
AllocaInst – выделение памяти в стеке;
LoadInst

Устранение мертвого кода в LLVM Объекты, подлежащие удалению: AllocaInst – выделение памяти
– чтение из памяти;
GetElementPtrInst – указатели для доступа к элементам массива и структур;
SelectInst – используется для выбора одного значения на основе условия;
ExtractElementInst – извлекает один элемент из значения векторного типа;
InsertElementInst – вставляет один элемент в векторный тип;
ExtractValue – извлекает значение поля-члена из агрегированного значения;
InsertValue – вставляет значение в поле элемента в агрегированном значении;

Бинарные операции
Операции сравнения
Преобразование типов

Слайд 10

Устранение мертвого кода в LLVM

Объекты, не подлежащие удалению:
ReturnInst – возвращает значение из

Устранение мертвого кода в LLVM Объекты, не подлежащие удалению: ReturnInst – возвращает
функции;
SwitchInst – конструкция Switch;
BranchInst – условный и безусловный переход;
CallInst – вызов функции;
StoreInst – инструкция для хранения в памяти.

LLVM instructions definitions: https://github.com/llvm-mirror/llvm/blob/master/include/llvm/IR/Instruction.def

Имя файла: Dead-code-elimination-LLVM.pptx
Количество просмотров: 31
Количество скачиваний: 0