まず、任意のサイズの整数と、符号付き整数と符号なし整数の区別がないことの両方が、LLVM 2.0 に追加された変更であることに注意してください。以前のバージョンには、符号付き/符号なしの区別がある少数の整数型しかありませんでした。
さて、あなたの質問に:
LLVM は C/C++ を念頭に置いて設計されていますが、これらの言語に固有のものではありません。可能な整数型が増えると、柔軟性が高まります。もちろん、これらの型を使用する必要はありません-そして、あなたが言及したように、LLVM(つまりClang)へのC / C ++フロントエンドはおそらくi1、i8、i16、i32、およびi64のみを生成すると思います.
編集:明らかに私は間違っており、Clang は他の整数型も使用しています。以下の Jens のコメントを参照してください。
はい、LLVM は符号付き整数型と符号なし整数型を区別しないため、どちらも i32 に下げられます。ただし、符号なし整数の操作は、元の型に従って変換されます。たとえば、符号なし整数間の除算は になりますが、符号付き整数間の除算はudiv
になりますsdiv
。ただし、整数は2 の補数として表されるため、多くの操作 ( などadd
) は符号付き/符号なしを気にせず、1 つのバージョンしかありません。
LLVM で署名付きと未署名の区別がなされなかった理由については、この拡張要求の詳細をお読みください。要するに、署名付きバージョンと署名なしバージョンの両方を使用すると、IR が大きく膨張し、いくつかの最適化に悪影響を及ぼしたため、削除されました。
最後に、なぜいいえかを尋ねますf32
。答えはわかりません。おそらく、任意のサイズの整数よりも有用性が低いと見なされたのでしょう。ただし、これはあまり説明的ではないことに注意してf32
ください。任意の浮動小数点型が必要な場合は、少なくとも基数のサイズと指数のサイズを指定する必要がありf23e8
ます。あなたが私に尋ねると、それは少し面倒ですが、私は推測し、それらと同義にすることができたかもしれません.float
f52e11
double
float
double