195cefacfSHansang Bae // RUN: %libomp-compile-and-run 2*047890bcSJoachim Protze // critial with hint was introduced with icc 19 3*047890bcSJoachim Protze // UNSUPPORTED: icc-18 4*047890bcSJoachim Protze 595cefacfSHansang Bae #include <stdio.h> 695cefacfSHansang Bae #include <omp.h> 795cefacfSHansang Bae #include "omp_testsuite.h" 895cefacfSHansang Bae test_omp_critical(int iter)995cefacfSHansang Baeint test_omp_critical(int iter) { 1095cefacfSHansang Bae int sum; 1195cefacfSHansang Bae int known_sum; 1295cefacfSHansang Bae 1395cefacfSHansang Bae sum = 0; 1495cefacfSHansang Bae #pragma omp parallel 1595cefacfSHansang Bae { 1695cefacfSHansang Bae int mysum = 0; 1795cefacfSHansang Bae int i; 1895cefacfSHansang Bae #pragma omp for 1995cefacfSHansang Bae for (i = 0; i < 1000; i++) 2095cefacfSHansang Bae mysum = mysum + i; 2195cefacfSHansang Bae 2295cefacfSHansang Bae switch (iter % 4) { 2395cefacfSHansang Bae case 0: 2495cefacfSHansang Bae #pragma omp critical(c0) hint(omp_sync_hint_uncontended) 2595cefacfSHansang Bae sum = mysum + sum; 2695cefacfSHansang Bae break; 2795cefacfSHansang Bae case 1: 2895cefacfSHansang Bae #pragma omp critical(c1) hint(omp_sync_hint_contended) 2995cefacfSHansang Bae sum = mysum + sum; 3095cefacfSHansang Bae break; 3195cefacfSHansang Bae case 2: 3295cefacfSHansang Bae #pragma omp critical(c2) hint(omp_sync_hint_nonspeculative) 3395cefacfSHansang Bae sum = mysum + sum; 3495cefacfSHansang Bae break; 3595cefacfSHansang Bae case 3: 3695cefacfSHansang Bae #pragma omp critical(c3) hint(omp_sync_hint_speculative) 3795cefacfSHansang Bae sum = mysum + sum; 3895cefacfSHansang Bae break; 3995cefacfSHansang Bae default:; 4095cefacfSHansang Bae } 4195cefacfSHansang Bae } 4295cefacfSHansang Bae known_sum = 999 * 1000 / 2; 4395cefacfSHansang Bae return (known_sum == sum); 4495cefacfSHansang Bae } 4595cefacfSHansang Bae main()4695cefacfSHansang Baeint main() { 4795cefacfSHansang Bae int i; 4895cefacfSHansang Bae int num_failed = 0; 4995cefacfSHansang Bae 5095cefacfSHansang Bae for (i = 0; i < 4 * REPETITIONS; i++) { 5195cefacfSHansang Bae if (!test_omp_critical(i)) { 5295cefacfSHansang Bae num_failed++; 5395cefacfSHansang Bae } 5495cefacfSHansang Bae } 5595cefacfSHansang Bae return num_failed; 5695cefacfSHansang Bae } 57