如何从 LLVM 5.0 中的 TargetMachine 获取 DataLayout?

Posted

技术标签:

【中文标题】如何从 LLVM 5.0 中的 TargetMachine 获取 DataLayout?【英文标题】:How to obtain the DataLayout from TargetMachine in LLVM 5.0? 【发布时间】:2017-10-09 10:50:30 【问题描述】:

在this commit 中,getDataLayout 在弃用后已被删除。目前获取DataLayout的方式是什么?

【问题讨论】:

为什么这被否决了?短!=问得不好 @StoryTeller 因为是 Bartek。 @MartinJames - 我显然不知道为什么这是一个原因。 @StoryTeller 你必须是个懒人才能理解:) 我看到这已被 VTCed 为“不清楚你在问什么”。我发现这个问题很清楚 - API 已被 something 取代,我在问那是什么。我找不到关于我现在应该使用什么以及从 TM 获取 DataLayout 是否仍然可行的发行说明或其他信息。 【参考方案1】:

DataLayout 也应该在模块中,这就是为什么不再允许将其从 TargetMachine 中取出的原因。 IE。基本上,构建模块的任何内容都应该知道足以构建 DataLayout。

【讨论】:

【参考方案2】:

我想TargetMachine::createDataLayout()可以用。

TargetMachine.h:

const DataLayout createDataLayout() const  return DL; 

这将返回数据布局的副本而不是 const 引用。

如果有什么可以更安全地使用,因为数据布局的副本在 TargetMachine 对象被销毁后仍然有效。

如果我没记错的话,DataLyaout 并不是一个特别大的类,所以复制开销应该是可以接受的。如果结果是一个问题,我建议保留一份副本以供非常频繁的访问。

【讨论】:

哇,如果这真的这么简单...我不得不部分归咎于 整个 llvm.org 在我最需要它的地方。我希望得到更多确认,这确实是一个直接替代品,否则您需要耐心等待,直到我可以验证。还是谢谢!

以上是关于如何从 LLVM 5.0 中的 TargetMachine 获取 DataLayout?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 上卸载准确的 LLVM 和 CLANG 版本

在 Xcode 5 上使用 Boost - Apple LLVM 5.0

构建时出现 Apple LLVM 5.0 错误

即使选择了默认的苹果 llvm 5.0,XCode5 也使用 gcc48

截至 2017 年的 clang 5.0 pdb 支持

如何关闭llvm中的常量折叠优化