LLVM语言将整数类型指定为iN,其中N是整数的位宽,范围从1到2^23-1(参见:http://llvm.org/docs/LangRef.html#integer-type)
我有两个问题:
将C程序编译为LLVM IR级别时,可能降低哪些类型为 i1、i2、i3等?看起来像是 i8、i16、i32、i64 这些类型就足够了,那其他将近800万种整数类型是用来干什么的呢?
是否真的将带符号和无符号整数类型都降低为 i32?这是什么原因,为什么不适用于32位浮点数(在LLVM中表示为f32)?
f32
是存在的。我之所以问这个问题,是因为我认为如果有符号和无符号整数都可以用i32表示,那么32位浮点数也可以用同样的方式表示。我猜想这可能是一个详细的设计决策,正如你所提到的一样。 - Ali Jf32
... 除非你是指该名称关联着一种常见的实现方式? - Oakstore i576 %bla, i576* bitcast (%class.Foo* @_Global to i576*), align 8
和%11 = load i384* %10, align 8
。我会假设它们被降级为使用SIMD类型的memcpy
调用或者一系列智能的存储/加载指令序列。 - Jens