gpt4 book ai didi

llvm - LLVM中如何区分有符号和无符号整数

转载 作者:行者123 更新时间:2023-12-02 17:20:00 27 4
gpt4 key购买 nike

LLVM 项目不区分有符号和无符号整数,如所述 here 。在某些情况下,您需要知道特定变量是否应该被解释为有符号或无符号,例如当它扩展大小或在除法中使用它时。我的解决方案是为每个变量保留一个单独的类型信息,描述它是整数还是基数类型。

但是,我想知道,是否有一种方法可以以这种方式“归属”LLVM 中的类型?我一直在寻找某种可以添加到类型中的“用户数据”,但似乎什么也没有。当创建类型时,这必须以某种方式发生,因为相同的类型在 LLVM 中仅生成一次。

因此我的问题是:

是否有一种方法可以跟踪整数变量在 LLVM 基础设施中是否应被解释为有符号或无符号,或者确实是像我一样保留单独信息的唯一方法?

谢谢

最佳答案

首先,您必须确保需要插入额外的类型元数据,因为 Clang 已经正确处理有符号整数操作,例如通过使用 sdivsrem而不是 udevurem

此外,还可以利用它根据 IR 中的变量访问方式来实现一些轻量级类型推断。请注意,像 add 这样的操作不需要符号信息,因为它基于二补码表示。

否则,我认为最好的方法是修改前端(Clang)以添加一些自定义的 DWARF 调试信息。这是link这可能会帮助您入门。

更新:如果您的目标是直接在 LLVM IR 上实现静态分析。本文可以提供深入的讨论。

Navas, J.A., Schachte, P., Søndergaard, H., Stuckey, P.J.: Signedness-agnostic program analysis: Precise integer bounds for low-level code. In: Jhala, R., Igarashi, A. (eds.) APLAS 2012. LNCS, vol. 7705, pp. 115–130. Springer, Heidelberg (2012)

关于llvm - LLVM中如何区分有符号和无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519005/

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