]> granicus.if.org Git - clang/commitdiff
[CUDA] Don't pass top-level -march down to device cc1 or ptxas.
authorJustin Lebar <jlebar@google.com>
Wed, 15 Jun 2016 23:46:11 +0000 (23:46 +0000)
committerJustin Lebar <jlebar@google.com>
Wed, 15 Jun 2016 23:46:11 +0000 (23:46 +0000)
Summary:
Previously if you did e.g.

  $ clang -march=haswell -x cuda foo.cu

we would pass "-march=haswell -march=sm_20" down to the ptxas tool.
This causes it to assert, and rightly so!

Reviewers: tra

Subscribers: cfe-commits, echristo

Differential Revision: http://reviews.llvm.org/D21419

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272857 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains.cpp
test/Driver/cuda-march.cu [new file with mode: 0644]

index fcc6dfe35d59cb2eb21b955ec0089940bb00ba29..5043e53f164ae46a16a948c37ad79b3c59edb1aa 100644 (file)
@@ -4676,8 +4676,10 @@ CudaToolChain::TranslateArgs(const llvm::opt::DerivedArgList &Args,
     DAL->append(A);
   }
 
-  if (BoundArch)
+  if (BoundArch) {
+    DAL->eraseArg(options::OPT_march_EQ);
     DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), BoundArch);
+  }
   return DAL;
 }
 
diff --git a/test/Driver/cuda-march.cu b/test/Driver/cuda-march.cu
new file mode 100644 (file)
index 0000000..e06f70f
--- /dev/null
@@ -0,0 +1,24 @@
+// Checks that cuda compilation does the right thing when passed -march.
+// (Specifically, we want to pass it to host compilation, but not to device
+// compilation or ptxas!)
+//
+// REQUIRES: clang-driver
+// REQUIRES: x86-registered-target
+// REQUIRES: nvptx-registered-target
+
+// RUN: %clang -### -target x86_64-linux-gnu -c -march=haswell %s 2>&1 | FileCheck %s
+
+// RUN: %clang -### -target x86_64-linux-gnu -c -march=haswell --cuda-gpu-arch=sm_20 %s 2>&1 | \
+// RUN: FileCheck %s
+
+// CHECK:clang
+// CHECK: "-cc1"
+// CHECK-SAME: "-triple" "nvptx
+// CHECK-SAME: "-target-cpu" "sm_20"
+
+// CHECK: ptxas
+// CHECK-SAME: "--gpu-name" "sm_20"
+
+// CHECK:clang
+// CHECK-SAME: "-cc1"
+// CHECK-SAME: "-target-cpu" "haswell"