gpt4 book ai didi

llvm - 如何在 LLVM pass 中添加平台特定的函数定义?

转载 作者:行者123 更新时间:2023-12-04 17:47:59 32 4
gpt4 key购买 nike

我试图为系统提供的东西添加一个函数声明。
但是,函数原型(prototype)返回 size_t ,在 32 位平台上是 int32,在 64 位平台上是 int64。
我想知道是否有一种方法可以检测目标平台并相应地添加声明?

最佳答案

经过一番研究,LLVM IR作为目标中性语言不可能知道目标特定的类型大小。看看this Chris Lattner 对该主题发表评论的相关讨论。此外,在 this相关的问题。

因此,这是前端的工作,这会导致前端需要“了解”目标及其 ABI 的额外簿记信息。因此,例如,您可能需要像 this 这样的项目。在 Loci 的情况下编程语言。

现在,专门为size_t根据 this :

[...] std::size_t can safely store the value of any non-member pointer, in which case it is synonymous with std::uintptr_t.



所以,你可以使用 getIntPtrType DataLayout 的方法类(class)。

对于任何其他数据类型,我不确定“猜测”可以让您走多远(从以前的引用资料来看,可能不会太远)。

最后,另一种选择可能是 extending LLVM使用自定义内部函数(例如,参见 memcpy ),它不可避免地要通过每个目标的特定定义。

为了实际调整您的整数类型创建,您可以使用 sizeof 运算符以及 CHAR_BIT 的使用, 以便在 getIntNType 中提供正确的位数称呼。

这将使您尽可能在构建模块传递的平台上为整数类型使用正确的大小。

为了在运行您的通行证的平台上“动态”检测类型的大小,我知道除了在某种配置文件中提供该信息之外别无他法。

但是,这可以自动化并使用各种构建系统的示例(例如 cmake 也被 LLVM 使用),您可以制作一个简单的程序,该程序可以编译并自动生成。

为此,并使其尽可能便携并避免重新发明轮子,您可以使用 cmake CheckTypeSize 模块。

关于llvm - 如何在 LLVM pass 中添加平台特定的函数定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47481779/

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