1
1
! This test checks lowering of atomic and atomic update constructs
2
- ! RUN: bbc --use-desc-for-alloc=false - fopenacc -emit-fir -hlfir=false %s -o - | FileCheck %s
3
- ! RUN: %flang_fc1 -mllvm --use-desc-for-alloc=false - emit-fir -flang-deprecated-no-hlfir -fopenacc %s -o - | FileCheck %s
2
+ ! RUN: bbc -fopenacc -emit-fir -hlfir=false %s -o - | FileCheck %s
3
+ ! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenacc %s -o - | FileCheck %s
4
4
5
5
program acc_atomic_update_test
6
6
integer :: x, y, z
@@ -11,33 +11,25 @@ program acc_atomic_update_test
11
11
a= >c
12
12
b= >d
13
13
14
- ! CHECK: func.func @_QQmain() attributes {fir.bindc_name = "acc_atomic_update_test"} {
15
14
! CHECK: %[[A:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "a", uniq_name = "_QFEa"}
16
- ! CHECK: %[[A_ADDR:.*]] = fir.alloca !fir.ptr<i32> {uniq_name = "_QFEa.addr"}
17
- ! CHECK: %{{.*}} = fir.zero_bits !fir.ptr<i32>
18
- ! CHECK: fir.store %{{.*}} to %[[A_ADDR]] : !fir.ref<!fir.ptr<i32>>
19
15
! CHECK: %[[B:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "b", uniq_name = "_QFEb"}
20
- ! CHECK: %[[B_ADDR:.*]] = fir.alloca !fir.ptr<i32> {uniq_name = "_QFEb.addr"}
21
- ! CHECK: %{{.*}} = fir.zero_bits !fir.ptr<i32>
22
- ! CHECK: fir.store %{{.*}} to %[[B_ADDR]] : !fir.ref<!fir.ptr<i32>>
23
16
! CHECK: %[[C_ADDR:.*]] = fir.address_of(@_QFEc) : !fir.ref<i32>
24
17
! CHECK: %[[D_ADDR:.*]] = fir.address_of(@_QFEd) : !fir.ref<i32>
25
18
! CHECK: %[[I1:.*]] = fir.alloca i8 {bindc_name = "i1", uniq_name = "_QFEi1"}
26
19
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"}
27
20
! CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFEy"}
28
21
! CHECK: %[[Z:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFEz"}
29
- ! CHECK: %{{.*}} = fir.convert %[[C_ADDR]] : (!fir.ref<i32>) -> !fir.ptr<i32>
30
- ! CHECK: fir.store %{{.*}} to %[[A_ADDR]] : !fir.ref<!fir.ptr<i32>>
31
- ! CHECK: %{{.*}} = fir.convert %[[D_ADDR]] : (!fir.ref<i32>) -> !fir.ptr<i32>
32
- ! CHECK: fir.store {{.*}} to %[[B_ADDR]] : !fir.ref<!fir.ptr<i32>>
33
- ! CHECK: %[[LOADED_A:.*]] = fir.load %[[A_ADDR]] : !fir.ref<!fir.ptr<i32>>
34
- ! CHECK: %[[LOADED_B:.*]] = fir.load %[[B_ADDR]] : !fir.ref<!fir.ptr<i32>>
35
- ! CHECK: %{{.*}} = fir.load %[[LOADED_B]] : !fir.ptr<i32>
36
- ! CHECK: acc.atomic.update %[[LOADED_A]] : !fir.ptr<i32> {
37
- ! CHECK: ^bb0(%[[ARG:.*]]: i32):
38
- ! CHECK: %[[RESULT:.*]] = arith.addi %[[ARG]], %{{.*}} : i32
39
- ! CHECK: acc.yield %[[RESULT]] : i32
22
+ ! CHECK: %[[LOAD_A:.*]] = fir.load %[[A]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
23
+ ! CHECK: %[[BOX_ADDR_A:.*]] = fir.box_addr %[[LOAD_A]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
24
+ ! CHECK: %[[LOAD_B:.*]] = fir.load %[[B]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
25
+ ! CHECK: %[[BOX_ADDR_B:.*]] = fir.box_addr %[[LOAD_B]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
26
+ ! CHECK: %[[LOAD_BOX_ADDR_B:.*]] = fir.load %[[BOX_ADDR_B]] : !fir.ptr<i32>
27
+ ! CHECK: acc.atomic.update %[[BOX_ADDR_A]] : !fir.ptr<i32> {
28
+ ! CHECK: ^bb0(%[[ARG0:.*]]: i32):
29
+ ! CHECK: %[[ADD:.*]] = arith.addi %[[ARG0]], %[[LOAD_BOX_ADDR_B]] : i32
30
+ ! CHECK: acc.yield %[[ADD]] : i32
40
31
! CHECK: }
32
+
41
33
! $acc atomic update
42
34
a = a + b
43
35
@@ -72,3 +64,4 @@ program acc_atomic_update_test
72
64
! CHECK: return
73
65
! CHECK: }
74
66
end program acc_atomic_update_test
67
+
0 commit comments