@@ -5,14 +5,116 @@ struct HasSideEffects {
55 ~HasSideEffects ();
66};
77
8- // TODO: OpenACC: Implement 'global', NS lowering.
8+ HasSideEffects GlobalHSE1;
9+ HasSideEffects GlobalHSEArr[5 ];
10+ int GlobalInt1;
911
10- struct Struct {
11- static const HasSideEffects StaticMemHSE;
12- static const HasSideEffects StaticMemHSEArr[5 ];
13- static const int StaticMemInt;
12+ #pragma acc declare link(GlobalHSE1, GlobalInt1, GlobalHSEArr[1:1])
13+ // CHECK: acc.global_ctor @GlobalHSE1_acc_ctor {
14+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @GlobalHSE1 : !cir.ptr<!rec_HasSideEffects>
15+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!rec_HasSideEffects>) -> !cir.ptr<!rec_HasSideEffects> {name = "GlobalHSE1"}
16+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!rec_HasSideEffects>)
17+ // CHECK-NEXT: acc.terminator
18+ // CHECK-NEXT: }
19+ // CHECK-NOT: acc.global_dtor
20+ //
21+ // CHECK: acc.global_ctor @GlobalInt1_acc_ctor {
22+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @GlobalInt1 : !cir.ptr<!s32i>
23+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "GlobalInt1"}
24+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!s32i>)
25+ // CHECK-NEXT: acc.terminator
26+ // CHECK-NEXT: }
27+ //
28+ // CHECK: acc.global_ctor @GlobalHSEArr_acc_ctor {
29+ // CHECK-NEXT: %[[LB:.*]] = cir.const #cir.int<1> : !s32i
30+ // CHECK-NEXT: %[[LB_CAST:.*]] = builtin.unrealized_conversion_cast %[[LB]]
31+ // CHECK-NEXT: %[[UB:.*]] = cir.const #cir.int<1> : !s32i
32+ // CHECK-NEXT: %[[UB_CAST:.*]] = builtin.unrealized_conversion_cast %[[UB]]
33+ // CHECK-NEXT: %[[IDX:.*]] = arith.constant 0 : i64
34+ // CHECK-NEXT: %[[STRIDE:.*]] = arith.constant 1 : i64
35+ // CHECK-NEXT: %[[BOUNDS:.*]] = acc.bounds lowerbound(%[[LB_CAST]] : si32) extent(%[[UB_CAST]] : si32) stride(%[[STRIDE]] : i64) startIdx(%[[IDX]] : i64)
36+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @GlobalHSEArr : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>
37+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>) bounds(%[[BOUNDS]]) -> !cir.ptr<!cir.array<!rec_HasSideEffects x 5>> {name = "GlobalHSEArr[1:1]"}
38+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>)
39+ // CHECK-NEXT: acc.terminator
40+ // CHECK-NEXT: }
41+
42+ namespace NS {
43+
44+ HasSideEffects NSHSE1;
45+ HasSideEffects NSHSEArr[5 ];
46+ int NSInt1;
47+
48+ #pragma acc declare link(NSHSE1, NSInt1, NSHSEArr[1:1])
49+ // CHECK: acc.global_ctor @{{.*}}NSHSE1{{.*}}_acc_ctor {
50+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @{{.*}}NSHSE1{{.*}} : !cir.ptr<!rec_HasSideEffects>
51+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!rec_HasSideEffects>) -> !cir.ptr<!rec_HasSideEffects> {name = "NSHSE1"}
52+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!rec_HasSideEffects>)
53+ // CHECK-NEXT: acc.terminator
54+ // CHECK-NEXT: }
55+ //
56+ // CHECK: acc.global_ctor @{{.*}}NSInt1{{.*}}_acc_ctor {
57+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @{{.*}}NSInt1{{.*}} : !cir.ptr<!s32i>
58+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "NSInt1"}
59+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!s32i>)
60+ // CHECK-NEXT: acc.terminator
61+ // CHECK-NEXT: }
62+ //
63+ // CHECK: acc.global_ctor @{{.*}}NSHSEArr{{.*}}_acc_ctor {
64+ // CHECK-NEXT: %[[LB:.*]] = cir.const #cir.int<1> : !s32i
65+ // CHECK-NEXT: %[[LB_CAST:.*]] = builtin.unrealized_conversion_cast %[[LB]]
66+ // CHECK-NEXT: %[[UB:.*]] = cir.const #cir.int<1> : !s32i
67+ // CHECK-NEXT: %[[UB_CAST:.*]] = builtin.unrealized_conversion_cast %[[UB]]
68+ // CHECK-NEXT: %[[IDX:.*]] = arith.constant 0 : i64
69+ // CHECK-NEXT: %[[STRIDE:.*]] = arith.constant 1 : i64
70+ // CHECK-NEXT: %[[BOUNDS:.*]] = acc.bounds lowerbound(%[[LB_CAST]] : si32) extent(%[[UB_CAST]] : si32) stride(%[[STRIDE]] : i64) startIdx(%[[IDX]] : i64)
71+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @{{.*}}NSHSEArr{{.*}} : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>
72+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>) bounds(%[[BOUNDS]]) -> !cir.ptr<!cir.array<!rec_HasSideEffects x 5>> {name = "NSHSEArr[1:1]"}
73+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>)
74+ // CHECK-NEXT: acc.terminator
75+ // CHECK-NEXT: }
76+
77+ } // namespace NS
78+
79+ namespace {
1480
15- // TODO: OpenACC: Implement static-local lowering.
81+ HasSideEffects AnonNSHSE1;
82+ HasSideEffects AnonNSHSEArr[5 ];
83+ int AnonNSInt1;
84+
85+ #pragma acc declare link(AnonNSHSE1, AnonNSInt1, AnonNSHSEArr[1:1])
86+ // CHECK: acc.global_ctor @{{.*}}AnonNSHSE1{{.*}}_acc_ctor {
87+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @{{.*}}AnonNSHSE1{{.*}} : !cir.ptr<!rec_HasSideEffects>
88+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!rec_HasSideEffects>) -> !cir.ptr<!rec_HasSideEffects> {name = "AnonNSHSE1"}
89+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!rec_HasSideEffects>)
90+ // CHECK-NEXT: acc.terminator
91+ // CHECK-NEXT: }
92+ //
93+ // CHECK: acc.global_ctor @{{.*}}AnonNSInt1{{.*}}_acc_ctor {
94+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @{{.*}}AnonNSInt1{{.*}} : !cir.ptr<!s32i>
95+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "AnonNSInt1"}
96+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!s32i>)
97+ // CHECK-NEXT: acc.terminator
98+ // CHECK-NEXT: }
99+ //
100+ // CHECK: acc.global_ctor @{{.*}}AnonNSHSEArr{{.*}}_acc_ctor {
101+ // CHECK-NEXT: %[[LB:.*]] = cir.const #cir.int<1> : !s32i
102+ // CHECK-NEXT: %[[LB_CAST:.*]] = builtin.unrealized_conversion_cast %[[LB]]
103+ // CHECK-NEXT: %[[UB:.*]] = cir.const #cir.int<1> : !s32i
104+ // CHECK-NEXT: %[[UB_CAST:.*]] = builtin.unrealized_conversion_cast %[[UB]]
105+ // CHECK-NEXT: %[[IDX:.*]] = arith.constant 0 : i64
106+ // CHECK-NEXT: %[[STRIDE:.*]] = arith.constant 1 : i64
107+ // CHECK-NEXT: %[[BOUNDS:.*]] = acc.bounds lowerbound(%[[LB_CAST]] : si32) extent(%[[UB_CAST]] : si32) stride(%[[STRIDE]] : i64) startIdx(%[[IDX]] : i64)
108+ // CHECK-NEXT: %[[GET_GLOBAL:.*]] = cir.get_global @{{.*}}AnonNSHSEArr{{.*}} : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>
109+ // CHECK-NEXT: %[[CREATE:.*]] = acc.declare_link varPtr(%[[GET_GLOBAL]] : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>) bounds(%[[BOUNDS]]) -> !cir.ptr<!cir.array<!rec_HasSideEffects x 5>> {name = "AnonNSHSEArr[1:1]"}
110+ // CHECK-NEXT: acc.declare_enter dataOperands(%[[CREATE]] : !cir.ptr<!cir.array<!rec_HasSideEffects x 5>>)
111+ // CHECK-NEXT: acc.terminator
112+ // CHECK-NEXT: }
113+
114+ } // namespace NS
115+
116+
117+ struct Struct {
16118
17119 void MemFunc1 () {
18120 // CHECK: cir.func {{.*}}MemFunc1{{.*}}({{.*}}) {
0 commit comments