[PATCH] D75310: [CUDA, clang-cl] Filter out unsupported arguments for device-side compilation.

Artem Belevich via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 27 15:43:48 PST 2020


tra created this revision.
tra added a reviewer: rnk.
Herald added subscribers: sanjoy.google, bixia.
Herald added a project: clang.

Device-side compilation does not support some features and we need to
filter them out when command line options enable them for the host.

We're already doing this in various places in the regular clang driver,
but clang-cl mode constructs cc1 options independently and needs to
implement the filtering, too.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D75310

Files:
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/cl-options.cu


Index: clang/test/Driver/cl-options.cu
===================================================================
--- /dev/null
+++ clang/test/Driver/cl-options.cu
@@ -0,0 +1,27 @@
+// Verify that we don't pass unwanted options to device-side compilation when
+// clang-cl is used for CUDA compilation.
+// Note: %s must be preceded by --, otherwise it may be interpreted as a
+// command-line option, e.g. on Mac where %s is commonly under /Users.
+
+// -stack-protector should not be passed to device-side CUDA compilation
+// RUN: %clang_cl -### -nocudalib -nocudainc -- %s 2>&1 | FileCheck -check-prefix=GS-default %s
+// GS-default: "-cc1" "-triple" "nvptx64-nvidia-cuda"
+// GS-default-NOT: "-stack-protector"
+// GS-default: "-cc1" "-triple"
+// GS-default: "-stack-protector" "2"
+
+// -exceptions should be passed to device-side compilation.
+// RUN: %clang_cl /c /GX -### -nocudalib -nocudainc -- %s 2>&1 | FileCheck -check-prefix=GX %s
+// GX: "-cc1" "-triple" "nvptx64-nvidia-cuda"
+// GX-NOT: "-fcxx-exceptions"
+// GX-NOT: "-fexceptions"
+// GX: "-cc1" "-triple"
+// GX: "-fcxx-exceptions" "-fexceptions"
+
+// /Gd should not override default calling convention on device side.
+// RUN: %clang_cl /c /Gd -### -nocudalib -nocudainc -- %s 2>&1 | FileCheck -check-prefix=Gd %s
+// Gd: "-cc1" "-triple" "nvptx64-nvidia-cuda"
+// Gd-NOT: "-fcxx-exceptions"
+// Gd-NOT: "-fdefault-calling-conv=cdecl"
+// Gd: "-cc1" "-triple"
+// Gd: "-fdefault-calling-conv=cdecl"
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -6395,6 +6395,7 @@
                            codegenoptions::DebugInfoKind *DebugInfoKind,
                            bool *EmitCodeView) const {
   unsigned RTOptionID = options::OPT__SLASH_MT;
+  bool isNVPTX = getToolChain().getTriple().isNVPTX();
 
   if (Args.hasArg(options::OPT__SLASH_LDd))
     // The /LDd option implies /MTd. The dependent lib part can be overridden,
@@ -6462,8 +6463,8 @@
 
   // This controls whether or not we emit stack-protector instrumentation.
   // In MSVC, Buffer Security Check (/GS) is on by default.
-  if (Args.hasFlag(options::OPT__SLASH_GS, options::OPT__SLASH_GS_,
-                   /*Default=*/true)) {
+  if (!isNVPTX && Args.hasFlag(options::OPT__SLASH_GS, options::OPT__SLASH_GS_,
+                               /*Default=*/true)) {
     CmdArgs.push_back("-stack-protector");
     CmdArgs.push_back(Args.MakeArgString(Twine(LangOptions::SSPStrong)));
   }
@@ -6483,7 +6484,7 @@
 
   const Driver &D = getToolChain().getDriver();
   EHFlags EH = parseClangCLEHFlags(D, Args);
-  if (EH.Synch || EH.Asynch) {
+  if (!isNVPTX && (EH.Synch || EH.Asynch)) {
     if (types::isCXX(InputType))
       CmdArgs.push_back("-fcxx-exceptions");
     CmdArgs.push_back("-fexceptions");
@@ -6552,7 +6553,7 @@
                           options::OPT__SLASH_Gregcall)) {
     unsigned DCCOptId = CCArg->getOption().getID();
     const char *DCCFlag = nullptr;
-    bool ArchSupported = true;
+    bool ArchSupported = !isNVPTX;
     llvm::Triple::ArchType Arch = getToolChain().getArch();
     switch (DCCOptId) {
     case options::OPT__SLASH_Gd:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75310.247124.patch
Type: text/x-patch
Size: 3252 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200227/a167f0f2/attachment.bin>


More information about the cfe-commits mailing list