aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorAnastasia Stulova <anastasia.stulova@arm.com>2021-03-03 19:00:55 +0000
committerAnastasia Stulova <anastasia.stulova@arm.com>2021-03-24 13:07:04 +0000
commitd1c8a151df830c6c727f0bb7d33774bd3eb96824 (patch)
tree9bae6c87c7ae299856492f7559b28e1cbaa9f904 /clang/lib/Frontend/CompilerInvocation.cpp
parent2f1b43908975a01db12dcacf8b34bce350a73fb1 (diff)
downloadllvm-d1c8a151df830c6c727f0bb7d33774bd3eb96824.zip
llvm-d1c8a151df830c6c727f0bb7d33774bd3eb96824.tar.gz
llvm-d1c8a151df830c6c727f0bb7d33774bd3eb96824.tar.bz2
[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
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp19
1 files changed, 17 insertions, 2 deletions
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<InputKind>(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: