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