1
- // RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -O0 -o - -triple=amdgcn-amd-amdhsa-opencl | opt -instnamer -S | FileCheck %s
1
+ // RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -O0 -o - -triple=amdgcn-amd-amdhsa-amdgizcl | opt -instnamer -S | FileCheck %s
2
2
3
3
// Also test serialization of atomic operations here, to avoid duplicating the test.
4
- // RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-pch -O0 -o %t -triple=amdgcn-amd-amdhsa-opencl
5
- // RUN: %clang_cc1 %s -cl-std=CL2.0 -include-pch %t -O0 -triple=amdgcn-amd-amdhsa-opencl -emit-llvm -o - | opt -instnamer -S | FileCheck %s
4
+ // RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-pch -O0 -o %t -triple=amdgcn-amd-amdhsa-amdgizcl
5
+ // RUN: %clang_cc1 %s -cl-std=CL2.0 -include-pch %t -O0 -triple=amdgcn-amd-amdhsa-amdgizcl -emit-llvm -o - | opt -instnamer -S | FileCheck %s
6
6
7
7
#ifndef ALREADY_INCLUDED
8
8
#define ALREADY_INCLUDED
@@ -32,22 +32,22 @@ atomic_int j;
32
32
33
33
void fi1 (atomic_int * i ) {
34
34
// CHECK-LABEL: @fi1
35
- // CHECK: load atomic i32, i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
35
+ // CHECK: load atomic i32, i32* %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
36
36
int x = __opencl_atomic_load (i , memory_order_seq_cst , memory_scope_work_group );
37
37
38
- // CHECK: load atomic i32, i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}} syncscope("agent") seq_cst
38
+ // CHECK: load atomic i32, i32* %{{[.0-9A-Z_a-z]+}} syncscope("agent") seq_cst
39
39
x = __opencl_atomic_load (i , memory_order_seq_cst , memory_scope_device );
40
40
41
- // CHECK: load atomic i32, i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}} seq_cst
41
+ // CHECK: load atomic i32, i32* %{{[.0-9A-Z_a-z]+}} seq_cst
42
42
x = __opencl_atomic_load (i , memory_order_seq_cst , memory_scope_all_svm_devices );
43
43
44
- // CHECK: load atomic i32, i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}} syncscope("subgroup") seq_cst
44
+ // CHECK: load atomic i32, i32* %{{[.0-9A-Z_a-z]+}} syncscope("subgroup") seq_cst
45
45
x = __opencl_atomic_load (i , memory_order_seq_cst , memory_scope_sub_group );
46
46
}
47
47
48
48
void fi2 (atomic_int * i ) {
49
49
// CHECK-LABEL: @fi2
50
- // CHECK: store atomic i32 %{{[.0-9A-Z_a-z]+}}, i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
50
+ // CHECK: store atomic i32 %{{[.0-9A-Z_a-z]+}}, i32* %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
51
51
__opencl_atomic_store (i , 1 , memory_order_seq_cst , memory_scope_work_group );
52
52
}
53
53
@@ -56,7 +56,7 @@ void test_addr(global atomic_int *ig, private atomic_int *ip, local atomic_int *
56
56
// CHECK: store atomic i32 %{{[.0-9A-Z_a-z]+}}, i32 addrspace(1)* %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
57
57
__opencl_atomic_store (ig , 1 , memory_order_seq_cst , memory_scope_work_group );
58
58
59
- // CHECK: store atomic i32 %{{[.0-9A-Z_a-z]+}}, i32* %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
59
+ // CHECK: store atomic i32 %{{[.0-9A-Z_a-z]+}}, i32 addrspace(5) * %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
60
60
__opencl_atomic_store (ip , 1 , memory_order_seq_cst , memory_scope_work_group );
61
61
62
62
// CHECK: store atomic i32 %{{[.0-9A-Z_a-z]+}}, i32 addrspace(3)* %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
@@ -65,25 +65,25 @@ void test_addr(global atomic_int *ig, private atomic_int *ip, local atomic_int *
65
65
66
66
void fi3 (atomic_int * i , atomic_uint * ui ) {
67
67
// CHECK-LABEL: @fi3
68
- // CHECK: atomicrmw and i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
68
+ // CHECK: atomicrmw and i32* %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
69
69
int x = __opencl_atomic_fetch_and (i , 1 , memory_order_seq_cst , memory_scope_work_group );
70
70
71
- // CHECK: atomicrmw min i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
71
+ // CHECK: atomicrmw min i32* %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
72
72
x = __opencl_atomic_fetch_min (i , 1 , memory_order_seq_cst , memory_scope_work_group );
73
73
74
- // CHECK: atomicrmw max i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
74
+ // CHECK: atomicrmw max i32* %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
75
75
x = __opencl_atomic_fetch_max (i , 1 , memory_order_seq_cst , memory_scope_work_group );
76
76
77
- // CHECK: atomicrmw umin i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
77
+ // CHECK: atomicrmw umin i32* %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
78
78
x = __opencl_atomic_fetch_min (ui , 1 , memory_order_seq_cst , memory_scope_work_group );
79
79
80
- // CHECK: atomicrmw umax i32 addrspace(4) * %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
80
+ // CHECK: atomicrmw umax i32* %{{[.0-9A-Z_a-z]+}}, i32 %{{[.0-9A-Z_a-z]+}} syncscope("workgroup") seq_cst
81
81
x = __opencl_atomic_fetch_max (ui , 1 , memory_order_seq_cst , memory_scope_work_group );
82
82
}
83
83
84
84
bool fi4 (atomic_int * i ) {
85
85
// CHECK-LABEL: @fi4(
86
- // CHECK: [[PAIR:%[.0-9A-Z_a-z]+]] = cmpxchg i32 addrspace(4) * [[PTR:%[.0-9A-Z_a-z]+]], i32 [[EXPECTED:%[.0-9A-Z_a-z]+]], i32 [[DESIRED:%[.0-9A-Z_a-z]+]] syncscope("workgroup") acquire acquire
86
+ // CHECK: [[PAIR:%[.0-9A-Z_a-z]+]] = cmpxchg i32* [[PTR:%[.0-9A-Z_a-z]+]], i32 [[EXPECTED:%[.0-9A-Z_a-z]+]], i32 [[DESIRED:%[.0-9A-Z_a-z]+]] syncscope("workgroup") acquire acquire
87
87
// CHECK: [[OLD:%[.0-9A-Z_a-z]+]] = extractvalue { i32, i1 } [[PAIR]], 0
88
88
// CHECK: [[CMP:%[.0-9A-Z_a-z]+]] = extractvalue { i32, i1 } [[PAIR]], 1
89
89
// CHECK: br i1 [[CMP]], label %[[STORE_EXPECTED:[.0-9A-Z_a-z]+]], label %[[CONTINUE:[.0-9A-Z_a-z]+]]
@@ -100,16 +100,16 @@ void fi5(atomic_int *i, int scope) {
100
100
// CHECK-NEXT: i32 4, label %[[opencl_subgroup:.*]]
101
101
// CHECK-NEXT: ]
102
102
// CHECK: [[opencl_workgroup]]:
103
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("workgroup") seq_cst
103
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("workgroup") seq_cst
104
104
// CHECK: br label %[[continue:.*]]
105
105
// CHECK: [[opencl_device]]:
106
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("agent") seq_cst
106
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("agent") seq_cst
107
107
// CHECK: br label %[[continue]]
108
108
// CHECK: [[opencl_allsvmdevices]]:
109
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} seq_cst
109
+ // CHECK: load atomic i32, i32* %{{.*}} seq_cst
110
110
// CHECK: br label %[[continue]]
111
111
// CHECK: [[opencl_subgroup]]:
112
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("subgroup") seq_cst
112
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("subgroup") seq_cst
113
113
// CHECK: br label %[[continue]]
114
114
// CHECK: [[continue]]:
115
115
int x = __opencl_atomic_load (i , memory_order_seq_cst , scope );
@@ -141,29 +141,29 @@ void fi6(atomic_int *i, int order, int scope) {
141
141
// CHECK-NEXT: i32 4, label %[[SEQ_SUB:.*]]
142
142
// CHECK-NEXT: ]
143
143
// CHECK: [[MON_WG]]:
144
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("workgroup") monotonic
144
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("workgroup") monotonic
145
145
// CHECK: [[MON_DEV]]:
146
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("agent") monotonic
146
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("agent") monotonic
147
147
// CHECK: [[MON_ALL]]:
148
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} monotonic
148
+ // CHECK: load atomic i32, i32* %{{.*}} monotonic
149
149
// CHECK: [[MON_SUB]]:
150
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("subgroup") monotonic
150
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("subgroup") monotonic
151
151
// CHECK: [[ACQ_WG]]:
152
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("workgroup") acquire
152
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("workgroup") acquire
153
153
// CHECK: [[ACQ_DEV]]:
154
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("agent") acquire
154
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("agent") acquire
155
155
// CHECK: [[ACQ_ALL]]:
156
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} acquire
156
+ // CHECK: load atomic i32, i32* %{{.*}} acquire
157
157
// CHECK: [[ACQ_SUB]]:
158
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("subgroup") acquire
158
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("subgroup") acquire
159
159
// CHECK: [[SEQ_WG]]:
160
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("workgroup") seq_cst
160
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("workgroup") seq_cst
161
161
// CHECK: [[SEQ_DEV]]:
162
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("agent") seq_cst
162
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("agent") seq_cst
163
163
// CHECK: [[SEQ_ALL]]:
164
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} seq_cst
164
+ // CHECK: load atomic i32, i32* %{{.*}} seq_cst
165
165
// CHECK: [[SEQ_SUB]]:
166
- // CHECK: load atomic i32, i32 addrspace(4) * %{{.*}} syncscope("subgroup") seq_cst
166
+ // CHECK: load atomic i32, i32* %{{.*}} syncscope("subgroup") seq_cst
167
167
int x = __opencl_atomic_load (i , order , scope );
168
168
}
169
169
@@ -181,7 +181,7 @@ void ff2(atomic_float *d) {
181
181
182
182
float ff3 (atomic_float * d ) {
183
183
// CHECK-LABEL: @ff3
184
- // CHECK: atomicrmw xchg i32 addrspace(4) * {{.*}} syncscope("workgroup") seq_cst
184
+ // CHECK: atomicrmw xchg i32* {{.*}} syncscope("workgroup") seq_cst
185
185
return __opencl_atomic_exchange (d , 2 , memory_order_seq_cst , memory_scope_work_group );
186
186
}
187
187
@@ -198,10 +198,10 @@ void atomic_init_foo()
198
198
199
199
// CHECK-LABEL: @failureOrder
200
200
void failureOrder (atomic_int * ptr , int * ptr2 ) {
201
- // CHECK: cmpxchg i32 addrspace(4) * {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup") acquire monotonic
201
+ // CHECK: cmpxchg i32* {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup") acquire monotonic
202
202
__opencl_atomic_compare_exchange_strong (ptr , ptr2 , 43 , memory_order_acquire , memory_order_relaxed , memory_scope_work_group );
203
203
204
- // CHECK: cmpxchg weak i32 addrspace(4) * {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup") seq_cst acquire
204
+ // CHECK: cmpxchg weak i32* {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup") seq_cst acquire
205
205
__opencl_atomic_compare_exchange_weak (ptr , ptr2 , 43 , memory_order_seq_cst , memory_order_acquire , memory_scope_work_group );
206
206
}
207
207
@@ -279,11 +279,11 @@ int test_volatile(volatile atomic_int *i) {
279
279
// CHECK-LABEL: @test_volatile
280
280
// CHECK: %[[i_addr:.*]] = alloca i32
281
281
// CHECK-NEXT: %[[atomicdst:.*]] = alloca i32
282
- // CHECK-NEXT: store i32 addrspace(4) * %i, i32 addrspace(4)* * %[[i_addr]]
283
- // CHECK-NEXT: %[[addr:.*]] = load i32 addrspace(4) *, i32 addrspace(4)* * %[[i_addr]]
284
- // CHECK-NEXT: %[[res:.*]] = load atomic volatile i32, i32 addrspace(4) * %[[addr]] syncscope("workgroup") seq_cst
285
- // CHECK-NEXT: store i32 %[[res]], i32* %[[atomicdst]]
286
- // CHECK-NEXT: %[[retval:.*]] = load i32, i32* %[[atomicdst]]
282
+ // CHECK-NEXT: store i32* %i, i32* addrspace(5) * %[[i_addr]]
283
+ // CHECK-NEXT: %[[addr:.*]] = load i32*, i32* addrspace(5) * %[[i_addr]]
284
+ // CHECK-NEXT: %[[res:.*]] = load atomic volatile i32, i32* %[[addr]] syncscope("workgroup") seq_cst
285
+ // CHECK-NEXT: store i32 %[[res]], i32 addrspace(5) * %[[atomicdst]]
286
+ // CHECK-NEXT: %[[retval:.*]] = load i32, i32 addrspace(5) * %[[atomicdst]]
287
287
// CHECK-NEXT: ret i32 %[[retval]]
288
288
return __opencl_atomic_load (i , memory_order_seq_cst , memory_scope_work_group );
289
289
}
0 commit comments