Получение исходного имени переменной для значения LLVM
Операнды дляllvm::User
(например, инструкция)llvm::Value
s.
Послеmem2reg пройти, переменные находятся вФорма SSAи их имена, соответствующие исходному коду, теряются.Value::getName()
устанавливается только для некоторых вещей; для большинства переменных, которые являются посредниками, это не установлено.
instnamer pass можно запустить, чтобы дать всем именам переменных, напримерtmp1 а такжеtmp2, но это не отражает, откуда они берутся. Вот некоторые LLVM IR рядом с исходным кодом C:
Я создаю простую HTML-страницу для визуализации и отладки некоторых оптимизаций, над которыми я работаю, и я хочу показать переменные SSA какимявер нотации, а не только временные имена instnamer. Это просто, чтобы помочь моей читабельности.
Я получаю LLVM IR от clang с помощью командной строки, такой как:
clang -g3 -O1 -emit-llvm -o test.bc -c test.c
Есть звонкиllvm.dbg.declare
а такжеllvm.dbg.value
в их; как вы превращаетесь в исходные имена исходного кода и номера версий SSA?
Итак, как я могу определить исходную переменную (или имя константы с именем) изllvm::Value
? Отладчики должны быть в состоянии сделать это, так как я могу?