|
1 |
| -! This test checks lowering of OpenACC declare directive. |
| 1 | +! This test checks lowering of OpenACC declare directive in subroutine and |
| 2 | +! function specification parts. |
2 | 3 |
|
3 | 4 | ! RUN: bbc -fopenacc -emit-fir %s -o - | FileCheck %s
|
4 | 5 |
|
5 |
| -module acc_declare_test |
6 |
| - integer, parameter :: n = 100000 |
7 |
| - real, dimension(n) :: data1 |
8 |
| - !$acc declare create(data1) |
9 |
| -end module |
10 |
| - |
11 |
| -! CHECK-LABEL: fir.global @_QMacc_declare_testEdata1 {acc.declare = #acc.declare<dataClause = acc_create>} : !fir.array<100000xf32> |
12 |
| - |
13 |
| -! CHECK-LABEL: acc.global_ctor @_QMacc_declare_testEdata1_acc_ctor { |
14 |
| -! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_testEdata1) {acc.declare = #acc.declare<dataClause = acc_create>} : !fir.ref<!fir.array<100000xf32>> |
15 |
| -! CHECK: %[[CREATE:.*]] = acc.create varPtr(%[[GLOBAL_ADDR]] : !fir.ref<!fir.array<100000xf32>>) -> !fir.ref<!fir.array<100000xf32>> {name = "data1", structured = false} |
16 |
| -! CHECK: acc.declare_enter dataOperands(%[[CREATE]] : !fir.ref<!fir.array<100000xf32>>) |
17 |
| -! CHECK: acc.terminator |
18 |
| -! CHECK: } |
19 |
| - |
20 |
| -! CHECK-LABEL: acc.global_dtor @_QMacc_declare_testEdata1_acc_dtor { |
21 |
| -! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_testEdata1) {acc.declare = #acc.declare<dataClause = acc_create>} : !fir.ref<!fir.array<100000xf32>> |
22 |
| -! CHECK: %[[DEVICEPTR:.*]] = acc.getdeviceptr varPtr(%[[GLOBAL_ADDR]] : !fir.ref<!fir.array<100000xf32>>) -> !fir.ref<!fir.array<100000xf32>> {dataClause = #acc<data_clause acc_create>, name = "data1", structured = false} |
23 |
| -! CHECK: acc.declare_exit dataOperands(%[[DEVICEPTR]] : !fir.ref<!fir.array<100000xf32>>) |
24 |
| -! CHECK: acc.delete accPtr(%[[DEVICEPTR]] : !fir.ref<!fir.array<100000xf32>>) {dataClause = #acc<data_clause acc_create>, name = "data1", structured = false} |
25 |
| -! CHECK: acc.terminator |
26 |
| -! CHECK: } |
27 |
| - |
28 |
| -module acc_declare_copyin_test |
29 |
| - integer, parameter :: n = 100000 |
30 |
| - real, dimension(n) :: data1 |
31 |
| - !$acc declare copyin(data1) |
32 |
| -end module |
33 |
| - |
34 |
| - |
35 |
| -! CHECK-LABEL: acc.global_ctor @_QMacc_declare_copyin_testEdata1_acc_ctor { |
36 |
| -! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_copyin_testEdata1) {acc.declare = #acc.declare<dataClause = acc_copyin>} : !fir.ref<!fir.array<100000xf32>> |
37 |
| -! CHECK: %[[COPYIN:.*]] = acc.copyin varPtr(%[[GLOBAL_ADDR]] : !fir.ref<!fir.array<100000xf32>>) -> !fir.ref<!fir.array<100000xf32>> {name = "data1", structured = false} |
38 |
| -! CHECK: acc.declare_enter dataOperands(%[[COPYIN]] : !fir.ref<!fir.array<100000xf32>>) |
39 |
| -! CHECK: acc.terminator |
40 |
| -! CHECK: } |
41 |
| - |
42 |
| -module acc_declare_device_resident_test |
43 |
| - integer, parameter :: n = 5000 |
44 |
| - integer, dimension(n) :: data1 |
45 |
| - !$acc declare device_resident(data1) |
46 |
| -end module |
47 |
| - |
48 |
| -! CHECK-LABEL: fir.global @_QMacc_declare_device_resident_testEdata1 {acc.declare = #acc.declare<dataClause = acc_declare_device_resident>} : !fir.array<5000xi32> |
49 |
| - |
50 |
| -! CHECK-LABEL: acc.global_ctor @_QMacc_declare_device_resident_testEdata1_acc_ctor { |
51 |
| -! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_device_resident_testEdata1) {acc.declare = #acc.declare<dataClause = acc_declare_device_resident>} : !fir.ref<!fir.array<5000xi32>> |
52 |
| -! CHECK: %[[DEVICERESIDENT:.*]] = acc.declare_device_resident varPtr(%0 : !fir.ref<!fir.array<5000xi32>>) -> !fir.ref<!fir.array<5000xi32>> {name = "data1", structured = false} |
53 |
| -! CHECK: acc.declare_enter dataOperands(%[[DEVICERESIDENT]] : !fir.ref<!fir.array<5000xi32>>) |
54 |
| -! CHECK: acc.terminator |
55 |
| -! CHECK: } |
56 |
| - |
57 |
| -! CHECK-LABEL: acc.global_dtor @_QMacc_declare_device_resident_testEdata1_acc_dtor { |
58 |
| -! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_device_resident_testEdata1) {acc.declare = #acc.declare<dataClause = acc_declare_device_resident>} : !fir.ref<!fir.array<5000xi32>> |
59 |
| -! CHECK: %[[DEVPTR:.*]] = acc.getdeviceptr varPtr(%[[GLOBAL_ADDR]] : !fir.ref<!fir.array<5000xi32>>) -> !fir.ref<!fir.array<5000xi32>> {dataClause = #acc<data_clause acc_declare_device_resident>, name = "data1", structured = false} |
60 |
| -! CHECK: acc.declare_exit dataOperands(%[[DEVICEPTR]] : !fir.ref<!fir.array<5000xi32>>) |
61 |
| -! CHECK: acc.delete accPtr(%[[DEVICEPTR]] : !fir.ref<!fir.array<5000xi32>>) {dataClause = #acc<data_clause acc_declare_device_resident>, name = "data1", structured = false} |
62 |
| -! CHECK: acc.terminator |
63 |
| -! CHECK: } |
64 |
| - |
65 |
| -module acc_declare_device_link_test |
66 |
| - integer, parameter :: n = 5000 |
67 |
| - integer, dimension(n) :: data1 |
68 |
| - !$acc declare link(data1) |
69 |
| -end module |
70 |
| - |
71 |
| -! CHECK-LABEL: fir.global @_QMacc_declare_device_link_testEdata1 {acc.declare = #acc.declare<dataClause = acc_declare_link>} : !fir.array<5000xi32> { |
72 |
| - |
73 |
| -! CHECK-LABEL: acc.global_ctor @_QMacc_declare_device_link_testEdata1_acc_ctor { |
74 |
| -! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_device_link_testEdata1) {acc.declare = #acc.declare<dataClause = acc_declare_link>} : !fir.ref<!fir.array<5000xi32>> |
75 |
| -! CHECK: %[[LINK:.*]] = acc.declare_link varPtr(%[[GLOBAL_ADDR]] : !fir.ref<!fir.array<5000xi32>>) -> !fir.ref<!fir.array<5000xi32>> {name = "data1", structured = false} |
76 |
| -! CHECK: acc.declare_enter dataOperands(%[[LINK]] : !fir.ref<!fir.array<5000xi32>>) |
77 |
| -! CHECK: acc.terminator |
78 |
| -! CHECK: } |
79 |
| - |
80 | 6 | module acc_declare
|
81 | 7 | contains
|
82 | 8 |
|
|
0 commit comments