xref: /llvm-project/clang/test/CodeGenCXX/atomic-builtin-compound-assignment-overload.cpp (revision b02d970b4335561940dd584f6e6497ab684c788d)
1 // RUN: %clang_cc1 -std=gnu++11 -emit-llvm -triple=x86_64-linux-gnu -o - %s | FileCheck %s
2 
3 _Atomic unsigned an_atomic_uint;
4 
5 enum { an_enum_value = 1 };
6 
7 // CHECK-LABEL: define {{.*}}void @_Z5enum1v()
enum1()8 void enum1() {
9   an_atomic_uint += an_enum_value;
10   // CHECK: atomicrmw add ptr
11 }
12 
13 // CHECK-LABEL: define {{.*}}void @_Z5enum2v()
enum2()14 void enum2() {
15   an_atomic_uint |= an_enum_value;
16   // CHECK: atomicrmw or ptr
17 }
18 
19 // CHECK-LABEL: define {{.*}}void @_Z5enum3RU7_Atomicj({{.*}})
enum3(_Atomic unsigned & an_atomic_uint_param)20 void enum3(_Atomic unsigned &an_atomic_uint_param) {
21   an_atomic_uint_param += an_enum_value;
22   // CHECK: atomicrmw add ptr
23 }
24 
25 // CHECK-LABEL: define {{.*}}void @_Z5enum4RU7_Atomicj({{.*}})
enum4(_Atomic unsigned & an_atomic_uint_param)26 void enum4(_Atomic unsigned &an_atomic_uint_param) {
27   an_atomic_uint_param |= an_enum_value;
28   // CHECK: atomicrmw or ptr
29 }
30 
31 volatile _Atomic unsigned an_volatile_atomic_uint;
32 
33 // CHECK-LABEL: define {{.*}}void @_Z5enum5v()
enum5()34 void enum5() {
35   an_volatile_atomic_uint += an_enum_value;
36   // CHECK: atomicrmw add ptr
37 }
38 
39 // CHECK-LABEL: define {{.*}}void @_Z5enum6v()
enum6()40 void enum6() {
41   an_volatile_atomic_uint |= an_enum_value;
42   // CHECK: atomicrmw or ptr
43 }
44 
45 // CHECK-LABEL: define {{.*}}void @_Z5enum7RVU7_Atomicj({{.*}})
enum7(volatile _Atomic unsigned & an_volatile_atomic_uint_param)46 void enum7(volatile _Atomic unsigned &an_volatile_atomic_uint_param) {
47   an_volatile_atomic_uint_param += an_enum_value;
48   // CHECK: atomicrmw add ptr
49 }
50 
51 // CHECK-LABEL: define {{.*}}void @_Z5enum8RVU7_Atomicj({{.*}})
enum8(volatile _Atomic unsigned & an_volatile_atomic_uint_param)52 void enum8(volatile _Atomic unsigned &an_volatile_atomic_uint_param) {
53   an_volatile_atomic_uint_param |= an_enum_value;
54   // CHECK: atomicrmw or ptr
55 }
56