【问题标题】:What does llvm.set_value_name actually do?llvm.set_value_name 实际上是做什么的?
【发布时间】:2021-12-29 21:18:19
【问题描述】:

我读到here 做了类似的事情

Llvm.set_value_name n p

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

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

【问题讨论】:

    标签: compiler-construction ocaml llvm llvm-ir


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!这些名称是仅在基本块内有效,还是在整个程序范围内有效?
    • 唯一性取决于。它可以是每个函数、每个模块或整个程序。
    猜你喜欢
    • 2011-03-11
    • 2010-11-26
    • 2015-06-23
    • 2017-12-26
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多