norecurse function attr indicates the function is not called recursively directly or indirectly.
Add norecurse to OpenCL functions, SYCL functions in device compilation and CUDA/HIP kernels.
Although there is LLVM pass adding norecurse to functions, it only works for whole-program compilation. Also FE adding norecurse can make that pass run faster since functions with norecurse do not need to be checked again.
Can we remove reference to OpenCL C++ since it's not implemented. Feel free to add C++ for OpenCL instead. The comment explanation still makes sense. You can just remove references to docs.