gpt4 book ai didi

metadata - 如何从 llvm 的元数据中获取字段名称

转载 作者:行者123 更新时间:2023-12-02 01:55:56 25 4
gpt4 key购买 nike

我有一个问题:

给定 getelementptr 指令,如何使用元数据获取字段名称?

例如

%b = getelementptr inbounds %struct.T* %7, i32 0, i32 1, !dbg !31

我想得到它的字段名“b”。

请贴出代码!提前致谢!

最佳答案

如果您的意思是只想从该指令中获取字符串 b,您可以通过调用 getName() 来实现。但这不是找到 gep 所指的实际字段名称的可靠方法。找到这个需要更多的努力:基本上你需要找出 gep 的第一个参数指向的类型(%struct.T),然后从 gep 的偏移量了解 gep 结构中的哪个字段是指。

在这里编写完整的代码对我来说太复杂了,但通常您会希望使用 DebugInfo.h 中的 DI 类 - 阅读该文件中的文档以了解如何使用这些类。具体来说,为了将偏移量与类型相匹配,我认为您需要使用 DICompositeType 并遍历其中包含的所有类型(getTypeArray() 可能会这样做那个)。

要获得开始的类型,您需要为 gep 的第一个参数找到 @llvm.dbg.value(第一个参数是指该结构指针的元数据) ) - 第三个参数应该是来自 arg 的元数据,使用 DIVariable::getType() 应该可以帮助你。

您的问题可能有比上述更简单的解决方案,但我不知道...

关于metadata - 如何从 llvm 的元数据中获取字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19946743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com