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) 并说明了这两种用途。

您可以为其他类型的值设置名称可能被视为无害的副作用。