繁体   English   中英

llvm.set_value_name 实际上是做什么的?

[英]What does llvm.set_value_name actually do?

在这里读到做类似的事情

Llvm.set_value_name n p

将 llvalue "p" 的名称设置为 "n" 中的任何字符串。 但我对这实际上意味着什么感到困惑?

如果我有一个像 1 这样的 integer 值,这意味着我可以将 1 命名为任何字符串? 这些名称存储在哪里? 这个名字的scope是什么?

这是Value::setName()的包装器,可用于设置大多数值的名称。 甚至可能全部,但该名称并未用于所有值。 在我见过的所有 IR 中,32 位常量 33 都被称为i32 33 ,即使 API 允许为其设置名称。

该名称用于指令和全局值,例如函数和全局变量,这三个都是值。 当您要求 IR 代码的人类可读表示时,会打印指令名称,函数和全局变量名称被传递给 linker,后者使用它们将多个编译单元链接在一起。 以下调用名为 foo 并引用名为 malloc 的值: %foo = call %malloc(i32 33)并说明了这两种用途。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM