diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index a47b716f12956..662e71d734d45 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -1179,9 +1179,13 @@ static void InitializePredefinedMacros(const TargetInfo &TI, Builder.defineMacro("__SYCL_DEVICE_ONLY__", "1"); Builder.defineMacro("SYCL_EXTERNAL", "__attribute__((sycl_device))"); - if (TI.getTriple().isNVPTX()) { - Builder.defineMacro("__SYCL_NVPTX__", "1"); - } + const llvm::Triple &DeviceTriple = TI.getTriple(); + if (DeviceTriple.isNVPTX()) + Builder.defineMacro("__SYCL_NVPTX__", "1"); + const llvm::Triple::SubArchType DeviceSubArch = DeviceTriple.getSubArch(); + if (DeviceTriple.isSPIR() && + DeviceSubArch != llvm::Triple::SPIRSubArch_fpga) + Builder.defineMacro("SYCL_USE_NATIVE_FP_ATOMICS"); } if (LangOpts.SYCLUnnamedLambda) Builder.defineMacro("__SYCL_UNNAMED_LAMBDA__", "1"); diff --git a/clang/test/Preprocessor/sycl-macro-target-specific.cpp b/clang/test/Preprocessor/sycl-macro-target-specific.cpp new file mode 100644 index 0000000000000..470e26481f881 --- /dev/null +++ b/clang/test/Preprocessor/sycl-macro-target-specific.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 %s -fsycl-is-device -triple spir64-unknown-unknown-sycldevice -E -dM \ +// RUN: | FileCheck --check-prefix=CHECK-SYCL-FP-ATOMICS %s +// RUN: %clang_cc1 %s -fsycl-is-device -triple spir64_gen-unknown-unknown-sycldevice -E -dM \ +// RUN: | FileCheck --check-prefix=CHECK-SYCL-FP-ATOMICS %s +// RUN: %clang_cc1 %s -fsycl-is-device -triple spir64_x86_64-unknown-unknown-sycldevice -E -dM \ +// RUN: | FileCheck --check-prefix=CHECK-SYCL-FP-ATOMICS %s +// RUN: %clang_cc1 %s -fsycl-is-device -triple spir64_fpga-unknown-unknown-sycldevice -E -dM \ +// RUN: | FileCheck --check-prefix=CHECK-SYCL-FP-ATOMICS-NEG %s +// RUN: %clang_cc1 %s -fsycl-is-device -triple nvptx64-nvidia-nvcl-sycldevice -E -dM \ +// RUN: | FileCheck --check-prefix=CHECK-SYCL-FP-ATOMICS-NEG %s + +// CHECK-SYCL-FP-ATOMICS: #define SYCL_USE_NATIVE_FP_ATOMICS +// CHECK-SYCL-FP-ATOMICS-NEG-NOT: #define SYCL_USE_NATIVE_FP_ATOMICS diff --git a/sycl/test/atomic_ref/add.cpp b/sycl/test/atomic_ref/add.cpp index 61aadb6d21086..2508354fd9ffd 100644 --- a/sycl/test/atomic_ref/add.cpp +++ b/sycl/test/atomic_ref/add.cpp @@ -1,7 +1,7 @@ -// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -DSYCL_USE_NATIVE_FP_ATOMICS \ -// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ -// RUN: | FileCheck %s --check-prefix=CHECK-LLVM-EMU +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -USYCL_USE_NATIVE_FP_ATOMICS \ +// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM-EMU // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out diff --git a/sycl/test/atomic_ref/max.cpp b/sycl/test/atomic_ref/max.cpp index 07621eff44842..4345a3aa93e04 100644 --- a/sycl/test/atomic_ref/max.cpp +++ b/sycl/test/atomic_ref/max.cpp @@ -1,7 +1,7 @@ -// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -DSYCL_USE_NATIVE_FP_ATOMICS \ -// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ -// RUN: | FileCheck %s --check-prefix=CHECK-LLVM-EMU +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -USYCL_USE_NATIVE_FP_ATOMICS \ +// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM-EMU // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out diff --git a/sycl/test/atomic_ref/min.cpp b/sycl/test/atomic_ref/min.cpp index d6c1b25ed998b..392eb1ad6d873 100644 --- a/sycl/test/atomic_ref/min.cpp +++ b/sycl/test/atomic_ref/min.cpp @@ -1,7 +1,7 @@ -// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -DSYCL_USE_NATIVE_FP_ATOMICS \ -// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ -// RUN: | FileCheck %s --check-prefix=CHECK-LLVM-EMU +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -USYCL_USE_NATIVE_FP_ATOMICS \ +// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM-EMU // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out diff --git a/sycl/test/atomic_ref/sub.cpp b/sycl/test/atomic_ref/sub.cpp index e69c5d3f79e4a..558b53987b553 100644 --- a/sycl/test/atomic_ref/sub.cpp +++ b/sycl/test/atomic_ref/sub.cpp @@ -1,7 +1,7 @@ -// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -DSYCL_USE_NATIVE_FP_ATOMICS \ -// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ -// RUN: | FileCheck %s --check-prefix=CHECK-LLVM-EMU +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -USYCL_USE_NATIVE_FP_ATOMICS \ +// RUN: -fsycl-device-only -S %s -o - | FileCheck %s --check-prefix=CHECK-LLVM-EMU // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out