OpenCL vector data types

Hi everybody,

for my master thesis I am extending clang in order to support OpenCL, at least the most important features.
I am adding the support for vector data types.

As I saw in many of the test cases in the suite the standard way to support them is using the ext_vector_type attribute, like this:

typedef attribute(( ext_vector_type(4) )) int int4;

My problem is that OpenCL supports a variety of vector data types: charn, intn, floatn …
There are 9 basic types supported and ‘n’ can assume 6 different values.
Moreover every vector type has an alias: cl_charn, cl_intn, … and so on.
This will end up in 108 typedefs to add in the Preprocessor intialization phase.
Can this be a problem?
Is there a better way to suppor all this types ?

Thank you in advance,


stdlib.h has 117 typedefs, iostream has 480, so I don't think 108 is
that much:
clang -E /usr/include/stdlib.h|grep typedef|wc -l


108 typedefs should be no problem. The implicit header for opencl is typically quite big to support the whole standard library etc. The best way to handle this is to put the resultant header in a PCH file when you start caring about compile time.