[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-03-11 Thread Artem Belevich via Phabricator via cfe-commits
tra added a comment.

This patch should fix it: https://reviews.llvm.org/D76030


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-03-11 Thread Artem Belevich via Phabricator via cfe-commits
tra marked an inline comment as done.
tra added inline comments.



Comment at: clang/lib/Driver/ToolChains/Cuda.cpp:51
+  // the latest version we support.
+  D.Diag(diag::warn_drv_unknown_cuda_version)
+  << MajorMinor << CudaVersionToString(CudaVersion::LATEST);

yaxunl wrote:
> We got some issue with this warning.
> 
> Basically CudaInstallationDetector is a member of GNU and other host 
> toolchain and this check is done in the ctor.
> 
> If a user has latest CUDA SDK installed, clang will always emit a warning. If 
> the user has -Werror set, which is quite common, compilation will always fail.
> 
> Is it possible only do this check for CUDA compilation?
> 
> Thanks.
Agreed. Clang should not warn about this unless it's a CUDA compilation. I'll 
get it fixed.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-03-11 Thread Yaxun Liu via Phabricator via cfe-commits
yaxunl added inline comments.



Comment at: clang/lib/Driver/ToolChains/Cuda.cpp:51
+  // the latest version we support.
+  D.Diag(diag::warn_drv_unknown_cuda_version)
+  << MajorMinor << CudaVersionToString(CudaVersion::LATEST);

We got some issue with this warning.

Basically CudaInstallationDetector is a member of GNU and other host toolchain 
and this check is done in the ctor.

If a user has latest CUDA SDK installed, clang will always emit a warning. If 
the user has -Werror set, which is quite common, compilation will always fail.

Is it possible only do this check for CUDA compilation?

Thanks.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-29 Thread Hans Wennborg via Phabricator via cfe-commits
hans added a comment.

In D73231#1845096 , @tra wrote:

> @hans : that's another candidate for 10.x cherry-pick, if you're OK with it.


Sounds good to me. Cherry-picked in 5777899f146aaa53f598e6978702a7a2725200d7 



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-28 Thread Artem Belevich via Phabricator via cfe-commits
tra added a subscriber: hans.
tra added a comment.

@hans : that's another candidate for 10.x cherry-pick, if you're OK with it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-28 Thread Artem Belevich via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG12fefeef203a: [CUDA] Assume the latest known CUDA version if 
weve found an unknown one. (authored by tra).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231

Files:
  clang/include/clang/Basic/Cuda.h
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/lib/Basic/Cuda.cpp
  clang/lib/Driver/ToolChains/Cuda.cpp
  clang/lib/Headers/__clang_cuda_runtime_wrapper.h
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/bin/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/include/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/lib/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/lib64/.keep
  
clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/nvvm/libdevice/libdevice.10.bc
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
  clang/test/Driver/cuda-version-check.cu

Index: clang/test/Driver/cuda-version-check.cu
===
--- clang/test/Driver/cuda-version-check.cu
+++ clang/test/Driver/cuda-version-check.cu
@@ -8,6 +8,8 @@
 // RUN:FileCheck %s --check-prefix=OK
 // RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda 2>&1 %s | \
 // RUN:FileCheck %s --check-prefix=OK
+// RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA-unknown/usr/local/cuda 2>&1 %s | \
+// RUN:FileCheck %s --check-prefix=UNKNOWN_VERSION
 
 // The installation at Inputs/CUDA is CUDA 7.0, which doesn't support sm_60.
 // RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA/usr/local/cuda 2>&1 %s | \
@@ -58,3 +60,5 @@
 
 // ERR_SM61: error: GPU arch sm_61 {{.*}}
 // ERR_SM61-NOT: error: GPU arch sm_61
+
+// UNKNOWN_VERSION: Unknown CUDA version 999.999. Assuming the latest supported version
Index: clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
===
--- /dev/null
+++ clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
@@ -0,0 +1 @@
+CUDA Version 999.999.999
Index: clang/lib/Headers/__clang_cuda_runtime_wrapper.h
===
--- clang/lib/Headers/__clang_cuda_runtime_wrapper.h
+++ clang/lib/Headers/__clang_cuda_runtime_wrapper.h
@@ -48,7 +48,7 @@
 #include "cuda.h"
 #if !defined(CUDA_VERSION)
 #error "cuda.h did not define CUDA_VERSION"
-#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10010
+#elif CUDA_VERSION < 7000
 #error "Unsupported CUDA version!"
 #endif
 
Index: clang/lib/Driver/ToolChains/Cuda.cpp
===
--- clang/lib/Driver/ToolChains/Cuda.cpp
+++ clang/lib/Driver/ToolChains/Cuda.cpp
@@ -33,37 +33,24 @@
 
 // Parses the contents of version.txt in an CUDA installation.  It should
 // contain one line of the from e.g. "CUDA Version 7.5.2".
-static CudaVersion ParseCudaVersionFile(llvm::StringRef V) {
+static CudaVersion ParseCudaVersionFile(const Driver , llvm::StringRef V) {
   if (!V.startswith("CUDA Version "))
 return CudaVersion::UNKNOWN;
   V = V.substr(strlen("CUDA Version "));
-  int Major = -1, Minor = -1;
-  auto First = V.split('.');
-  auto Second = First.second.split('.');
-  if (First.first.getAsInteger(10, Major) ||
-  Second.first.getAsInteger(10, Minor))
+  SmallVector VersionParts;
+  V.split(VersionParts, '.');
+  if (VersionParts.size() < 2)
 return CudaVersion::UNKNOWN;
-
-  if (Major == 7 && Minor == 0) {
-// This doesn't appear to ever happen -- version.txt doesn't exist in the
-// CUDA 7 installs I've seen.  But no harm in checking.
-return CudaVersion::CUDA_70;
-  }
-  if (Major == 7 && Minor == 5)
-return CudaVersion::CUDA_75;
-  if (Major == 8 && Minor == 0)
-return CudaVersion::CUDA_80;
-  if (Major == 9 && Minor == 0)
-return CudaVersion::CUDA_90;
-  if (Major == 9 && Minor == 1)
-return CudaVersion::CUDA_91;
-  if (Major == 9 && Minor == 2)
-return CudaVersion::CUDA_92;
-  if (Major == 10 && Minor == 0)
-return CudaVersion::CUDA_100;
-  if (Major == 10 && Minor == 1)
-return CudaVersion::CUDA_101;
-  return CudaVersion::UNKNOWN;
+  std::string MajorMinor = join_items(".", VersionParts[0], VersionParts[1]);
+  CudaVersion Version = CudaStringToVersion(MajorMinor);
+  if (Version != CudaVersion::UNKNOWN)
+return Version;
+
+  // Issue a warning and assume that the version we've found is compatible with
+  // the latest version we support.
+  D.Diag(diag::warn_drv_unknown_cuda_version)
+  << MajorMinor << CudaVersionToString(CudaVersion::LATEST);
+  return CudaVersion::LATEST;
 }
 
 CudaInstallationDetector::CudaInstallationDetector(
@@ -161,7 +148,7 @@
   // 

[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-28 Thread Yaxun Liu via Phabricator via cfe-commits
yaxunl accepted this revision.
yaxunl added a comment.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-27 Thread Artem Belevich via Phabricator via cfe-commits
tra updated this revision to Diff 240731.
tra edited the summary of this revision.
tra added a comment.

Use std::string instead of Twine which can't be stored.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231

Files:
  clang/include/clang/Basic/Cuda.h
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/lib/Basic/Cuda.cpp
  clang/lib/Driver/ToolChains/Cuda.cpp
  clang/lib/Headers/__clang_cuda_runtime_wrapper.h
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/bin/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/include/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/lib/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/lib64/.keep
  
clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/nvvm/libdevice/libdevice.10.bc
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
  clang/test/Driver/cuda-version-check.cu

Index: clang/test/Driver/cuda-version-check.cu
===
--- clang/test/Driver/cuda-version-check.cu
+++ clang/test/Driver/cuda-version-check.cu
@@ -8,6 +8,8 @@
 // RUN:FileCheck %s --check-prefix=OK
 // RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda 2>&1 %s | \
 // RUN:FileCheck %s --check-prefix=OK
+// RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA-unknown/usr/local/cuda 2>&1 %s | \
+// RUN:FileCheck %s --check-prefix=UNKNOWN_VERSION
 
 // The installation at Inputs/CUDA is CUDA 7.0, which doesn't support sm_60.
 // RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA/usr/local/cuda 2>&1 %s | \
@@ -58,3 +60,5 @@
 
 // ERR_SM61: error: GPU arch sm_61 {{.*}}
 // ERR_SM61-NOT: error: GPU arch sm_61
+
+// UNKNOWN_VERSION: Unknown CUDA version 999.999. Assuming the latest supported version
Index: clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
===
--- /dev/null
+++ clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
@@ -0,0 +1 @@
+CUDA Version 999.999.999
Index: clang/lib/Headers/__clang_cuda_runtime_wrapper.h
===
--- clang/lib/Headers/__clang_cuda_runtime_wrapper.h
+++ clang/lib/Headers/__clang_cuda_runtime_wrapper.h
@@ -48,7 +48,7 @@
 #include "cuda.h"
 #if !defined(CUDA_VERSION)
 #error "cuda.h did not define CUDA_VERSION"
-#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10010
+#elif CUDA_VERSION < 7000
 #error "Unsupported CUDA version!"
 #endif
 
Index: clang/lib/Driver/ToolChains/Cuda.cpp
===
--- clang/lib/Driver/ToolChains/Cuda.cpp
+++ clang/lib/Driver/ToolChains/Cuda.cpp
@@ -33,37 +33,24 @@
 
 // Parses the contents of version.txt in an CUDA installation.  It should
 // contain one line of the from e.g. "CUDA Version 7.5.2".
-static CudaVersion ParseCudaVersionFile(llvm::StringRef V) {
+static CudaVersion ParseCudaVersionFile(const Driver , llvm::StringRef V) {
   if (!V.startswith("CUDA Version "))
 return CudaVersion::UNKNOWN;
   V = V.substr(strlen("CUDA Version "));
-  int Major = -1, Minor = -1;
-  auto First = V.split('.');
-  auto Second = First.second.split('.');
-  if (First.first.getAsInteger(10, Major) ||
-  Second.first.getAsInteger(10, Minor))
+  SmallVector VersionParts;
+  V.split(VersionParts, '.');
+  if (VersionParts.size() < 2)
 return CudaVersion::UNKNOWN;
+  std::string MajorMinor = join_items(".", VersionParts[0], VersionParts[1]);
+  CudaVersion Version = CudaStringToVersion(MajorMinor);
+  if (Version != CudaVersion::UNKNOWN)
+return Version;
 
-  if (Major == 7 && Minor == 0) {
-// This doesn't appear to ever happen -- version.txt doesn't exist in the
-// CUDA 7 installs I've seen.  But no harm in checking.
-return CudaVersion::CUDA_70;
-  }
-  if (Major == 7 && Minor == 5)
-return CudaVersion::CUDA_75;
-  if (Major == 8 && Minor == 0)
-return CudaVersion::CUDA_80;
-  if (Major == 9 && Minor == 0)
-return CudaVersion::CUDA_90;
-  if (Major == 9 && Minor == 1)
-return CudaVersion::CUDA_91;
-  if (Major == 9 && Minor == 2)
-return CudaVersion::CUDA_92;
-  if (Major == 10 && Minor == 0)
-return CudaVersion::CUDA_100;
-  if (Major == 10 && Minor == 1)
-return CudaVersion::CUDA_101;
-  return CudaVersion::UNKNOWN;
+  // Issue a warning and assume that the version we've found is compatible with
+  // the latest version we support.
+  D.Diag(diag::warn_drv_unknown_cuda_version)
+  << MajorMinor << CudaVersionToString(CudaVersion::LATEST);
+  return CudaVersion::LATEST;
 }
 
 CudaInstallationDetector::CudaInstallationDetector(
@@ -161,7 +148,7 @@
   // version.txt isn't present.
   Version 

[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-27 Thread Yaxun Liu via Phabricator via cfe-commits
yaxunl accepted this revision.
yaxunl added a comment.
This revision is now accepted and ready to land.

LGTM. Thanks.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73231/new/

https://reviews.llvm.org/D73231



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D73231: [CUDA] Assume the latest known CUDA version if we've found an unknown one.

2020-01-22 Thread Artem Belevich via Phabricator via cfe-commits
tra created this revision.
tra added reviewers: timshen, yaxunl.
Herald added subscribers: sanjoy.google, bixia.
Herald added a project: clang.

This makes clang somewhat forward-compatible with new CUDA releases without
having to patch it for every minor release without adding any new function.

If an unknown version is found, clang issues a warning (can be disabled with 
-Wno-cuda-unknown-version)
and assumes that it has detected the latest known version. CUDA releases are 
usually supersets 
of older ones feature-wise, so it should be sufficient to keep released clang 
versions 
working with minor CUDA updates without having to upgrade clang, too.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D73231

Files:
  clang/include/clang/Basic/Cuda.h
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/lib/Basic/Cuda.cpp
  clang/lib/Driver/ToolChains/Cuda.cpp
  clang/lib/Headers/__clang_cuda_runtime_wrapper.h
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/bin/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/include/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/lib/.keep
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/lib64/.keep
  
clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/nvvm/libdevice/libdevice.10.bc
  clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
  clang/test/Driver/cuda-version-check.cu

Index: clang/test/Driver/cuda-version-check.cu
===
--- clang/test/Driver/cuda-version-check.cu
+++ clang/test/Driver/cuda-version-check.cu
@@ -8,6 +8,8 @@
 // RUN:FileCheck %s --check-prefix=OK
 // RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda 2>&1 %s | \
 // RUN:FileCheck %s --check-prefix=OK
+// RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA-unknown/usr/local/cuda 2>&1 %s | \
+// RUN:FileCheck %s --check-prefix=UNKNOWN_VERSION
 
 // The installation at Inputs/CUDA is CUDA 7.0, which doesn't support sm_60.
 // RUN: %clang --target=x86_64-linux -v -### --cuda-gpu-arch=sm_60 --cuda-path=%S/Inputs/CUDA/usr/local/cuda 2>&1 %s | \
@@ -58,3 +60,5 @@
 
 // ERR_SM61: error: GPU arch sm_61 {{.*}}
 // ERR_SM61-NOT: error: GPU arch sm_61
+
+// UNKNOWN_VERSION: Unknown CUDA version 999.999. Assuming the latest supported version
Index: clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
===
--- /dev/null
+++ clang/test/Driver/Inputs/CUDA-unknown/usr/local/cuda/version.txt
@@ -0,0 +1 @@
+CUDA Version 999.999.999
Index: clang/lib/Headers/__clang_cuda_runtime_wrapper.h
===
--- clang/lib/Headers/__clang_cuda_runtime_wrapper.h
+++ clang/lib/Headers/__clang_cuda_runtime_wrapper.h
@@ -48,7 +48,7 @@
 #include "cuda.h"
 #if !defined(CUDA_VERSION)
 #error "cuda.h did not define CUDA_VERSION"
-#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10010
+#elif CUDA_VERSION < 7000
 #error "Unsupported CUDA version!"
 #endif
 
Index: clang/lib/Driver/ToolChains/Cuda.cpp
===
--- clang/lib/Driver/ToolChains/Cuda.cpp
+++ clang/lib/Driver/ToolChains/Cuda.cpp
@@ -33,37 +33,24 @@
 
 // Parses the contents of version.txt in an CUDA installation.  It should
 // contain one line of the from e.g. "CUDA Version 7.5.2".
-static CudaVersion ParseCudaVersionFile(llvm::StringRef V) {
+static CudaVersion ParseCudaVersionFile(const Driver , llvm::StringRef V) {
   if (!V.startswith("CUDA Version "))
 return CudaVersion::UNKNOWN;
   V = V.substr(strlen("CUDA Version "));
-  int Major = -1, Minor = -1;
-  auto First = V.split('.');
-  auto Second = First.second.split('.');
-  if (First.first.getAsInteger(10, Major) ||
-  Second.first.getAsInteger(10, Minor))
+  SmallVector VersionParts;
+  V.split(VersionParts, '.');
+  if (VersionParts.size() < 2)
 return CudaVersion::UNKNOWN;
+  Twine MajorMinor = VersionParts[0] + "." + VersionParts[1];
+  CudaVersion Version = CudaStringToVersion(MajorMinor);
+  if (Version != CudaVersion::UNKNOWN)
+return Version;
 
-  if (Major == 7 && Minor == 0) {
-// This doesn't appear to ever happen -- version.txt doesn't exist in the
-// CUDA 7 installs I've seen.  But no harm in checking.
-return CudaVersion::CUDA_70;
-  }
-  if (Major == 7 && Minor == 5)
-return CudaVersion::CUDA_75;
-  if (Major == 8 && Minor == 0)
-return CudaVersion::CUDA_80;
-  if (Major == 9 && Minor == 0)
-return CudaVersion::CUDA_90;
-  if (Major == 9 && Minor == 1)
-return CudaVersion::CUDA_91;
-  if (Major == 9 && Minor == 2)
-return CudaVersion::CUDA_92;
-  if (Major == 10 && Minor == 0)
-return CudaVersion::CUDA_100;
-  if (Major == 10 && Minor == 1)
-return CudaVersion::CUDA_101;
-