jansvoboda11 created this revision. jansvoboda11 added reviewers: dexonsmith, Bigcheese. Herald added a subscriber: dang. jansvoboda11 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D94678 Files: clang/include/clang/Driver/Options.td clang/lib/Frontend/CompilerInvocation.cpp Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -2137,6 +2137,20 @@ llvm_unreachable("unknown input language"); } +static std::string GetOptName(llvm::opt::OptSpecifier OptSpecifier) { + static const OptTable &OptTable = getDriverOptTable(); + return OptTable.getOption(OptSpecifier).getPrefixedName(); +} + +static void GenerateLangArgs(const LangOptions &Opts, + SmallVectorImpl<const char *> &Args, + CompilerInvocation::StringAllocator SA) { + if (Opts.IncludeDefaultHeader) + Args.push_back(SA(GetOptName(OPT_finclude_default_header))); + if (Opts.DeclareOpenCLBuiltins) + Args.push_back(SA(GetOptName(OPT_fdeclare_opencl_builtins))); +} + static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, const llvm::Triple &T, std::vector<std::string> &Includes, @@ -2212,6 +2226,10 @@ Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device); + // These need to be parsed now. They are used to set OpenCL defaults. + Opts.IncludeDefaultHeader = Args.hasArg(OPT_finclude_default_header); + Opts.DeclareOpenCLBuiltins = Args.hasArg(OPT_fdeclare_opencl_builtins); + CompilerInvocation::setLangDefaults(Opts, IK, T, Includes, LangStd); // -cl-strict-aliasing needs to emit diagnostic in the case where CL > 1.0. @@ -3163,6 +3181,8 @@ #undef DIAG_OPTION_WITH_MARSHALLING #undef OPTION_WITH_MARSHALLING #undef GENERATE_OPTION_WITH_MARSHALLING + + GenerateLangArgs(*LangOpts, Args, SA); } IntrusiveRefCntPtr<llvm::vfs::FileSystem> Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -5208,11 +5208,9 @@ NormalizedValues<["DCC_CDecl", "DCC_FastCall", "DCC_StdCall", "DCC_VectorCall", "DCC_RegCall"]>, MarshallingInfoString<LangOpts<"DefaultCallingConv">, "DCC_None">, AutoNormalizeEnum; def finclude_default_header : Flag<["-"], "finclude-default-header">, - HelpText<"Include default header file for OpenCL">, - MarshallingInfoFlag<LangOpts<"IncludeDefaultHeader">>; + HelpText<"Include default header file for OpenCL">; def fdeclare_opencl_builtins : Flag<["-"], "fdeclare-opencl-builtins">, - HelpText<"Add OpenCL builtin function declarations (experimental)">, - MarshallingInfoFlag<LangOpts<"DeclareOpenCLBuiltins">>; + HelpText<"Add OpenCL builtin function declarations (experimental)">; def fpreserve_vec3_type : Flag<["-"], "fpreserve-vec3-type">, HelpText<"Preserve 3-component vector type">, MarshallingInfoFlag<CodeGenOpts<"PreserveVec3Type">>;
Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -2137,6 +2137,20 @@ llvm_unreachable("unknown input language"); } +static std::string GetOptName(llvm::opt::OptSpecifier OptSpecifier) { + static const OptTable &OptTable = getDriverOptTable(); + return OptTable.getOption(OptSpecifier).getPrefixedName(); +} + +static void GenerateLangArgs(const LangOptions &Opts, + SmallVectorImpl<const char *> &Args, + CompilerInvocation::StringAllocator SA) { + if (Opts.IncludeDefaultHeader) + Args.push_back(SA(GetOptName(OPT_finclude_default_header))); + if (Opts.DeclareOpenCLBuiltins) + Args.push_back(SA(GetOptName(OPT_fdeclare_opencl_builtins))); +} + static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, const llvm::Triple &T, std::vector<std::string> &Includes, @@ -2212,6 +2226,10 @@ Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device); + // These need to be parsed now. They are used to set OpenCL defaults. + Opts.IncludeDefaultHeader = Args.hasArg(OPT_finclude_default_header); + Opts.DeclareOpenCLBuiltins = Args.hasArg(OPT_fdeclare_opencl_builtins); + CompilerInvocation::setLangDefaults(Opts, IK, T, Includes, LangStd); // -cl-strict-aliasing needs to emit diagnostic in the case where CL > 1.0. @@ -3163,6 +3181,8 @@ #undef DIAG_OPTION_WITH_MARSHALLING #undef OPTION_WITH_MARSHALLING #undef GENERATE_OPTION_WITH_MARSHALLING + + GenerateLangArgs(*LangOpts, Args, SA); } IntrusiveRefCntPtr<llvm::vfs::FileSystem> Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -5208,11 +5208,9 @@ NormalizedValues<["DCC_CDecl", "DCC_FastCall", "DCC_StdCall", "DCC_VectorCall", "DCC_RegCall"]>, MarshallingInfoString<LangOpts<"DefaultCallingConv">, "DCC_None">, AutoNormalizeEnum; def finclude_default_header : Flag<["-"], "finclude-default-header">, - HelpText<"Include default header file for OpenCL">, - MarshallingInfoFlag<LangOpts<"IncludeDefaultHeader">>; + HelpText<"Include default header file for OpenCL">; def fdeclare_opencl_builtins : Flag<["-"], "fdeclare-opencl-builtins">, - HelpText<"Add OpenCL builtin function declarations (experimental)">, - MarshallingInfoFlag<LangOpts<"DeclareOpenCLBuiltins">>; + HelpText<"Add OpenCL builtin function declarations (experimental)">; def fpreserve_vec3_type : Flag<["-"], "fpreserve-vec3-type">, HelpText<"Preserve 3-component vector type">, MarshallingInfoFlag<CodeGenOpts<"PreserveVec3Type">>;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits