blob: 3ebe2ffe31299496e780b7d946f553bf57b97fef [file] [log] [blame]
Michael Kruse2c7a8ea2019-08-04 04:18:28 +00001// RUN: %libomptarget-compile-run-and-check-aarch64-unknown-linux-gnu
2// RUN: %libomptarget-compile-run-and-check-powerpc64-ibm-linux-gnu
3// RUN: %libomptarget-compile-run-and-check-powerpc64le-ibm-linux-gnu
4// RUN: %libomptarget-compile-run-and-check-x86_64-pc-linux-gnu
5
6#include <cstdio>
7#include <cstdlib>
8
9// Data structure definitions copied from OpenMP RTL.
10struct MapComponentInfoTy {
11 void *Base;
12 void *Begin;
13 int64_t Size;
14 int64_t Type;
15 MapComponentInfoTy() = default;
16 MapComponentInfoTy(void *Base, void *Begin, int64_t Size, int64_t Type)
17 : Base(Base), Begin(Begin), Size(Size), Type(Type) {}
18};
19
20struct MapperComponentsTy {
21 std::vector<MapComponentInfoTy> Components;
22};
23
24// OpenMP RTL interfaces
25#ifdef __cplusplus
26extern "C" {
27#endif
28int64_t __tgt_mapper_num_components(void *rt_mapper_handle);
29void __tgt_push_mapper_component(void *rt_mapper_handle, void *base,
30 void *begin, int64_t size, int64_t type);
31#ifdef __cplusplus
32}
33#endif
34
35int main(int argc, char *argv[]) {
36 MapperComponentsTy MC;
37 void *base, *begin;
38 int64_t size, type;
39 // Push 2 elements into MC.
40 __tgt_push_mapper_component((void *)&MC, base, begin, size, type);
41 __tgt_push_mapper_component((void *)&MC, base, begin, size, type);
42 int64_t num = __tgt_mapper_num_components((void *)&MC);
43 // CHECK: num=2
44 printf("num=%lld\n", num);
45 return 0;
46}