[cfe-dev] [OpenCL patch] Half type as native when OpenCL's cl_khr_fp16 extension is enabled
Anton Lokhmotov
Anton.Lokhmotov at arm.com
Tue Jul 24 03:03:43 PDT 2012
Hi John,
> It looks like we have four possibilities. Is this right?
> 1. half is completely unsupported (C, C++ default)
> 2. half is storage-only, support half* but no operations on half
> (OpenCL without cl_khr_fp16)
> 3. half is storage-only, operations on half automatically promoted to
> float (__fp16 NEON)
> 4. half is completely supported (OpenCL with cl_khr_fp16)
>
> HalfTypeNative (or PromoteHalfToFloat) would differentiate between the
> last two cases in CodeGen; the first two cases are irrelevant in
> CodeGen because in those cases it should be impossible to pass a half
> type to EmitScalarConversion.
I agree.
We found a problem with our solution addressing your previous comment [1].
One of the OpenCL conformance tests attempts to do something like this:
__global half * buffer;
size_t index;
...
vstore_half(
/* float data = */ 1.0f,
/* size_t offset = */ 0,
/* __global half *p = */ &buffer[index]
);
Disallowing 'buffer[index]' as in [2] results in:
error: dereferencing half pointer ('half *') is not allowed.
While the conformance tests are not sacred, it can be argued that the
composition of '&' and '[]' should result in half*, so should not be
rejected. Unfortunately, we found no obvious way to implement this in
Clang, so leave this case as TODO.
Please review the updated patch.
Many thanks,
Anton.
[1] http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-June/022001.html
[2] http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-June/022079.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: half_type.patch
Type: application/octet-stream
Size: 18452 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120724/93f190d2/attachment.obj>
More information about the cfe-dev
mailing list