Skip to content

Commit

Permalink
[libclang] [OpenCL] Expose half type.
Browse files Browse the repository at this point in the history
Expose the half type (fp16) through libclang and the python bindings.

It seems CXType_LastBuiltin was not updated in b2ea6d9 ("Enable
support for __float128 in Clang", 2016-04-13), so update it now.

Add an Index test for OpenCL types; in the future we will add other
OpenCL types such as images to this test.

Patch by Sven van Haastregt.

Differential Revision: https://reviews.llvm.org/D29718


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@294754 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
jgouly committed Feb 10, 2017
1 parent a871648 commit 588e03f
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 1 deletion.
1 change: 1 addition & 0 deletions bindings/python/clang/cindex.py
Original file line number Diff line number Diff line change
Expand Up @@ -1887,6 +1887,7 @@ def __repr__(self):
TypeKind.OBJCCLASS = TypeKind(28)
TypeKind.OBJCSEL = TypeKind(29)
TypeKind.FLOAT128 = TypeKind(30)
TypeKind.HALF = TypeKind(31)
TypeKind.COMPLEX = TypeKind(100)
TypeKind.POINTER = TypeKind(101)
TypeKind.BLOCKPOINTER = TypeKind(102)
Expand Down
3 changes: 2 additions & 1 deletion include/clang-c/Index.h
Original file line number Diff line number Diff line change
Expand Up @@ -3011,8 +3011,9 @@ enum CXTypeKind {
CXType_ObjCClass = 28,
CXType_ObjCSel = 29,
CXType_Float128 = 30,
CXType_Half = 31,
CXType_FirstBuiltin = CXType_Void,
CXType_LastBuiltin = CXType_ObjCSel,
CXType_LastBuiltin = CXType_Half,

CXType_Complex = 100,
CXType_Pointer = 101,
Expand Down
24 changes: 24 additions & 0 deletions test/Index/opencl-types.cl
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// RUN: c-index-test -test-print-type %s | FileCheck %s

#pragma OPENCL EXTENSION cl_khr_fp16 : enable
#pragma OPENCL EXTENSION cl_khr_fp64 : enable

typedef half half4 __attribute__((ext_vector_type(4)));
typedef float float4 __attribute__((ext_vector_type(4)));
typedef double double4 __attribute__((ext_vector_type(4)));

void kernel testFloatTypes() {
half scalarHalf;
half4 vectorHalf;
float scalarFloat;
float4 vectorFloat;
double scalarDouble;
double4 vectorDouble;
}

// CHECK: VarDecl=scalarHalf:11:8 (Definition) [type=half] [typekind=Half] [isPOD=1]
// CHECK: VarDecl=vectorHalf:12:9 (Definition) [type=half4] [typekind=Typedef] [canonicaltype=half __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1]
// CHECK: VarDecl=scalarFloat:13:9 (Definition) [type=float] [typekind=Float] [isPOD=1]
// CHECK: VarDecl=vectorFloat:14:10 (Definition) [type=float4] [typekind=Typedef] [canonicaltype=float __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1]
// CHECK: VarDecl=scalarDouble:15:10 (Definition) [type=double] [typekind=Double] [isPOD=1]
// CHECK: VarDecl=vectorDouble:16:11 (Definition) [type=double4] [typekind=Typedef] [canonicaltype=double __attribute__((ext_vector_type(4)))] [canonicaltypekind=Unexposed] [isPOD=1]
2 changes: 2 additions & 0 deletions tools/libclang/CXType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ static CXTypeKind GetBuiltinTypeKind(const BuiltinType *BT) {
BTCASE(Long);
BTCASE(LongLong);
BTCASE(Int128);
BTCASE(Half);
BTCASE(Float);
BTCASE(Double);
BTCASE(LongDouble);
Expand Down Expand Up @@ -503,6 +504,7 @@ CXString clang_getTypeKindSpelling(enum CXTypeKind K) {
TKIND(Long);
TKIND(LongLong);
TKIND(Int128);
TKIND(Half);
TKIND(Float);
TKIND(Double);
TKIND(LongDouble);
Expand Down

0 comments on commit 588e03f

Please sign in to comment.