Свяжите метаданные с базовыми блоками LLVM на этапе анализа

Как я могу сохранить информацию о каждом базовом блоке, созданную в пользовательском проходе анализа LLVM, чтобы сделать ее доступной в будущих проходах оптимизации?

Например, предположим, что я создаю класс FunctionPass для реализации анализа живучести. Этот проход создаст наборы LiveIn и LiveOut для каждого базового блока функции. Где я должен объявить эти наборы для будущего использования другими проходами LLVM? Как я могу сделать их напрямую доступными из связанной с ними структуры данных llvm :: BasicBlock?


person user3707531    schedule 05.04.2015    source источник


Ответы (1)


На данный момент нет прямого способа прикрепить метаданные к BasicBlocks, поскольку класс BasicBlock не имеет метаданных в качестве члена данных. вы можете расширить класс BasicBlock как один вариант, другой распространенный вариант - присоединить связанные с BasicBlock метаданные к его инструкции Terminator, но каждый проход, который объединяет или разделяет BasicBloks или изменяет CFG, может сделать вашу информацию недействительной.

person hadi sadeghi    schedule 24.04.2015
comment
Спасибо, это полезно. - person user3707531; 25.04.2015