summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Lebar <jlebar@google.com>2016-06-15 23:46:11 +0000
committerJustin Lebar <jlebar@google.com>2016-06-15 23:46:11 +0000
commit4db224e199e9f0903cc1e80c5d3869346ea67b5f (patch)
tree2048aa303721db3e3da6faa05a8a90c3b0229c29
parent322f21908d63851668fe0f590659ceb93655575c (diff)
downloadbcm5719-llvm-4db224e199e9f0903cc1e80c5d3869346ea67b5f.tar.gz
bcm5719-llvm-4db224e199e9f0903cc1e80c5d3869346ea67b5f.zip
[CUDA] Don't pass top-level -march down to device cc1 or ptxas.
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 llvm-svn: 272857
-rw-r--r--clang/lib/Driver/ToolChains.cpp4
-rw-r--r--clang/test/Driver/cuda-march.cu24
2 files changed, 27 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index fcc6dfe35d5..5043e53f164 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -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/clang/test/Driver/cuda-march.cu b/clang/test/Driver/cuda-march.cu
new file mode 100644
index 00000000000..e06f70f5358
--- /dev/null
+++ b/clang/test/Driver/cuda-march.cu
@@ -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"
OpenPOWER on IntegriCloud