llvm-project/clang/tools/libclang
Alexey Bader 954ba21f85 [OpenCL] Complete image types support.
I. Current implementation of images is not conformant to spec in the following points:
  1. It makes no distinction with respect to access qualifiers and therefore allows to use images with different access type interchangeably. The following code would compile just fine:

        void write_image(write_only image2d_t img);
        kernel void foo(read_only image2d_t img) { write_image(img); } // Accepted code

     which is disallowed according to s6.13.14.

  2. It discards access qualifier on generated code, which leads to generated code for the above example:

        call void @write_image(%opencl.image2d_t* %img);

     In OpenCL2.0 however we can have different calls into write_image with read_only and wite_only images.
     Also generally following compiler steps have no easy way to take different path depending on the image access: linking to the right implementation of image types, performing IR opts and backend codegen differently.

  3. Image types are language keywords and can't be redeclared s6.1.9, which can happen currently as they are just typedef names.
  4. Default access qualifier read_only is to be added if not provided explicitly.

II. This patch corrects the above points as follows:
  1. All images are encapsulated into a separate .def file that is inserted in different points where image handling is required. This avoid a lot of code repetition as all images are handled the same way in the code with no distinction of their exact type.
  2. The Cartesian product of image types and image access qualifiers is added to the builtin types. This simplifies a lot handling of access type mismatch as no operations are allowed by default on distinct Builtin types. Also spec intended access qualifier as special type qualifier that are combined with an image type to form a distinct type (see statement above - images can't be created w/o access qualifiers).
  3. Improves testing of images in Clang.

Author: Anastasia Stulova
Reviewers: bader, mgrang.
Subscribers: pxli168, pekka.jaaskelainen, yaxunl.
Differential Revision: http://reviews.llvm.org/D17821

llvm-svn: 265783
2016-04-08 13:40:33 +00:00
..
ARCMigrate.cpp
BuildSystem.cpp
CIndex.cpp [OpenCL] Complete image types support. 2016-04-08 13:40:33 +00:00
CIndexCXX.cpp
CIndexCodeCompletion.cpp
CIndexDiagnostic.cpp Roll-back r250822. 2015-10-20 13:23:58 +00:00
CIndexDiagnostic.h Roll-back r250822. 2015-10-20 13:23:58 +00:00
CIndexHigh.cpp
CIndexInclusionStack.cpp Show inclusions from a preamble in clang_getInclusions. 2016-01-06 15:12:51 +00:00
CIndexUSRs.cpp
CIndexer.cpp
CIndexer.h
CLog.h
CMakeLists.txt Tweak CMakeLists not for libclang to depend on the variable CLANG_TOOL_EXTRA_BUILD. 2016-03-03 11:09:43 +00:00
CXComment.cpp
CXComment.h
CXCompilationDatabase.cpp
CXCursor.cpp [OpenMP] Parsing + sema for target parallel for directive. 2016-02-03 15:46:42 +00:00
CXCursor.h
CXIndexDataConsumer.cpp [index] Fix regression where ObjC method declarations may mistakenly get indexed as definition. 2016-03-31 20:18:22 +00:00
CXIndexDataConsumer.h [libclang] Separate the underlying indexing functionality of libclang and introduce it into the clangIndex library. 2016-02-12 23:10:59 +00:00
CXLoadedDiagnostic.cpp Roll-back r250822. 2015-10-20 13:23:58 +00:00
CXLoadedDiagnostic.h
CXSourceLocation.cpp Fix some Clang-tidy readability-redundant-control-flow warnings; other minor fixes. 2016-02-10 19:11:58 +00:00
CXSourceLocation.h
CXStoredDiagnostic.cpp
CXString.cpp Try to fix leak in CXStringSet from r252853 2015-11-18 01:06:39 +00:00
CXString.h libclang: add new StringSet type 2015-11-12 03:57:16 +00:00
CXTranslationUnit.h
CXType.cpp Add attributes for preserve_mostcc/preserve_allcc calling conventions to the C/C++ front-end 2016-03-16 18:00:46 +00:00
CXType.h
CursorVisitor.h [libclang] Visit TypeAliasTemplateDecl 2015-11-15 13:48:32 +00:00
Index_Internal.h
Indexing.cpp [index] Allow calling createIndexingAction() without passing another action to wrap over. 2016-02-14 06:39:03 +00:00
libclang.exports [libclang] Introduce APIs for evaluating a cursor and checking if a macro is builtin/function. 2016-01-16 00:20:02 +00:00