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

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

然而,我想知道,是不是有办法在LLVM中“归类”一种类型? 我正在寻找某种可以添加到某种类型的“用户数据”,但似乎什么也没有。 这种情况在创建类型时不得不以某种方式发生,因为在LLVM中只会生成一次相同的类型。

因此我的问题是:

有没有一种方法可以跟踪整数变量是否应该在LLVM基础结构中解释为已签名或未签名,还是唯一确实像我一样保留单独信息的方法?

谢谢


首先,你必须确保,因为锵已经处理了通过使用适当符号的整数运算,例如,你需要插入额外的类型元数据sdivsrem而不是udevurem

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

否则,我认为最好的方法是修改前端(Clang)以添加一些自定义的DWARF调试信息。 这里有一个可能让你开始的链接。

更新:如果您的目标是直接在LLVM IR上实施静态分析。 本文可以提供一个彻底的讨论。

Navas,JA,Schachte,P.,Søndergaard,H.,Stuckey,PJ:签名不可知程序分析:低级代码的精确整数界限。 在:Jhala,R.,Igarashi,A。(编辑)APLAS 2012. LNCS, 7705,第115-130页。 施普林格,海德堡(2012年)

链接地址: http://www.djcxy.com/p/85493.html

上一篇: How to distinguish signed and unsigned integer in LLVM

下一篇: ILogger.Log method declaringType parameter