/
pccc
/
pccc-mlir
Обзор
Документация
Войти
/
pccc
/
pccc-mlir
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
offload/test/mapping/data_member_ref.cpp
79 строк
2 KB
obitotsky
fork mlir
19 июл 2026, 07:05
Верифицирован
19 июл 2026, 07:05
6422b87
Код
Авторство
О чём код?
// RUN: %libomptarget-compilexx-run-and-check-generic #include <stdio.h> struct View { int Data; }; struct ViewPtr { int *Data; }; template <typename T> struct Foo { Foo(T &V) : VRef(V) {} T &VRef; }; int main() { View V; V.Data = 123456; Foo<View> Bar(V); ViewPtr V1; int Data = 123456; V1.Data = &Data; Foo<ViewPtr> Baz(V1); int D1, D2; // CHECK: Host 123456. printf("Host %d.\n", Bar.VRef.Data); #pragma omp target map(Bar.VRef) map(from : D1, D2) { // CHECK: Device 123456. D1 = Bar.VRef.Data; printf("Device %d.\n", D1); V.Data = 654321; // CHECK: Device 654321. D2 = Bar.VRef.Data; printf("Device %d.\n", D2); } printf("Device %d.\n", D1); printf("Device %d.\n", D2); // CHECK: Host 654321 654321. printf("Host %d %d.\n", Bar.VRef.Data, V.Data); V.Data = 123456; // CHECK: Host 123456. printf("Host %d.\n", Bar.VRef.Data); #pragma omp target map(Bar) map(Bar.VRef) map(from : D1, D2) { // CHECK: Device 123456. D1 = Bar.VRef.Data; printf("Device %d.\n", D1); V.Data = 654321; // CHECK: Device 654321. D2 = Bar.VRef.Data; printf("Device %d.\n", D2); } printf("Device %d.\n", D1); printf("Device %d.\n", D2); // CHECK: Host 654321 654321. printf("Host %d %d.\n", Bar.VRef.Data, V.Data); // CHECK: Host 123456. printf("Host %d.\n", *Baz.VRef.Data); #pragma omp target map(Baz.VRef.Data) map(*Baz.VRef.Data) map(V1.Data[0 : 0]) \ map(from : D1, D2) { // CHECK: Device 123456. D1 = *Baz.VRef.Data; printf("Device %d.\n", D1); *V1.Data = 654321; // CHECK: Device 654321. D2 = *Baz.VRef.Data; printf("Device %d.\n", D2); } printf("Device %d.\n", D1); printf("Device %d.\n", D2); // CHECK: Host 654321 654321 654321. printf("Host %d %d %d.\n", *Baz.VRef.Data, *V1.Data, Data); return 0; }