Types LLVM&x27;s整数类型
LLVM语言指定的整数类型如中所示,其中N是整数的位宽度,范围从1到2^23-1(根据:) 我有两个问题:Types LLVM&x27;s整数类型,types,llvm,llvm-codegen,Types,Llvm,Llvm Codegen,LLVM语言指定的整数类型如中所示,其中N是整数的位宽度,范围从1到2^23-1(根据:) 我有两个问题: 当将C程序编译到LLVM IR级别时,哪些类型可以降低到i1、i2、i3等?似乎i8、i16、i32、i64类型就足够了,所以我想知道其他近800万个整数类型都是干什么用的 有符号和无符号整数类型都降低到i32是真的吗?原因是什么,为什么它不适用于32位浮点(在LLVM中表示为f32)之类的东西 首先,请注意任意大小的整数以及无符号整数和有符号整数之间的区别都是添加到LLVM 2.0中的修
首先,请注意任意大小的整数以及无符号整数和有符号整数之间的区别都是添加到LLVM 2.0中的修改。早期版本只有几个整数类型,有符号/无符号区别 现在,请回答您的问题:
udiv
,而有符号整数之间的除法将是sdiv
。但是,由于整数表示为,许多操作(例如,add
)不关心有符号/无符号,因此只有一个版本
至于为什么在LLVM中没有区分有符号和无符号,简而言之,有符号和无符号版本都会导致大量IR膨胀,并且不利于某些优化,所以它被删除了
最后,你会问为什么没有f32,答案是我不知道,也许它被认为不如任意大小的整数有用。但是,请注意,f32
并不是真正的描述性-如果您想要任意浮点类型,您至少需要指定基数的大小和指数的大小,类似于f23e8
而不是float
和f52e11
而不是double
。如果你问我的话,这有点麻烦,不过我想float
和double
可能就是它们的同义词实际上,对于浮点数,
f32
确实存在。我问这个问题的原因是,我认为如果有符号和无符号整数都可以用i32表示,那么32位浮点也可以用这种方式表示。我想这是你提到的一个详细的设计决定。@AliJ我没有看到f32
列在。。。除非您的意思是有一个与该名称相关联的通用实现?谢谢!碰巧,我遇到了Clang生成的两条指令:storei576%bla,i576*比特广播(%class.Foo*@_globalto i576*),align 8
和%11=加载i384*%10,align 8
。我假设它们被降低为memcpy
调用或使用SIMD类型的smartish存储/加载指令序列。