aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2021-01-26 09:35:32 +0100
committerJan Svoboda <jan_svoboda@apple.com>2021-01-26 10:36:16 +0100
commit7025fef3f65344989dd2467ef5e897161f17592e (patch)
tree45e3dccb0bdb4c15af718e6a0983c927c5e5aa90 /clang/lib/Frontend/CompilerInvocation.cpp
parent029644ee510792120f1c0daf32989b401d4ce871 (diff)
downloadllvm-7025fef3f65344989dd2467ef5e897161f17592e.zip
llvm-7025fef3f65344989dd2467ef5e897161f17592e.tar.gz
llvm-7025fef3f65344989dd2467ef5e897161f17592e.tar.bz2
[clang][cli] Port GPU-related language options to marshalling system
Port some GPU-related language options to the marshalling system for automatic command line parsing and generation. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D95345
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp57
1 files changed, 16 insertions, 41 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 1e87bb9..f6e392f 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -444,6 +444,22 @@ static void FixupInvocation(CompilerInvocation &Invocation,
Diags.Report(diag::err_drv_argument_not_allowed_with)
<< "-fgnu89-inline" << GetInputKindName(IK);
+ if (Args.hasArg(OPT_fgpu_allow_device_init) && !LangOpts.HIP)
+ Diags.Report(diag::warn_ignored_hip_only_option)
+ << Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);
+
+ if (Args.hasArg(OPT_gpu_max_threads_per_block_EQ) && !LangOpts.HIP)
+ Diags.Report(diag::warn_ignored_hip_only_option)
+ << Args.getLastArg(OPT_gpu_max_threads_per_block_EQ)->getAsString(Args);
+
+ // -cl-strict-aliasing needs to emit diagnostic in the case where CL > 1.0.
+ // This option should be deprecated for CL > 1.0 because
+ // this option was added for compatibility with OpenCL 1.0.
+ if (Args.getLastArg(OPT_cl_strict_aliasing) && LangOpts.OpenCLVersion > 100)
+ Diags.Report(diag::warn_option_invalid_ocl_version)
+ << LangOpts.getOpenCLVersionTuple().getAsString()
+ << Args.getLastArg(OPT_cl_strict_aliasing)->getAsString(Args);
+
if (Arg *A = Args.getLastArg(OPT_fdefault_calling_conv_EQ)) {
auto DefaultCC = LangOpts.getDefaultCallingConv();
@@ -2014,8 +2030,6 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
Opts.AltiVec = 0;
Opts.ZVector = 0;
Opts.setDefaultFPContractMode(LangOptions::FPM_On);
- Opts.NativeHalfType = 1;
- Opts.NativeHalfArgsAndReturns = 1;
Opts.OpenCLCPlusPlus = Opts.CPlusPlus;
// Include default header file for OpenCL.
@@ -2047,10 +2061,6 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
}
Opts.RenderScript = IK.getLanguage() == Language::RenderScript;
- if (Opts.RenderScript) {
- Opts.NativeHalfType = 1;
- Opts.NativeHalfArgsAndReturns = 1;
- }
// OpenCL and C++ both have bool, true, false keywords.
Opts.Bool = Opts.OpenCL || Opts.CPlusPlus;
@@ -2246,38 +2256,9 @@ void CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
}
}
- Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device);
-
- // -cl-strict-aliasing needs to emit diagnostic in the case where CL > 1.0.
- // This option should be deprecated for CL > 1.0 because
- // this option was added for compatibility with OpenCL 1.0.
- if (Args.getLastArg(OPT_cl_strict_aliasing)
- && Opts.OpenCLVersion > 100) {
- Diags.Report(diag::warn_option_invalid_ocl_version)
- << Opts.getOpenCLVersionTuple().getAsString()
- << Args.getLastArg(OPT_cl_strict_aliasing)->getAsString(Args);
- }
-
if (Args.hasArg(OPT_fno_operator_names))
Opts.CXXOperatorNames = 0;
- if (Opts.CUDAIsDevice && Args.hasArg(OPT_fcuda_approx_transcendentals))
- Opts.CUDADeviceApproxTranscendentals = 1;
-
- if (Args.hasArg(OPT_fgpu_allow_device_init)) {
- if (Opts.HIP)
- Opts.GPUAllowDeviceInit = 1;
- else
- Diags.Report(diag::warn_ignored_hip_only_option)
- << Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);
- }
- if (Opts.HIP)
- Opts.GPUMaxThreadsPerBlock = getLastArgIntValue(
- Args, OPT_gpu_max_threads_per_block_EQ, Opts.GPUMaxThreadsPerBlock);
- else if (Args.hasArg(OPT_gpu_max_threads_per_block_EQ))
- Diags.Report(diag::warn_ignored_hip_only_option)
- << Args.getLastArg(OPT_gpu_max_threads_per_block_EQ)->getAsString(Args);
-
if (Opts.ObjC) {
if (Arg *arg = Args.getLastArg(OPT_fobjc_runtime_EQ)) {
StringRef value = arg->getValue();
@@ -2438,12 +2419,6 @@ void CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
Opts.setDefaultFPContractMode(LangOptions::FPM_Fast);
Opts.XLPragmaPack = Args.hasArg(OPT_fxl_pragma_pack);
llvm::sort(Opts.ModuleFeatures);
- Opts.NativeHalfType |= Args.hasArg(OPT_fnative_half_type);
- Opts.NativeHalfArgsAndReturns |= Args.hasArg(OPT_fnative_half_arguments_and_returns);
- // Enable HalfArgsAndReturns if present in Args or if NativeHalfArgsAndReturns
- // is enabled.
- Opts.HalfArgsAndReturns = Args.hasArg(OPT_fallow_half_arguments_and_returns)
- | Opts.NativeHalfArgsAndReturns;
Opts.ArmSveVectorBits =
getLastArgIntValue(Args, options::OPT_msve_vector_bits_EQ, 0, Diags);