Skip to content

Commit 5a46854

Browse files
committed
OpenCL only
1 parent e1887b9 commit 5a46854

File tree

4 files changed

+36
-28
lines changed

4 files changed

+36
-28
lines changed

clang/lib/CodeGen/Targets/AMDGPU.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,14 @@ AMDGPUTargetCodeGenInfo::getLLVMSyncScopeID(const LangOptions &LangOpts,
537537
break;
538538
}
539539

540+
if (LangOpts.OpenCL &&
541+
Ordering != llvm::AtomicOrdering::SequentiallyConsistent) {
542+
if (!Name.empty())
543+
Name = Twine(Twine(Name) + Twine("-")).str();
544+
545+
Name = Twine(Twine(Name) + Twine("one-as")).str();
546+
}
547+
540548
return Ctx.getOrInsertSyncScopeID(Name);
541549
}
542550

clang/test/CodeGenOpenCL/atomic-ops.cl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void fi3(atomic_int *i, atomic_uint *ui) {
8888

8989
bool fi4(atomic_int *i) {
9090
// CHECK-LABEL: @fi4(
91-
// CHECK: [[PAIR:%[.0-9A-Z_a-z]+]] = cmpxchg ptr [[PTR:%[.0-9A-Z_a-z]+]], i32 [[EXPECTED:%[.0-9A-Z_a-z]+]], i32 [[DESIRED:%[.0-9A-Z_a-z]+]] syncscope("workgroup") acquire acquire, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}
91+
// CHECK: [[PAIR:%[.0-9A-Z_a-z]+]] = cmpxchg ptr [[PTR:%[.0-9A-Z_a-z]+]], i32 [[EXPECTED:%[.0-9A-Z_a-z]+]], i32 [[DESIRED:%[.0-9A-Z_a-z]+]] syncscope("workgroup-one-as") acquire acquire, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}
9292
// CHECK: [[OLD:%[.0-9A-Z_a-z]+]] = extractvalue { i32, i1 } [[PAIR]], 0
9393
// CHECK: [[CMP:%[.0-9A-Z_a-z]+]] = extractvalue { i32, i1 } [[PAIR]], 1
9494
// CHECK: br i1 [[CMP]], label %[[STORE_EXPECTED:[.0-9A-Z_a-z]+]], label %[[CONTINUE:[.0-9A-Z_a-z]+]]
@@ -146,21 +146,21 @@ void fi6(atomic_int *i, int order, int scope) {
146146
// CHECK-NEXT: i32 4, label %[[SEQ_SUB:.*]]
147147
// CHECK-NEXT: ]
148148
// CHECK: [[MON_WG]]:
149-
// CHECK: load atomic i32, ptr %{{.*}} syncscope("workgroup") monotonic, align 4{{$}}
149+
// CHECK: load atomic i32, ptr %{{.*}} syncscope("workgroup-one-as") monotonic, align 4{{$}}
150150
// CHECK: [[MON_DEV]]:
151-
// CHECK: load atomic i32, ptr %{{.*}} syncscope("agent") monotonic, align 4{{$}}
151+
// CHECK: load atomic i32, ptr %{{.*}} syncscope("agent-one-as") monotonic, align 4{{$}}
152152
// CHECK: [[MON_ALL]]:
153153
// CHECK: load atomic i32, ptr %{{.*}} monotonic, align 4{{$}}
154154
// CHECK: [[MON_SUB]]:
155-
// CHECK: load atomic i32, ptr %{{.*}} syncscope("wavefront") monotonic, align 4{{$}}
155+
// CHECK: load atomic i32, ptr %{{.*}} syncscope("wavefront-one-as") monotonic, align 4{{$}}
156156
// CHECK: [[ACQ_WG]]:
157-
// CHECK: load atomic i32, ptr %{{.*}} syncscope("workgroup") acquire, align 4{{$}}
157+
// CHECK: load atomic i32, ptr %{{.*}} syncscope("workgroup-one-as") acquire, align 4{{$}}
158158
// CHECK: [[ACQ_DEV]]:
159-
// CHECK: load atomic i32, ptr %{{.*}} syncscope("agent") acquire, align 4{{$}}
159+
// CHECK: load atomic i32, ptr %{{.*}} syncscope("agent-one-as") acquire, align 4{{$}}
160160
// CHECK: [[ACQ_ALL]]:
161161
// CHECK: load atomic i32, ptr %{{.*}} acquire, align 4{{$}}
162162
// CHECK: [[ACQ_SUB]]:
163-
// CHECK: load atomic i32, ptr %{{.*}} syncscope("wavefront") acquire, align 4{{$}}
163+
// CHECK: load atomic i32, ptr %{{.*}} syncscope("wavefront-one-as") acquire, align 4{{$}}
164164
// CHECK: [[SEQ_WG]]:
165165
// CHECK: load atomic i32, ptr %{{.*}} syncscope("workgroup") seq_cst, align 4{{$}}
166166
// CHECK: [[SEQ_DEV]]:
@@ -174,13 +174,13 @@ void fi6(atomic_int *i, int order, int scope) {
174174

175175
float ff1(global atomic_float *d) {
176176
// CHECK-LABEL: @ff1
177-
// CHECK: load atomic i32, ptr addrspace(1) {{.*}} syncscope("workgroup") monotonic, align 4{{$}}
177+
// CHECK: load atomic i32, ptr addrspace(1) {{.*}} syncscope("workgroup-one-as") monotonic, align 4{{$}}
178178
return __opencl_atomic_load(d, memory_order_relaxed, memory_scope_work_group);
179179
}
180180

181181
void ff2(atomic_float *d) {
182182
// CHECK-LABEL: @ff2
183-
// CHECK: store atomic i32 {{.*}} syncscope("workgroup") release, align 4
183+
// CHECK: store atomic i32 {{.*}} syncscope("workgroup-one-as") release, align 4
184184
__opencl_atomic_store(d, 1, memory_order_release, memory_scope_work_group);
185185
}
186186

@@ -192,25 +192,25 @@ float ff3(atomic_float *d) {
192192

193193
float ff4(global atomic_float *d, float a) {
194194
// CHECK-LABEL: @ff4
195-
// CHECK: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("workgroup") monotonic, align 4{{$}}
195+
// CHECK: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("workgroup-one-as") monotonic, align 4{{$}}
196196
return __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_work_group);
197197
}
198198

199199
float ff5(global atomic_double *d, double a) {
200200
// CHECK-LABEL: @ff5
201-
// CHECK: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("workgroup") monotonic, align 8{{$}}
201+
// CHECK: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("workgroup-one-as") monotonic, align 8{{$}}
202202
return __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_work_group);
203203
}
204204

205205
float ff4_generic(atomic_float *d, float a) {
206206
// CHECK-LABEL: @ff4_generic
207-
// CHECK: atomicrmw fadd ptr {{.*}} syncscope("workgroup") monotonic, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}
207+
// CHECK: atomicrmw fadd ptr {{.*}} syncscope("workgroup-one-as") monotonic, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}
208208
return __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_work_group);
209209
}
210210

211211
float ff5_generic(atomic_double *d, double a) {
212212
// CHECK-LABEL: @ff5_generic
213-
// CHECK: atomicrmw fadd ptr {{.*}} syncscope("workgroup") monotonic, align 8, !noalias.addrspace [[$NOPRIVATE]]{{$}}
213+
// CHECK: atomicrmw fadd ptr {{.*}} syncscope("workgroup-one-as") monotonic, align 8, !noalias.addrspace [[$NOPRIVATE]]{{$}}
214214
return __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_work_group);
215215
}
216216

@@ -227,7 +227,7 @@ void atomic_init_foo()
227227

228228
// CHECK-LABEL: @failureOrder
229229
void failureOrder(atomic_int *ptr, int *ptr2) {
230-
// CHECK: cmpxchg ptr {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup") acquire monotonic, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}
230+
// CHECK: cmpxchg ptr {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup-one-as") acquire monotonic, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}
231231
__opencl_atomic_compare_exchange_strong(ptr, ptr2, 43, memory_order_acquire, memory_order_relaxed, memory_scope_work_group);
232232

233233
// CHECK: cmpxchg weak ptr {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z._]+}}, i32 {{%[0-9A-Za-z_.]+}} syncscope("workgroup") seq_cst acquire, align 4, !noalias.addrspace [[$NOPRIVATE]]{{$}}

clang/test/CodeGenOpenCL/atomics-cas-remarks-gfx90a.cl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@ typedef enum memory_scope {
2626
#endif
2727
} memory_scope;
2828

29-
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at wavefront memory scope [-Rpass=atomic-expand]
30-
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at system memory scope [-Rpass=atomic-expand]
31-
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at agent memory scope [-Rpass=atomic-expand]
32-
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at workgroup memory scope [-Rpass=atomic-expand]
29+
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at wavefront-one-as memory scope [-Rpass=atomic-expand]
30+
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at one-as memory scope [-Rpass=atomic-expand]
31+
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at agent-one-as memory scope [-Rpass=atomic-expand]
32+
// REMARK: remark: A compare and swap loop was generated for an atomic fadd operation at workgroup-one-as memory scope [-Rpass=atomic-expand]
3333

3434
// GFX90A-CAS-LABEL: @atomic_cas
35-
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("workgroup") monotonic
36-
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("agent") monotonic
37-
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} monotonic
38-
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("wavefront") monotonic
35+
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("workgroup-one-as") monotonic
36+
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("agent-one-as") monotonic
37+
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("one-as") monotonic
38+
// GFX90A-CAS: atomicrmw fadd ptr addrspace(1) {{.*}} syncscope("wavefront-one-as") monotonic
3939
float atomic_cas(__global atomic_float *d, float a) {
4040
float ret1 = __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_work_group);
4141
float ret2 = __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_device);

