On Feb 23, 2011, at 10:01 AM, Anton Lokhmotov wrote:> Please find attached Clang/LLVM patches for supporting 'half' - the > half-precision floating-point type, which in particular is used in OpenCL C. > Please review. > > Background and motivation. Whilst the half type is defined by IEEE 754-2008 > as storage only (i.e. no arithmetic is supposed to be performed on values of > this type), it's growing in importance in embedded systems. The cl_khr_fp16 > extension of OpenCL lifts restrictions for declaring half variables and > arrays, dereferencing half pointers, performing arithmetic and conversions, > etc. The latest version of the C++ ABI supports half as well. Therefore, > we believe half should become a fundamental type in LLVM. (After all, LLVM > already supports x86_fp80, fp128 and ppc_fp128.)Hi Anton, Does the spec force evaluation to happen in half mode, or does it specify that there is a promotion to float (or some other type) an operation, then truncation back to half? -Chris
Hi Chris,> Does the spec force evaluation to happen in half mode, or does it > specify that there is a promotion to float (or some other type), an > operation, then truncation back to half?The last paragraph in section 9.6 says: "NOTE: Implementations may perform floating-point operations on half scalar or vector data types by converting the half values to single precision floating-point values and performing the operation in single precision floating-point. In this case, the implementation will use the half scalar or vector data type as a storage only format." That is, an implementation may perform operations on half scalar and vector values either using half-precision operations (if supported natively) or using single-precision operations (always supported natively). In either case, it's desirable to represent half operations in the IR, and let the backend make the decision. Cheers, Anton.
Hi Chris, So what do you think about this proposal? If you agree, it would be good to include the patch into the 2.9 release (to avoid breaking compatibility later). Best regards, Anton.> -----Original Message----- > From: Anton Lokhmotov [mailto:Anton.Lokhmotov at arm.com] > Sent: 24 February 2011 10:19 > To: 'Chris Lattner' > Cc: llvmdev at cs.uiuc.edu; cfe-dev at cs.uiuc.edu > Subject: RE: [LLVMdev] [PATCH] OpenCL half support > > Hi Chris, > > > Does the spec force evaluation to happen in half mode, or does it > > specify that there is a promotion to float (or some other type), an > > operation, then truncation back to half? > > The last paragraph in section 9.6 says: "NOTE: Implementations may > perform floating-point operations on half scalar or vector data types > by converting the half values to single precision floating-point values > and performing the operation in single precision floating-point. In > this case, the implementation will use the half scalar or vector data > type as a storage only format." > > That is, an implementation may perform operations on half scalar and > vector values either using half-precision operations (if supported > natively) or using single-precision operations (always supported > natively). In either case, it's desirable to represent half operations > in the IR, and let the backend make the decision. > > Cheers, > Anton.