title: LLVM's integer types
body: <p>The LLVM language specifies integer types as iN, where N is the bit-width of the integer, and ranges from 1 to 2^23-1 (According to: <a href="http://llvm.org/docs/LangRef.html#integer-type">http://llvm.org/docs/LangRef.html#integer-type</a>)</p>
  
  <p>I have 2 questions:</p>
  
  <ol>
  <li><p>When compiling a C program down to LLVM IR level, what types may be lowered to i1, i2, i3, etc? It seems like the types i8, i16, i32, i64 must be enough, so I was wondering what all the other nearly 8 million integer types are for.</p></li>
  <li><p>Is it true that both signed and unsigned integer types are lowered to i32? What is the reason for that, and why does it not apply to something like 32-bit float (which is represented as f32 in LLVM)?</p></li>
  </ol>