Есть ли способ сказать clang генерировать метаданные TBAA без других оптимизаций?

0

LLVM содержит анализ псевдонимов под названием "анализ псевдонимов на основе типа" (передайте исходный код на github), который использует метаданные !tbaa встроенные в инструкцию. Информация метаданных выглядит так:

!1 = metadata !{metadata !2, metadata !2, i64 0}
!2 = metadata !{metadata !"int", metadata !3, i64 0}
!3 = metadata !{metadata !"omnipotent char", metadata !4, i64 0}
!4 = metadata !{metadata !"Simple C/C++ TBAA"}

Похоже, для этого требуется, чтобы фронтмен как clang генерировал информацию метаданных.

Компиляция файла исходного кода без передачи каких-либо аргументов оптимизации (или -O0) не может сгенерировать вышеуказанные метаданные. И до сих пор я только обнаружил, что должен пройти, по крайней мере, -O1 чтобы -O1 чтобы получить их; проблема в том, что я не ожидаю, что произойдет другая оптимизация/преобразование (например, instcombine) (проходы, используемые clang -O1, аналогичны результатам, представленным этим ответом).

Есть ли способ достичь этой цели?

  • 0
    Я не знаю простой способ, но одна альтернатива состоит в том, чтобы включить -O1, а затем явно отключить каждую опцию, которая включает -O1
  • 0
    @ technosaurus ты имеешь в виду внутри лязга? Можете ли вы сказать, как это отключить?
Показать ещё 2 комментария
Теги:
clang
llvm

1 ответ

1
Лучший ответ

Я не предлагаю его для использования в производстве, но вы можете сделать что-то вроде этого:

clang -cc1 -o 1 -no-struct-path-tbaa -disable-llvm -o ptzns foo.cpp -emit-llvm -o -

чтобы посмотреть метаданные TBAA (удалите -no-struct-path-tbaa, если вы тоже захотите это посмотреть).

В противном случае вы можете легко модифицировать clang, чтобы всегда включать метаданные TBAA.

  • 0
    Спасибо, все работает без сбоев. Я просто хочу поэкспериментировать с LLVM TBAA для C и не рассчитывать на производственное использование, так что мне этого достаточно. Кстати, могу ли я узнать ваше мнение о реализации текущего анализа псевдонимов на основе типов LLVM?
  • 1
    Все хорошо, структура struct path немного интересна. Это не современное состояние, но все в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню