Skip to content

Commit 5c4df90

Browse files
author
Artem Gindinson
authored
[SYCL][Test] Add IR checks into atomic tests (#2834)
Check that correct `__spirv_Atomic*` external calls are emitted by the compiler FE, and thus ensure that the headers provide a proper implementation for each function. Signed-off-by: Artem Gindinson <[email protected]>
1 parent 7a8e02a commit 5c4df90

File tree

8 files changed

+214
-0
lines changed

8 files changed

+214
-0
lines changed

sycl/test/atomic_ref/add.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -165,10 +167,22 @@ void add_test(queue q, size_t N) {
165167
// Floating-point types do not support pre- or post-increment
166168
template <> void add_test<float>(queue q, size_t N) {
167169
add_fetch_test<float>(q, N);
170+
// CHECK-LLVM: declare dso_local spir_func i32
171+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
172+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32)
173+
// CHECK-LLVM: declare dso_local spir_func i32
174+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
175+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32)
168176
add_plus_equal_test<float>(q, N);
169177
}
170178
template <> void add_test<double>(queue q, size_t N) {
171179
add_fetch_test<double>(q, N);
180+
// CHECK-LLVM: declare dso_local spir_func i64
181+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
182+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32)
183+
// CHECK-LLVM: declare dso_local spir_func i64
184+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
185+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64)
172186
add_plus_equal_test<double>(q, N);
173187
}
174188

@@ -181,12 +195,31 @@ int main() {
181195
}
182196

183197
constexpr int N = 32;
198+
// CHECK-LLVM: declare dso_local spir_func i32
199+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd
200+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
184201
add_test<int>(q, N);
202+
// CHECK-LLVM: declare dso_local spir_func i32
203+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd
204+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
185205
add_test<unsigned int>(q, N);
206+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
207+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd
208+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
186209
add_test<long>(q, N);
210+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
211+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd
212+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
187213
add_test<unsigned long>(q, N);
214+
// CHECK-LLVM: declare dso_local spir_func i64
215+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd
216+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
188217
add_test<long long>(q, N);
218+
// CHECK-LLVM: declare dso_local spir_func i64
219+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicIAdd
220+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
189221
add_test<unsigned long long>(q, N);
222+
// The remaining functions have been instantiated earlier
190223
add_test<float>(q, N);
191224
add_test<double>(q, N);
192225
add_test<char *, ptrdiff_t>(q, N);

sycl/test/atomic_ref/compare_exchange.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -60,12 +62,33 @@ int main() {
6062
}
6163

6264
constexpr int N = 32;
65+
// CHECK-LLVM: declare dso_local spir_func i32
66+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
67+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32)
6368
compare_exchange_test<int>(q, N);
69+
// CHECK-LLVM: declare dso_local spir_func i32
70+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
71+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32)
6472
compare_exchange_test<unsigned int>(q, N);
73+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
74+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
75+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i32,
76+
// CHECK-LLVM-SAME: i[[long]], i[[long]])
6577
compare_exchange_test<long>(q, N);
78+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
79+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
80+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i32,
81+
// CHECK-LLVM-SAME: i[[long]], i[[long]])
6682
compare_exchange_test<unsigned long>(q, N);
83+
// CHECK-LLVM: declare dso_local spir_func i64
84+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
85+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64)
6786
compare_exchange_test<long long>(q, N);
87+
// CHECK-LLVM: declare dso_local spir_func i64
88+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
89+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64)
6890
compare_exchange_test<unsigned long long>(q, N);
91+
// The remaining functions use the already-declared ones on the IR level
6992
compare_exchange_test<float>(q, N);
7093
compare_exchange_test<double>(q, N);
7194
compare_exchange_test<char *>(q, N);

sycl/test/atomic_ref/exchange.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -52,12 +54,31 @@ int main() {
5254
}
5355

5456
constexpr int N = 32;
57+
// CHECK-LLVM: declare dso_local spir_func i32
58+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange
59+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
5560
exchange_test<int>(q, N);
61+
// CHECK-LLVM: declare dso_local spir_func i32
62+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange
63+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
5664
exchange_test<unsigned int>(q, N);
65+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
66+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange
67+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
5768
exchange_test<long>(q, N);
69+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
70+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange
71+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
5872
exchange_test<unsigned long>(q, N);
73+
// CHECK-LLVM: declare dso_local spir_func i64
74+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange
75+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
5976
exchange_test<long long>(q, N);
77+
// CHECK-LLVM: declare dso_local spir_func i64
78+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicExchange
79+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
6080
exchange_test<unsigned long long>(q, N);
81+
// The remaining functions use the already-declared ones on the IR level
6182
exchange_test<float>(q, N);
6283
exchange_test<double>(q, N);
6384
exchange_test<char *>(q, N);

sycl/test/atomic_ref/load.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -49,12 +51,31 @@ int main() {
4951
}
5052

5153
constexpr int N = 32;
54+
// CHECK-LLVM: declare dso_local spir_func i32
55+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
56+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32)
5257
load_test<int>(q, N);
58+
// CHECK-LLVM: declare dso_local spir_func i32
59+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
60+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32)
5361
load_test<unsigned int>(q, N);
62+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
63+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
64+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32)
5465
load_test<long>(q, N);
66+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
67+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
68+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32)
5569
load_test<unsigned long>(q, N);
70+
// CHECK-LLVM: declare dso_local spir_func i64
71+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
72+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32)
5673
load_test<long long>(q, N);
74+
// CHECK-LLVM: declare dso_local spir_func i64
75+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
76+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32)
5777
load_test<unsigned long long>(q, N);
78+
// The remaining functions use the already-declared ones on the IR level
5879
load_test<float>(q, N);
5980
load_test<double>(q, N);
6081
load_test<char *>(q, N);

sycl/test/atomic_ref/max.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -57,13 +59,43 @@ int main() {
5759
}
5860

5961
constexpr int N = 32;
62+
// CHECK-LLVM: declare dso_local spir_func i32
63+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMax
64+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
6065
max_test<int>(q, N);
66+
// CHECK-LLVM: declare dso_local spir_func i32
67+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMax
68+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
6169
max_test<unsigned int>(q, N);
70+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
71+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMax
72+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
6273
max_test<long>(q, N);
74+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
75+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMax
76+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
6377
max_test<unsigned long>(q, N);
78+
// CHECK-LLVM: declare dso_local spir_func i64
79+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMax
80+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
6481
max_test<long long>(q, N);
82+
// CHECK-LLVM: declare dso_local spir_func i64
83+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMax
84+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
6585
max_test<unsigned long long>(q, N);
86+
// CHECK-LLVM: declare dso_local spir_func i32
87+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
88+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32)
89+
// CHECK-LLVM: declare dso_local spir_func i32
90+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
91+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32)
6692
max_test<float>(q, N);
93+
// CHECK-LLVM: declare dso_local spir_func i64
94+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
95+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32)
96+
// CHECK-LLVM: declare dso_local spir_func i64
97+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
98+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64)
6799
max_test<double>(q, N);
68100

69101
std::cout << "Test passed." << std::endl;

sycl/test/atomic_ref/min.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -55,13 +57,43 @@ int main() {
5557
}
5658

5759
constexpr int N = 32;
60+
// CHECK-LLVM: declare dso_local spir_func i32
61+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMin
62+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
5863
min_test<int>(q, N);
64+
// CHECK-LLVM: declare dso_local spir_func i32
65+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMin
66+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
5967
min_test<unsigned int>(q, N);
68+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
69+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMin
70+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
6071
min_test<long>(q, N);
72+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
73+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMin
74+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
6175
min_test<unsigned long>(q, N);
76+
// CHECK-LLVM: declare dso_local spir_func i64
77+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicSMin
78+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
6279
min_test<long long>(q, N);
80+
// CHECK-LLVM: declare dso_local spir_func i64
81+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicUMin
82+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
6383
min_test<unsigned long long>(q, N);
84+
// CHECK-LLVM: declare dso_local spir_func i32
85+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
86+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32)
87+
// CHECK-LLVM: declare dso_local spir_func i32
88+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
89+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32)
6490
min_test<float>(q, N);
91+
// CHECK-LLVM: declare dso_local spir_func i64
92+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
93+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32)
94+
// CHECK-LLVM: declare dso_local spir_func i64
95+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
96+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64)
6597
min_test<double>(q, N);
6698

