brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · c8cfd2a Raw
87 lines · c
1// RUN: %libomp-compile2// RUN: env OMP_SCHEDULE=monotonic:dynamic,50 %libomp-run monotonic dynamic 503// RUN: env OMP_SCHEDULE=monotonic:guided,51 %libomp-run monotonic guided 514// RUN: env OMP_SCHEDULE=monotonic:static,52 %libomp-run monotonic static 525// RUN: env OMP_SCHEDULE=nonmonotonic:dynamic,53 %libomp-run nonmonotonic dynamic 536// RUN: env OMP_SCHEDULE=nonmonotonic:guided,54 %libomp-run nonmonotonic guided 547 8// The test checks OMP 5.0 monotonic/nonmonotonic OMP_SCHEDULE parsing9// The nonmonotonic tests see if the parser accepts nonmonotonic, if the10// parser doesn't then a static schedule is assumed11 12#include <stdio.h>13#include <string.h>14#include <omp.h>15 16int err = 0;17 18omp_sched_t sched_without_modifiers(omp_sched_t sched) {19  return (omp_sched_t)((int)sched & ~((int)omp_sched_monotonic));20}21 22int sched_has_modifiers(omp_sched_t sched, omp_sched_t modifiers) {23  return (int)sched & (int)modifiers;24}25 26// check that sched = hope | modifiers27void check_schedule(const char *extra, const omp_sched_t sched, int chunk,28                    omp_sched_t hope_sched, int hope_chunk) {29 30  if (sched != hope_sched || chunk != hope_chunk) {31    ++err;32    printf("Error: %s: schedule: (%d, %d) is not equal to (%d, %d)\n", extra,33           (int)hope_sched, hope_chunk, (int)sched, chunk);34  }35}36 37omp_sched_t str2omp_sched(const char *str) {38  if (!strcmp(str, "dynamic"))39    return omp_sched_dynamic;40  if (!strcmp(str, "static"))41    return omp_sched_static;42  if (!strcmp(str, "guided"))43    return omp_sched_guided;44  printf("Error: Unknown schedule type: %s\n", str);45  exit(1);46}47 48int is_monotonic(const char *str) { return !strcmp(str, "monotonic"); }49 50int main(int argc, char **argv) {51  int i, monotonic, chunk, ref_chunk;52  omp_sched_t sched, ref_sched;53 54  if (argc != 4) {55    printf("Error: usage: <executable> monotonic|nonmonotonic <schedule> "56           "<chunk-size>\n");57    exit(1);58  }59 60  monotonic = is_monotonic(argv[1]);61  ref_sched = str2omp_sched(argv[2]);62  ref_chunk = atoi(argv[3]);63 64  omp_get_schedule(&sched, &chunk);65 66  if (monotonic && !sched_has_modifiers(sched, omp_sched_monotonic)) {67    printf("Error: sched (0x%x) does not have monotonic modifier\n",68           (int)sched);69    ++err;70  }71  sched = sched_without_modifiers(sched);72  if (sched != ref_sched) {73    printf("Error: sched (0x%x) is not 0x%x\n", (int)sched, (int)ref_sched);74    ++err;75  }76  if (chunk != ref_chunk) {77    printf("Error: chunk is not %d\n", ref_chunk);78    ++err;79  }80  if (err > 0) {81    printf("Failed\n");82    return 1;83  }84  printf("Passed\n");85  return 0;86}87