llvm.set_value_name 实际上是做什么的?
What does llvm.set_value_name actually do?
我读到 here 正在做类似
的事情
Llvm.set_value_name n p
会将 llvalue“p”的名称设置为“n”中的任何字符串。但我对这到底意味着什么感到困惑?
如果我有一个像 1 这样的整数值,这意味着我可以将 1 命名为任何字符串?这些名称存储在哪里?这个名字的范围是什么?
这是 Value::setName() 的包装器,可用于设置大多数值的名称。甚至可能是全部,但名称并未用于所有值。 32 位常量 33 在我见过的所有 IR 中都被称为 i32 33
,即使 API 允许为其设置名称。
该名称用于指令和全局值,例如函数和全局变量,这三个都是值。当您请求 IR 代码、函数和全局变量名称的人类可读表示形式时,指令的名称将被打印出来,函数和全局变量名称将被传递给 linker,后者将它们用于 link 多个编译单元。以下调用具有名称 foo 并引用具有名称 malloc 的值:%foo = call %malloc(i32 33)
并说明了这两种用途。
您可以为其他类型的值设置名称可能被视为无害的副作用。
我读到 here 正在做类似
的事情Llvm.set_value_name n p
会将 llvalue“p”的名称设置为“n”中的任何字符串。但我对这到底意味着什么感到困惑?
如果我有一个像 1 这样的整数值,这意味着我可以将 1 命名为任何字符串?这些名称存储在哪里?这个名字的范围是什么?
这是 Value::setName() 的包装器,可用于设置大多数值的名称。甚至可能是全部,但名称并未用于所有值。 32 位常量 33 在我见过的所有 IR 中都被称为 i32 33
,即使 API 允许为其设置名称。
该名称用于指令和全局值,例如函数和全局变量,这三个都是值。当您请求 IR 代码、函数和全局变量名称的人类可读表示形式时,指令的名称将被打印出来,函数和全局变量名称将被传递给 linker,后者将它们用于 link 多个编译单元。以下调用具有名称 foo 并引用具有名称 malloc 的值:%foo = call %malloc(i32 33)
并说明了这两种用途。
您可以为其他类型的值设置名称可能被视为无害的副作用。