Just notifying you of a potential compiler conformance issue. When compiling pointer arithmetic such as:
__global *p = q + mad(a, b, c);
with a, b and c all uint, I get the error "Expression must have integral type". This is cleared up by casting the mad result to an int. AFAIK I don't believe there is anything in the C99 or OpenCL standard stopping uint from being used in pointer arithmetic...