blob: c60fa0cbad1ec0febed1b2f93cbd918202cc27f7 [file]
// RUN: %libomptarget-compile-run-and-check-generic
// RUN: %libomptarget-compileopt-run-and-check-generic
// UNSUPPORTED: intelgpu
#include <stdio.h>
int main(void) {
_Float16 sum = 0;
#pragma omp target teams distribute parallel for map(tofrom : sum) \
reduction(+ : sum)
for (int i = 0; i < 1024; ++i)
sum += (_Float16)1;
_Float16 maximum = 0;
#pragma omp target teams distribute parallel for map(tofrom : maximum) \
reduction(max : maximum)
for (int i = 0; i < 1024; ++i) {
_Float16 v = (_Float16)(i % 10);
maximum = v > maximum ? v : maximum;
}
// Control: 'short' is also 2 bytes but takes the integer path, which was
// never broken. It must stay correct.
short int_sum = 0;
#pragma omp target teams distribute parallel for map(tofrom : int_sum) \
reduction(+ : int_sum)
for (int i = 0; i < 1024; ++i)
int_sum += 1;
// CHECK: sum = 1024
// CHECK: maximum = 9
// CHECK: int_sum = 1024
printf("sum = %g\n", (double)sum);
printf("maximum = %g\n", (double)maximum);
printf("int_sum = %d\n", int_sum);
return 0;
}