Whereas LLVM currently doesn't have any types for 8-bit floats, and
whereas existing 8-bit float APIs (for instance, the AMDGCN
intrinsics) take such floats as (packed) bytes, translate the MLIR
8-bit float types to i8 during LLVM lowering.
In order to not special-case arith.constant for bitcasting constants
to their integer form, amend the MLIR to LLVM translator to turn 8-bit
float constants into i8 constants with the same value (by use of
APFloat's bitcast method).
This change can be reverted once LLVM has 8-bit float types.
nit: Would it make sense to check type.getWidth() == 8?
It seems to handle one more 8-bit float type:
unsigned FloatType::getWidth() { if (llvm::isa<Float8E5M2Type, Float8E4M3FNType, Float8E5M2FNUZType, Float8E4M3FNUZType, Float8E4M3B11FNUZType>(*this)) return 8; ...