llvm-project/offload/test/offloading/strided_offset_multidim_update.c
Nick Sarnie 38a46a12c4
[offload][lit] Disable tests failing on Intel GPU (#189422)
Fix some tests causing hangs, one fail, and a few XPASSing. We are
seeing new passes/fails because of the named barrier changes being
merged.

Signed-off-by: Nick Sarnie <nick.sarnie@intel.com>
2026-03-30 18:02:34 +00:00

95 lines
2.9 KiB
C

// RUN: %libomptarget-compile-run-and-check-generic
// UNSUPPORTED: intelgpu
// Make sure multi-dimensional strided offset update works correctly.
#include <stdio.h>
#define N 6
#define SLICE1 1 : 2 : 2
#define SLICE2 2 : 3
int main() {
int darr[N][N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
darr[i][j] = 100 + 10 * i + j;
printf("Full array\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("\t%d", darr[i][j]);
}
printf("\n");
}
#pragma omp target enter data map(alloc : darr[0 : N][0 : N])
// Zero out target array.
#pragma omp target
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
darr[i][j] = 0;
// Only copy over the slice to the device.
#pragma omp target update to(darr[SLICE1][SLICE2])
// Then copy over the entire array to the host.
#pragma omp target exit data map(from : darr[0 : N][0 : N])
printf("Only slice (to)\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("\t%d", darr[i][j]);
}
printf("\n");
}
#pragma omp target enter data map(alloc : darr[0 : N][0 : N])
// Initialize on the device
#pragma omp target
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
darr[i][j] = 100 + 10 * i + j;
// Zero out host array.
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
darr[i][j] = 0;
// Copy over only the slice to the host
#pragma omp target update from(darr[SLICE1][SLICE2])
#pragma omp target exit data map(delete : darr[0 : N][0 : N])
printf("Only slice (from)\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("\t%d", darr[i][j]);
}
printf("\n");
}
return 0;
}
// CHECK: Full array
// CHECK-NEXT: 100 101 102 103 104 105
// CHECK-NEXT: 110 111 112 113 114 115
// CHECK-NEXT: 120 121 122 123 124 125
// CHECK-NEXT: 130 131 132 133 134 135
// CHECK-NEXT: 140 141 142 143 144 145
// CHECK-NEXT: 150 151 152 153 154 155
// CHECK-NEXT: Only slice (to)
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: 0 0 112 113 114 0
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: 0 0 132 133 134 0
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: Only slice (from)
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: 0 0 112 113 114 0
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: 0 0 132 133 134 0
// CHECK-NEXT: 0 0 0 0 0 0
// CHECK-NEXT: 0 0 0 0 0 0