llvm::User
(例如指令)的操作数是llvm::Value
s。
mem2reg通过后,变量为SSA 形式,与原始源代码对应的名称丢失。 Value::getName()
只为某些东西设置;对于大多数作为中介的变量,它没有设置。
可以运行 instnamer传递以提供所有变量名称,例如tmp1和tmp2,但这并不能捕获它们最初的来源。这是原始 C 代码旁边的一些 LLVM IR:
我正在构建一个简单的 html 页面来可视化和调试我正在处理的一些优化,并且我想将 SSA 变量显示为名称ver表示法,而不仅仅是临时的 instnamer 名称。它只是为了帮助我的可读性。
我正在使用命令行从 clang 获取我的 LLVM IR,例如:
clang -g3 -O1 -emit-llvm -o test.bc -c test.c
IR 中有调用llvm.dbg.declare
和调用llvm.dbg.value
;你如何变成原始源代码名称和 SSA 版本号?
那么如何从 中确定原始变量(或命名常量名)llvm::Value
?调试器必须能够做到这一点,那么我该怎么做呢?