diff --git a/sycl/test/atomic_ref/add.cpp b/sycl/test/atomic_ref/add.cpp index b678198a6a20e..6039c26839850 100644 --- a/sycl/test/atomic_ref/add.cpp +++ b/sycl/test/atomic_ref/add.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -165,10 +167,22 @@ void add_test(queue q, size_t N) { // Floating-point types do not support pre- or post-increment template <> void add_test(queue q, size_t N) { add_fetch_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32) add_plus_equal_test(q, N); } template <> void add_test(queue q, size_t N) { add_fetch_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64) add_plus_equal_test(q, N); } @@ -181,12 +195,31 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) add_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) add_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) add_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) add_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) add_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) add_test(q, N); + // The remaining functions have been instantiated earlier add_test(q, N); add_test(q, N); add_test(q, N); diff --git a/sycl/test/atomic_ref/compare_exchange.cpp b/sycl/test/atomic_ref/compare_exchange.cpp index 026138127e206..03c9f4896a63f 100644 --- a/sycl/test/atomic_ref/compare_exchange.cpp +++ b/sycl/test/atomic_ref/compare_exchange.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -60,12 +62,33 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32) compare_exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32) compare_exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i32, + // CHECK-LLVM-SAME: i[[long]], i[[long]]) compare_exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i32, + // CHECK-LLVM-SAME: i[[long]], i[[long]]) compare_exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64) compare_exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64) compare_exchange_test(q, N); + // The remaining functions use the already-declared ones on the IR level compare_exchange_test(q, N); compare_exchange_test(q, N); compare_exchange_test(q, N); diff --git a/sycl/test/atomic_ref/exchange.cpp b/sycl/test/atomic_ref/exchange.cpp index 62f03bee1f989..5abff57137ca5 100644 --- a/sycl/test/atomic_ref/exchange.cpp +++ b/sycl/test/atomic_ref/exchange.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -52,12 +54,31 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) exchange_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) exchange_test(q, N); + // The remaining functions use the already-declared ones on the IR level exchange_test(q, N); exchange_test(q, N); exchange_test(q, N); diff --git a/sycl/test/atomic_ref/load.cpp b/sycl/test/atomic_ref/load.cpp index e05cdce576d3e..98747c803427c 100644 --- a/sycl/test/atomic_ref/load.cpp +++ b/sycl/test/atomic_ref/load.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -49,12 +51,31 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32) load_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32) load_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32) load_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32) load_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32) load_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32) load_test(q, N); + // The remaining functions use the already-declared ones on the IR level load_test(q, N); load_test(q, N); load_test(q, N); diff --git a/sycl/test/atomic_ref/max.cpp b/sycl/test/atomic_ref/max.cpp index 8b003ca7b59ad..caadaa0381928 100644 --- a/sycl/test/atomic_ref/max.cpp +++ b/sycl/test/atomic_ref/max.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -57,13 +59,43 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMax + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMax + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMax + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMax + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMax + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMax + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32) max_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64) max_test(q, N); std::cout << "Test passed." << std::endl; diff --git a/sycl/test/atomic_ref/min.cpp b/sycl/test/atomic_ref/min.cpp index 4b6c20fc1a809..10ea0792d5c93 100644 --- a/sycl/test/atomic_ref/min.cpp +++ b/sycl/test/atomic_ref/min.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -55,13 +57,43 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMin + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMin + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMin + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMin + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMin + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMin + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32) min_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64) min_test(q, N); std::cout << "Test passed." << std::endl; diff --git a/sycl/test/atomic_ref/store.cpp b/sycl/test/atomic_ref/store.cpp index 6f9de6e032e36..aa032fa90c2d4 100644 --- a/sycl/test/atomic_ref/store.cpp +++ b/sycl/test/atomic_ref/store.cpp @@ -1,3 +1,5 @@ +// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \ +// RUN: | FileCheck %s --check-prefix=CHECK-LLVM // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out @@ -45,12 +47,31 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func void + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) store_test(q, N); + // CHECK-LLVM: declare dso_local spir_func void + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) store_test(q, N); + // CHECK-LLVM: declare dso_local spir_func void + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore{{.*}}(i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: addrspace(1)*, i32, i32, i[[long]]) store_test(q, N); + // CHECK-LLVM: declare dso_local spir_func void + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) store_test(q, N); + // CHECK-LLVM: declare dso_local spir_func void + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) store_test(q, N); + // CHECK-LLVM: declare dso_local spir_func void + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) store_test(q, N); + // The remaining functions use the already-declared ones on the IR level store_test(q, N); store_test(q, N); store_test(q, N); diff --git a/sycl/test/atomic_ref/sub.cpp b/sycl/test/atomic_ref/sub.cpp index a09de3c710bcb..02ea5e5240930 100644 --- a/sycl/test/atomic_ref/sub.cpp +++ b/sycl/test/atomic_ref/sub.cpp @@ -165,10 +165,22 @@ void sub_test(queue q, size_t N) { // Floating-point types do not support pre- or post-decrement template <> void sub_test(queue q, size_t N) { sub_fetch_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32) sub_plus_equal_test(q, N); } template <> void sub_test(queue q, size_t N) { sub_fetch_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32) + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64) sub_plus_equal_test(q, N); } @@ -181,12 +193,31 @@ int main() { } constexpr int N = 32; + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) sub_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i32 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub + // CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32) sub_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) sub_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i[[long]] + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub + // CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]]) sub_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) sub_test(q, N); + // CHECK-LLVM: declare dso_local spir_func i64 + // CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub + // CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64) sub_test(q, N); + // The remaining functions have been instantiated earlier sub_test(q, N); sub_test(q, N); sub_test(q, N);