@@ -7,6 +7,8 @@ program OmpAtomicUpdate
7
7
integer :: x, y, z
8
8
integer , pointer :: a, b
9
9
integer , target :: c, d
10
+ integer (1 ) :: i1
11
+
10
12
a= >c
11
13
b= >d
12
14
@@ -21,6 +23,7 @@ program OmpAtomicUpdate
21
23
! CHECK: fir.store %{{.*}} to %[[B_ADDR]] : !fir.ref<!fir.ptr<i32>>
22
24
! CHECK: %[[C_ADDR:.*]] = fir.address_of(@_QFEc) : !fir.ref<i32>
23
25
! CHECK: %[[D_ADDR:.*]] = fir.address_of(@_QFEd) : !fir.ref<i32>
26
+ ! CHECK: %[[I1:.*]] = fir.alloca i8 {bindc_name = "i1", uniq_name = "_QFEi1"}
24
27
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"}
25
28
! CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFEy"}
26
29
! CHECK: %[[Z:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFEz"}
@@ -115,10 +118,22 @@ program OmpAtomicUpdate
115
118
! CHECK: %[[RESULT:.*]] = arith.addi %[[LOADED_Y]], %[[ARG]] : i32
116
119
! CHECK: omp.yield(%[[RESULT]] : i32)
117
120
! CHECK: }
118
- ! CHECK: return
119
- ! CHECK: }
120
121
! $omp atomic hint(omp_sync_hint_nonspeculative) seq_cst
121
122
y = 10 + y
122
123
! $omp atomic seq_cst update
123
124
z = y + z
125
+
126
+ ! CHECK: omp.atomic.update %[[I1]] : !fir.ref<i8> {
127
+ ! CHECK: ^bb0(%[[VAL:.*]]: i8):
128
+ ! CHECK: %[[CVT_VAL:.*]] = fir.convert %[[VAL]] : (i8) -> i32
129
+ ! CHECK: %[[C1_VAL:.*]] = arith.constant 1 : i32
130
+ ! CHECK: %[[ADD_VAL:.*]] = arith.addi %[[CVT_VAL]], %[[C1_VAL]] : i32
131
+ ! CHECK: %[[UPDATED_VAL:.*]] = fir.convert %[[ADD_VAL]] : (i32) -> i8
132
+ ! CHECK: omp.yield(%[[UPDATED_VAL]] : i8)
133
+ ! CHECK: }
134
+ ! $omp atomic
135
+ i1 = i1 + 1
136
+ ! $omp end atomic
137
+ ! CHECK: return
138
+ ! CHECK: }
124
139
end program OmpAtomicUpdate
0 commit comments