@@ -29,6 +29,34 @@ void test1() {
29
29
: D0, D1)
30
30
}
31
31
32
+ struct S {
33
+ omp_interop_t interop;
34
+ void member_test ();
35
+ };
36
+
37
+ void S::member_test () {
38
+
39
+ int device_id = 4 ;
40
+ int D0, D1;
41
+
42
+ #pragma omp interop init(target \
43
+ : interop)
44
+
45
+ #pragma omp interop init(targetsync \
46
+ : interop)
47
+
48
+ #pragma omp interop init(target \
49
+ : interop) device (device_id)
50
+
51
+ #pragma omp interop init(targetsync \
52
+ : interop) device (device_id)
53
+
54
+ #pragma omp interop use(interop) depend(in \
55
+ : D0, D1) nowait
56
+
57
+ #pragma omp interop destroy(interop) depend(in \
58
+ : D0, D1)
59
+ }
32
60
// CHECK-LABEL: @_Z5test1v(
33
61
// CHECK-NEXT: entry:
34
62
// CHECK-NEXT: [[DEVICE_ID:%.*]] = alloca i32, align 4
@@ -94,3 +122,77 @@ void test1() {
94
122
// CHECK-NEXT: call void @__tgt_interop_destroy(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM7]], i8** [[INTEROP]], i32 -1, i32 2, i8* [[TMP25]], i32 0)
95
123
// CHECK-NEXT: ret void
96
124
//
125
+ //
126
+ // CHECK-LABEL: @_ZN1S11member_testEv(
127
+ // CHECK-NEXT: entry:
128
+ // CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S*, align 8
129
+ // CHECK-NEXT: [[DEVICE_ID:%.*]] = alloca i32, align 4
130
+ // CHECK-NEXT: [[D0:%.*]] = alloca i32, align 4
131
+ // CHECK-NEXT: [[D1:%.*]] = alloca i32, align 4
132
+ // CHECK-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [2 x %struct.kmp_depend_info], align 8
133
+ // CHECK-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 8
134
+ // CHECK-NEXT: [[DOTDEP_ARR_ADDR10:%.*]] = alloca [2 x %struct.kmp_depend_info], align 8
135
+ // CHECK-NEXT: [[DEP_COUNTER_ADDR11:%.*]] = alloca i64, align 8
136
+ // CHECK-NEXT: store %struct.S* [[THIS:%.*]], %struct.S** [[THIS_ADDR]], align 8
137
+ // CHECK-NEXT: [[THIS1:%.*]] = load %struct.S*, %struct.S** [[THIS_ADDR]], align 8
138
+ // CHECK-NEXT: store i32 4, i32* [[DEVICE_ID]], align 4
139
+ // CHECK-NEXT: [[INTEROP:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], %struct.S* [[THIS1]], i32 0, i32 0
140
+ // CHECK-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
141
+ // CHECK-NEXT: call void @__tgt_interop_init(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM]], i8** [[INTEROP]], i64 1, i32 -1, i32 0, i8* null, i32 0)
142
+ // CHECK-NEXT: [[INTEROP2:%.*]] = getelementptr inbounds [[STRUCT_S]], %struct.S* [[THIS1]], i32 0, i32 0
143
+ // CHECK-NEXT: [[OMP_GLOBAL_THREAD_NUM3:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
144
+ // CHECK-NEXT: call void @__tgt_interop_init(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]], i8** [[INTEROP2]], i64 2, i32 -1, i32 0, i8* null, i32 0)
145
+ // CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[DEVICE_ID]], align 4
146
+ // CHECK-NEXT: [[INTEROP4:%.*]] = getelementptr inbounds [[STRUCT_S]], %struct.S* [[THIS1]], i32 0, i32 0
147
+ // CHECK-NEXT: [[OMP_GLOBAL_THREAD_NUM5:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
148
+ // CHECK-NEXT: call void @__tgt_interop_init(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5]], i8** [[INTEROP4]], i64 1, i32 [[TMP0]], i32 0, i8* null, i32 0)
149
+ // CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[DEVICE_ID]], align 4
150
+ // CHECK-NEXT: [[INTEROP6:%.*]] = getelementptr inbounds [[STRUCT_S]], %struct.S* [[THIS1]], i32 0, i32 0
151
+ // CHECK-NEXT: [[OMP_GLOBAL_THREAD_NUM7:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
152
+ // CHECK-NEXT: call void @__tgt_interop_init(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM7]], i8** [[INTEROP6]], i64 2, i32 [[TMP1]], i32 0, i8* null, i32 0)
153
+ // CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], [2 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR]], i64 0, i64 0
154
+ // CHECK-NEXT: [[TMP3:%.*]] = ptrtoint i32* [[D0]] to i64
155
+ // CHECK-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], %struct.kmp_depend_info* [[TMP2]], i64 0
156
+ // CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP4]], i32 0, i32 0
157
+ // CHECK-NEXT: store i64 [[TMP3]], i64* [[TMP5]], align 8
158
+ // CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP4]], i32 0, i32 1
159
+ // CHECK-NEXT: store i64 4, i64* [[TMP6]], align 8
160
+ // CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP4]], i32 0, i32 2
161
+ // CHECK-NEXT: store i8 1, i8* [[TMP7]], align 8
162
+ // CHECK-NEXT: [[TMP8:%.*]] = ptrtoint i32* [[D1]] to i64
163
+ // CHECK-NEXT: [[TMP9:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP2]], i64 1
164
+ // CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP9]], i32 0, i32 0
165
+ // CHECK-NEXT: store i64 [[TMP8]], i64* [[TMP10]], align 8
166
+ // CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP9]], i32 0, i32 1
167
+ // CHECK-NEXT: store i64 4, i64* [[TMP11]], align 8
168
+ // CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP9]], i32 0, i32 2
169
+ // CHECK-NEXT: store i8 1, i8* [[TMP12]], align 8
170
+ // CHECK-NEXT: store i64 2, i64* [[DEP_COUNTER_ADDR]], align 8
171
+ // CHECK-NEXT: [[TMP13:%.*]] = bitcast %struct.kmp_depend_info* [[TMP2]] to i8*
172
+ // CHECK-NEXT: [[INTEROP8:%.*]] = getelementptr inbounds [[STRUCT_S]], %struct.S* [[THIS1]], i32 0, i32 0
173
+ // CHECK-NEXT: [[OMP_GLOBAL_THREAD_NUM9:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
174
+ // CHECK-NEXT: call void @__tgt_interop_use(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM9]], i8** [[INTEROP8]], i32 -1, i32 2, i8* [[TMP13]], i32 1)
175
+ // CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], [2 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR10]], i64 0, i64 0
176
+ // CHECK-NEXT: [[TMP15:%.*]] = ptrtoint i32* [[D0]] to i64
177
+ // CHECK-NEXT: [[TMP16:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP14]], i64 0
178
+ // CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP16]], i32 0, i32 0
179
+ // CHECK-NEXT: store i64 [[TMP15]], i64* [[TMP17]], align 8
180
+ // CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP16]], i32 0, i32 1
181
+ // CHECK-NEXT: store i64 4, i64* [[TMP18]], align 8
182
+ // CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP16]], i32 0, i32 2
183
+ // CHECK-NEXT: store i8 1, i8* [[TMP19]], align 8
184
+ // CHECK-NEXT: [[TMP20:%.*]] = ptrtoint i32* [[D1]] to i64
185
+ // CHECK-NEXT: [[TMP21:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP14]], i64 1
186
+ // CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP21]], i32 0, i32 0
187
+ // CHECK-NEXT: store i64 [[TMP20]], i64* [[TMP22]], align 8
188
+ // CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP21]], i32 0, i32 1
189
+ // CHECK-NEXT: store i64 4, i64* [[TMP23]], align 8
190
+ // CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP21]], i32 0, i32 2
191
+ // CHECK-NEXT: store i8 1, i8* [[TMP24]], align 8
192
+ // CHECK-NEXT: store i64 2, i64* [[DEP_COUNTER_ADDR11]], align 8
193
+ // CHECK-NEXT: [[TMP25:%.*]] = bitcast %struct.kmp_depend_info* [[TMP14]] to i8*
194
+ // CHECK-NEXT: [[INTEROP12:%.*]] = getelementptr inbounds [[STRUCT_S]], %struct.S* [[THIS1]], i32 0, i32 0
195
+ // CHECK-NEXT: [[OMP_GLOBAL_THREAD_NUM13:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
196
+ // CHECK-NEXT: call void @__tgt_interop_destroy(%struct.ident_t* @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM13]], i8** [[INTEROP12]], i32 -1, i32 2, i8* [[TMP25]], i32 0)
197
+ // CHECK-NEXT: ret void
198
+ //
0 commit comments