From 4273afca591b6de933017df69da1df278e85850f Mon Sep 17 00:00:00 2001 From: fbusato Date: Thu, 9 Jan 2025 22:55:45 +0000 Subject: [PATCH 1/3] add compiler-specific path --- libcudacxx/include/cuda/std/__cccl/builtin.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libcudacxx/include/cuda/std/__cccl/builtin.h b/libcudacxx/include/cuda/std/__cccl/builtin.h index b19f7de4371..b3a2d830bff 100644 --- a/libcudacxx/include/cuda/std/__cccl/builtin.h +++ b/libcudacxx/include/cuda/std/__cccl/builtin.h @@ -101,8 +101,14 @@ # define _CCCL_BUILTIN_ADDRESSOF(...) __builtin_addressof(__VA_ARGS__) #endif // _CCCL_CHECK_BUILTIN(builtin_addressof) -#if _CCCL_CHECK_BUILTIN(builtin_assume) +#if _CCCL_CHECK_BUILTIN(builtin_assume) || _CCCL_COMPILER(CLANG) || _CCCL_COMPILER(NVHPC) # define _CCCL_BUILTIN_ASSUME(...) __builtin_assume(__VA_ARGS__) +#elif _CCCL_COMPILER(GCC, >=, 13) +# define _CCCL_BUILTIN_ASSUME(...) __attribute__((__assume__(__VA_ARGS__))) +#elif _CCCL_COMPILER(MSVC) +# define _CCCL_BUILTIN_ASSUME(...) __assume(__VA_ARGS__) +#else +# define _CCCL_BUILTIN_ASSUME(...) NV_IF_TARGET(NV_IS_DEVICE, (__builtin_assume(__VA_ARGS__);)) #endif // _CCCL_CHECK_BUILTIN(builtin_assume) // NVCC prior to 11.2 cannot handle __builtin_assume From 2c6ffa32cdcae942b5f07196906aefc8796a27ca Mon Sep 17 00:00:00 2001 From: fbusato Date: Fri, 10 Jan 2025 18:19:28 +0000 Subject: [PATCH 2/3] fix device code path --- libcudacxx/include/cuda/std/__cccl/attributes.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libcudacxx/include/cuda/std/__cccl/attributes.h b/libcudacxx/include/cuda/std/__cccl/attributes.h index a5888cc289e..79f9cadbdc1 100644 --- a/libcudacxx/include/cuda/std/__cccl/attributes.h +++ b/libcudacxx/include/cuda/std/__cccl/attributes.h @@ -134,4 +134,10 @@ # define _CCCL_RESTRICT __restrict__ #endif // ^^^ !_CCCL_COMPILER(MSVC) ^^^ +#if _CCCL_HAS_CPP_ATTRIBUTE(assume) +# define _CCCL_ASSUME(...) [[assume(__VA_ARGS__)]] +#else // ^^^ _CCCL_COMPILER(MSVC) ^^^ / vvv !_CCCL_COMPILER(MSVC) vvv +# define _CCCL_ASSUME(...) _CCCL_BUILTIN_ASSUME(__VA_ARGS__) +#endif // ^^^ !_CCCL_COMPILER(MSVC) ^^^ + #endif // __CCCL_ATTRIBUTES_H From 282785ec1b6c6e28b6fdcc953a3c1697840a8583 Mon Sep 17 00:00:00 2001 From: fbusato Date: Fri, 10 Jan 2025 18:19:39 +0000 Subject: [PATCH 3/3] add _CCC_ASSUME --- libcudacxx/include/cuda/std/__cccl/builtin.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libcudacxx/include/cuda/std/__cccl/builtin.h b/libcudacxx/include/cuda/std/__cccl/builtin.h index dee038ceb0a..7442a6b85e2 100644 --- a/libcudacxx/include/cuda/std/__cccl/builtin.h +++ b/libcudacxx/include/cuda/std/__cccl/builtin.h @@ -104,11 +104,11 @@ #if _CCCL_CHECK_BUILTIN(builtin_assume) || _CCCL_COMPILER(CLANG) || _CCCL_COMPILER(NVHPC) # define _CCCL_BUILTIN_ASSUME(...) __builtin_assume(__VA_ARGS__) #elif _CCCL_COMPILER(GCC, >=, 13) -# define _CCCL_BUILTIN_ASSUME(...) __attribute__((__assume__(__VA_ARGS__))) +# define _CCCL_BUILTIN_ASSUME(...) \ + NV_IF_ELSE_TARGET(NV_IS_DEVICE, (__builtin_assume(__VA_ARGS__);), (__attribute__((__assume__(__VA_ARGS__)));)) #elif _CCCL_COMPILER(MSVC) -# define _CCCL_BUILTIN_ASSUME(...) __assume(__VA_ARGS__) -#else -# define _CCCL_BUILTIN_ASSUME(...) NV_IF_TARGET(NV_IS_DEVICE, (__builtin_assume(__VA_ARGS__);)) +# define _CCCL_BUILTIN_ASSUME(...) \ + NV_IF_ELSE_TARGET(NV_IS_DEVICE, (__builtin_assume(__VA_ARGS__);), (__assume(__VA_ARGS__);)) #endif // _CCCL_CHECK_BUILTIN(builtin_assume) // NVCC prior to 11.2 cannot handle __builtin_assume