From: Justin Lebar Date: Wed, 15 Jun 2016 23:46:11 +0000 (+0000) Subject: [CUDA] Don't pass top-level -march down to device cc1 or ptxas. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9cf8a9741563831ff85ba580147a9bb916ccf78f;p=clang [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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272857 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index fcc6dfe35d..5043e53f16 100644 --- a/lib/Driver/ToolChains.cpp +++ b/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/test/Driver/cuda-march.cu b/test/Driver/cuda-march.cu new file mode 100644 index 0000000000..e06f70f535 --- /dev/null +++ b/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"