6799
std::cout << "Test passed." << std::endl;

sycl/test/atomic_ref/store.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// RUN: %clangxx -fsycl -fsycl-unnamed-lambda -fsycl-device-only -S %s -o - \
2+
// RUN: | FileCheck %s --check-prefix=CHECK-LLVM
13
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
24
// RUN: %RUN_ON_HOST %t.out
35

@@ -45,12 +47,31 @@ int main() {
4547
}
4648

4749
constexpr int N = 32;
50+
// CHECK-LLVM: declare dso_local spir_func void
51+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore
52+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
4853
store_test<int>(q, N);
54+
// CHECK-LLVM: declare dso_local spir_func void
55+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore
56+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
4957
store_test<unsigned int>(q, N);
58+
// CHECK-LLVM: declare dso_local spir_func void
59+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore{{.*}}(i[[long:(32)|(64)]]
60+
// CHECK-LLVM-SAME: addrspace(1)*, i32, i32, i[[long]])
5061
store_test<long>(q, N);
62+
// CHECK-LLVM: declare dso_local spir_func void
63+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore
64+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
5165
store_test<unsigned long>(q, N);
66+
// CHECK-LLVM: declare dso_local spir_func void
67+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore
68+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
5269
store_test<long long>(q, N);
70+
// CHECK-LLVM: declare dso_local spir_func void
71+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicStore
72+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
5373
store_test<unsigned long long>(q, N);
74+
// The remaining functions use the already-declared ones on the IR level
5475
store_test<float>(q, N);
5576
store_test<double>(q, N);
5677
store_test<char *>(q, N);

sycl/test/atomic_ref/sub.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,22 @@ void sub_test(queue q, size_t N) {
165165
// Floating-point types do not support pre- or post-decrement
166166
template <> void sub_test<float>(queue q, size_t N) {
167167
sub_fetch_test<float>(q, N);
168+
// CHECK-LLVM: declare dso_local spir_func i32
169+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
170+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32)
171+
// CHECK-LLVM: declare dso_local spir_func i32
172+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
173+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32, i32, i32)
168174
sub_plus_equal_test<float>(q, N);
169175
}
170176
template <> void sub_test<double>(queue q, size_t N) {
171177
sub_fetch_test<double>(q, N);
178+
// CHECK-LLVM: declare dso_local spir_func i64
179+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicLoad
180+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32)
181+
// CHECK-LLVM: declare dso_local spir_func i64
182+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicCompareExchange
183+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i32, i64, i64)
172184
sub_plus_equal_test<double>(q, N);
173185
}
174186

@@ -181,12 +193,31 @@ int main() {
181193
}
182194

183195
constexpr int N = 32;
196+
// CHECK-LLVM: declare dso_local spir_func i32
197+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub
198+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
184199
sub_test<int>(q, N);
200+
// CHECK-LLVM: declare dso_local spir_func i32
201+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub
202+
// CHECK-LLVM-SAME: (i32 addrspace(1)*, i32, i32, i32)
185203
sub_test<unsigned int>(q, N);
204+
// CHECK-LLVM: declare dso_local spir_func i[[long:(32)|(64)]]
205+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub
206+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
186207
sub_test<long>(q, N);
208+
// CHECK-LLVM: declare dso_local spir_func i[[long]]
209+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub
210+
// CHECK-LLVM-SAME: (i[[long]] addrspace(1)*, i32, i32, i[[long]])
187211
sub_test<unsigned long>(q, N);
212+
// CHECK-LLVM: declare dso_local spir_func i64
213+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub
214+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
188215
sub_test<long long>(q, N);
216+
// CHECK-LLVM: declare dso_local spir_func i64
217+
// CHECK-LLVM-SAME: @_Z{{[0-9]+}}__spirv_AtomicISub
218+
// CHECK-LLVM-SAME: (i64 addrspace(1)*, i32, i32, i64)
189219
sub_test<unsigned long long>(q, N);
220+
// The remaining functions have been instantiated earlier
190221
sub_test<float>(q, N);
191222
sub_test<double>(q, N);
192223
sub_test<char *, ptrdiff_t>(q, N);

0 commit comments

Comments
 (0)