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