clang/test/CodeGenOpenCL/atomics-unsafe-hw-remarks-gfx90a.cl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ typedef enum memory_scope {
2727
#endif
2828
} memory_scope;
2929

30-
// GFX90A-HW-REMARK: Hardware instruction generated for atomic fadd operation at memory scope wavefront due to an unsafe request. [-Rpass=si-lower]
31-
// GFX90A-HW-REMARK: Hardware instruction generated for atomic fadd operation at memory scope agent due to an unsafe request. [-Rpass=si-lower]
32-
// GFX90A-HW-REMARK: Hardware instruction generated for atomic fadd operation at memory scope workgroup due to an unsafe request. [-Rpass=si-lower]
30+
// GFX90A-HW-REMARK: Hardware instruction generated for atomic fadd operation at memory scope wavefront-one-as due to an unsafe request. [-Rpass=si-lower]
31+
// GFX90A-HW-REMARK: Hardware instruction generated for atomic fadd operation at memory scope agent-one-as due to an unsafe request. [-Rpass=si-lower]
32+
// GFX90A-HW-REMARK: Hardware instruction generated for atomic fadd operation at memory scope workgroup-one-as due to an unsafe request. [-Rpass=si-lower]
3333

3434
// GFX90A-HW-REMARK: global_atomic_add_f32 v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc
3535
// GFX90A-HW-REMARK: global_atomic_add_f32 v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc
3636
// GFX90A-HW-REMARK: global_atomic_add_f32 v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc
3737
// GFX90A-HW-LABEL: @atomic_unsafe_hw
38-
// GFX90A-HW: atomicrmw fadd ptr addrspace(1) %{{.*}}, float %{{.*}} syncscope("workgroup") monotonic, align 4
39-
// GFX90A-HW: atomicrmw fadd ptr addrspace(1) %{{.*}}, float %{{.*}} syncscope("agent") monotonic, align 4
40-
// GFX90A-HW: atomicrmw fadd ptr addrspace(1) %{{.*}}, float %{{.*}} syncscope("wavefront") monotonic, align 4
38+
// GFX90A-HW: atomicrmw fadd ptr addrspace(1) %{{.*}}, float %{{.*}} syncscope("workgroup-one-as") monotonic, align 4
39+
// GFX90A-HW: atomicrmw fadd ptr addrspace(1) %{{.*}}, float %{{.*}} syncscope("agent-one-as") monotonic, align 4
40+
// GFX90A-HW: atomicrmw fadd ptr addrspace(1) %{{.*}}, float %{{.*}} syncscope("wavefront-one-as") monotonic, align 4
4141
void atomic_unsafe_hw(__global atomic_float *d, float a) {
4242
float ret1 = __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_work_group);
4343
float ret2 = __opencl_atomic_fetch_add(d, a, memory_order_relaxed, memory_scope_device);

0 commit comments

Comments
 (0)