[cfe-commits] RFC: Half floating point support
Anton Korobeynikov
anton at korobeynikov.info
Tue Oct 4 14:08:38 PDT 2011
Hello Everyone
Attached is a preliminary patch for storage-only half floating point
support in clang. Basically, lack of such support is a regression now,
because llvm-gcc supported it.
The key idea of the patch is the following: when building AST for new
'half' type implicit conversion to float is performed (the opposite
conversion thus will be done automatically). Such a conversion,
fortunately, should be done only in few places:
1. During lvalue-to-rvalue conversion
2. During building initializer sequence
3. For some unary ops where no lvalue-to-rvalue conversion is
performed (e.g. ++foo).
Later these promotions can be turned off depending on whether the
target wants half fp to be native or storage only type.
During the codegen I just turn such float<->half conversion into
appropriate intrinsic calls plus some other minor stuff for
initializers.
What is missed in the patch:
1. Sema checks.
2. Testsuite (I have extensive one, but I don't have for sema checks)
3. (Maybe) Some C++ bits.... Most probably RTTI?
So, I just wanted thoughts and comments on this patch.
Answering the very first question: why this is not done entirely in
codegen phase? Answer is pretty simple: there are a lot of EmitFoo()
methods, so I'd need to modify all of them and this looked pretty
fragile and inconvenient. Also, I thought it's pretty important to
have everything in AST (implicit conversions to float) instead of
codegen phase magic.
Thanks!
--
With best regards, Anton Korobeynikov
Faculty of Mathematics and Mechanics, Saint Petersburg State University
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fp16.diff
Type: application/octet-stream
Size: 30021 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111005/ecf13216/attachment.obj>
More information about the cfe-commits
mailing list