Here are initial patches that expose the inheritable attributes for OpenCL in libclang, including the python bindings.

I initially posted these on the dev mailing list, but since they received no response, I presume that this list is a better place for them.

As far as I can tell, since the address space attributes are type attributes, exposing them will require adding to the libclang API. Along these lines, it might be useful to have a generalized way to query type attributes so that more semantic analysis can be done through libclang. Any thoughts on this?

Paul Fox


---
 include/clang-c/Index.h     |  7 ++++++-
 tools/libclang/CIndex.cpp   | 10 ++++++++++
 tools/libclang/CXCursor.cpp |  5 +++++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index 4deb60b..6861a1e 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -2176,7 +2176,12 @@ enum CXCursorKind {
   CXCursor_CUDADeviceAttr                = 413,
   CXCursor_CUDAGlobalAttr                = 414,
   CXCursor_CUDAHostAttr                  = 415,
-  CXCursor_LastAttr                      = CXCursor_CUDAHostAttr,
+  CXCursor_OpenCLKernelAttr              = 416,
+  CXCursor_OpenCLImageAccessAttr         = 417,
+  CXCursor_ReqdWorkGroupSizeAttr         = 418,
+  CXCursor_WorkGroupSizeHintAttr         = 419,
+  CXCursor_VecTypeHintAttr               = 420,
+  CXCursor_LastAttr                      = CXCursor_VecTypeHintAttr,
 
   /* Preprocessing */
   CXCursor_PreprocessingDirective        = 500,
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 787c28b..8baa7a6 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -3911,6 +3911,16 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
     return cxstring::createRef("attribute(global)");
   case CXCursor_CUDAHostAttr:
     return cxstring::createRef("attribute(host)");
+  case CXCursor_OpenCLKernelAttr:
+    return cxstring::createRef("kernel");
+  case CXCursor_OpenCLImageAccessAttr:
+    return cxstring::createRef("image access");
+  case CXCursor_ReqdWorkGroupSizeAttr:
+    return cxstring::createRef("attribute(reqd_work_group_size)");
+  case CXCursor_WorkGroupSizeHintAttr:
+    return cxstring::createRef("attribute(work_group_size_hint)");
+  case CXCursor_VecTypeHintAttr:
+    return cxstring::createRef("attribute(vec_type_hint)");
   case CXCursor_PreprocessingDirective:
     return cxstring::createRef("preprocessing directive");
   case CXCursor_MacroDefinition:
diff --git a/tools/libclang/CXCursor.cpp b/tools/libclang/CXCursor.cpp
index 7418c29..b313d2c 100644
--- a/tools/libclang/CXCursor.cpp
+++ b/tools/libclang/CXCursor.cpp
@@ -57,6 +57,11 @@ static CXCursorKind GetCursorKind(const Attr *A) {
     case attr::CUDADevice: return CXCursor_CUDADeviceAttr;
     case attr::CUDAGlobal: return CXCursor_CUDAGlobalAttr;
     case attr::CUDAHost: return CXCursor_CUDAHostAttr;
+    case attr::OpenCLKernel: return CXCursor_OpenCLKernelAttr;
+    case attr::OpenCLImageAccess: return CXCursor_OpenCLImageAccessAttr;
+    case attr::ReqdWorkGroupSize: return CXCursor_ReqdWorkGroupSizeAttr;
+    case attr::WorkGroupSizeHint: return CXCursor_WorkGroupSizeHintAttr;
+    case attr::VecTypeHint: return CXCursor_VecTypeHintAttr;
   }
 
   return CXCursor_UnexposedAttr;
-- 
1.9.3


---
 bindings/python/clang/cindex.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py
index 517b3c1..b9bc80b 100644
--- a/bindings/python/clang/cindex.py
+++ b/bindings/python/clang/cindex.py
@@ -1086,6 +1086,11 @@ CursorKind.CUDACONSTANT_ATTR = CursorKind(412)
 CursorKind.CUDADEVICE_ATTR = CursorKind(413)
 CursorKind.CUDAGLOBAL_ATTR = CursorKind(414)
 CursorKind.CUDAHOST_ATTR = CursorKind(415)
+CursorKind.OPENCL_KERNEL_ATTR = CursorKind(416)
+CursorKind.OPENCL_IMAGE_ACCESS_ATTR = CursorKind(417)
+CursorKind.REQD_WORK_GROUP_SIZE_ATTR = CursorKind(418)
+CursorKind.WORK_GROUP_SIZE_HINT_ATTR = CursorKind(419)
+CursorKind.VEC_TYPE_HIND_ATTR = CursorKind(420)
 
 ###
 # Preprocessing
-- 
1.9.3


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to