Index: clang/include/clang/Basic/CodeGenOptions.def =================================================================== --- clang/include/clang/Basic/CodeGenOptions.def +++ clang/include/clang/Basic/CodeGenOptions.def @@ -87,6 +87,7 @@ CODEGENOPT(EmitGcovArcs , 1, 0) ///< Emit coverage data files, aka. GCDA. CODEGENOPT(EmitGcovNotes , 1, 0) ///< Emit coverage "notes" files, aka GCNO. CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata. +CODEGENOPT(EmitOpenCLExtraPtrInfo , 1, 0) ///< Emit OpenCL extra pointer info. CODEGENOPT(EmulatedTLS , 1, 0) ///< Set by default or -f[no-]emulated-tls. CODEGENOPT(ExplicitEmulatedTLS , 1, 0) ///< Set if -f[no-]emulated-tls is used. /// Embed Bitcode mode (off/all/bitcode/marker). Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -896,6 +896,9 @@ HelpText<"OpenCL only. Enable or disable OpenCL extensions/optional features. The argument is a comma-separated " "sequence of one or more extension names, each prefixed by '+' or '-'.">, MarshallingInfoStringVector>; +def cl_extra_ptr_info : Flag<["-"], "cl-extra-ptr-info">, Group, Flags<[CC1Option]>, + HelpText<"OpenCL only. Generate type hints for pointers.">, + MarshallingInfoFlag>; def client__name : JoinedOrSeparate<["-"], "client_name">; def combine : Flag<["-", "--"], "combine">, Flags<[NoXarchOption, Unsupported]>; Index: clang/lib/CodeGen/CodeGenFunction.cpp =================================================================== --- clang/lib/CodeGen/CodeGenFunction.cpp +++ clang/lib/CodeGen/CodeGenFunction.cpp @@ -600,8 +600,11 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD, llvm::Function *Fn) { - if (!FD->hasAttr()) + if (!FD->hasAttr()) { + if (CGM.getCodeGenOpts().EmitOpenCLExtraPtrInfo) + CGM.GenOpenCLArgMetadata(Fn, FD, this); return; + } llvm::LLVMContext &Context = getLLVMContext(); Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -3447,6 +3447,7 @@ options::OPT_cl_single_precision_constant, options::OPT_cl_finite_math_only, options::OPT_cl_kernel_arg_info, + options::OPT_cl_extra_ptr_info, options::OPT_cl_unsafe_math_optimizations, options::OPT_cl_fast_relaxed_math, options::OPT_cl_mad_enable,