https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66862
Bug ID: 66862 Summary: OpenMP SIMD does not work (use SIMD instructions) on conditional code Product: gcc Version: 5.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: bill.jordan at intel dot com Target Milestone: --- Created attachment 35971 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35971&action=edit SIMD sample code In the following loop,the omp simd pragma has no affect: #pragma omp simd private(value) linear(ij, kj) safelen(64) for (j = 0; j < switches; ++j) { value = cost[ik] + cost[kj]; if (value < cost[ij]) { cost[ij] = value; } ++ij; ++kj; } Without the "if" clause, the compiler will generate SIMD code. Compilation line is: gcc -Wall -Wextra -O3 -save-temps -fopenmp-simd -c floyds_simd.c Attached source includes 4 routines: floyds_wo_omp_simd: Base function. floyds_w_omp_simd: Base function with #pragma omp simd directive not_floyds_wo_omp_simd: Base function without if clause not_floyds_w_omp_simd: Base function without if clause with #pragma omp simd