From d1c8a151df830c6c727f0bb7d33774bd3eb96824 Mon Sep 17 00:00:00 2001 From: Anastasia Stulova Date: Wed, 3 Mar 2021 19:00:55 +0000 Subject: [OpenCL] Added distinct file extension for C++ for OpenCL. Files compiled with C++ for OpenCL mode can now have a distinct file extension - clcpp, then clang driver picks the compilation mode automatically (-x clcpp) without the use of -cl-std=clc++. Differential Revision: https://reviews.llvm.org/D96771 --- clang/lib/Frontend/CompilerInvocation.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'clang/lib/Frontend/CompilerInvocation.cpp') diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index ffaf368..56aa4b4 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -520,7 +520,9 @@ static bool FixupInvocation(CompilerInvocation &Invocation, static unsigned getOptimizationLevel(ArgList &Args, InputKind IK, DiagnosticsEngine &Diags) { unsigned DefaultOpt = llvm::CodeGenOpt::None; - if (IK.getLanguage() == Language::OpenCL && !Args.hasArg(OPT_cl_opt_disable)) + if ((IK.getLanguage() == Language::OpenCL || + IK.getLanguage() == Language::OpenCLCXX) && + !Args.hasArg(OPT_cl_opt_disable)) DefaultOpt = llvm::CodeGenOpt::Default; if (Arg *A = Args.getLastArg(options::OPT_O_Group)) { @@ -2510,6 +2512,9 @@ static void GenerateFrontendArgs(const FrontendOptions &Opts, case Language::OpenCL: Lang = "cl"; break; + case Language::OpenCLCXX: + Lang = "clcpp"; + break; case Language::CUDA: Lang = "cuda"; break; @@ -2698,6 +2703,7 @@ static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, DashX = llvm::StringSwitch(XValue) .Case("c", Language::C) .Case("cl", Language::OpenCL) + .Case("clcpp", Language::OpenCLCXX) .Case("cuda", Language::CUDA) .Case("hip", Language::HIP) .Case("c++", Language::CXX) @@ -3063,6 +3069,9 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, case Language::OpenCL: LangStd = LangStandard::lang_opencl10; break; + case Language::OpenCLCXX: + LangStd = LangStandard::lang_openclcpp; + break; case Language::CUDA: LangStd = LangStandard::lang_cuda; break; @@ -3198,7 +3207,11 @@ static bool IsInputCompatibleWithStandard(InputKind IK, return S.getLanguage() == Language::C; case Language::OpenCL: - return S.getLanguage() == Language::OpenCL; + return S.getLanguage() == Language::OpenCL || + S.getLanguage() == Language::OpenCLCXX; + + case Language::OpenCLCXX: + return S.getLanguage() == Language::OpenCLCXX; case Language::CXX: case Language::ObjCXX: @@ -3235,6 +3248,8 @@ static const StringRef GetInputKindName(InputKind IK) { return "Objective-C++"; case Language::OpenCL: return "OpenCL"; + case Language::OpenCLCXX: + return "C++ for OpenCL"; case Language::CUDA: return "CUDA"; case Language::RenderScript: -- cgit v1.1