OpenCL C 3.0 introduces optionality to some builtins, in particularly
to those which are conditionally supported with pipe, device enqueue
and generic address space features.
The idea is to conditionally support such builtins depending on the language options
being set for a certain feature. This allows users to define functions with names
of those optional builtins in OpenCL (as such names are not reserved).
I am thinking that we probably don't need this combined mode now... I think it is enough to just have GAS, PIPES and BLOCKS separately. Then in Builtin::Context::builtinIsSupported we will have 3 separate checks against LangOpts.OpenCLGenericAddressSpace, LangOpts.OpenCLPipes and LangOpts.Blocks as they can be used for both OpenCL 2.0 and OpenCL 3.0. This could simplify this list.
Then we can also remove OCL2P_WITH_GAS, OCL2P_WITH_PIPES and OCL2P_WITH_BLOCKS.