> case NE_EXPR: > - if (!flag_enable_cilk) > + /* NE_EXPR is only allowed for Cilk Plus loops. */ > + if (flag_enable_cilk > + && gimple_omp_for_kind (for_stmt) == GF_OMP_FOR_KIND_CILKSIMD) > + break; > + else > gcc_unreachable (); > - /* NE_EXPR is technically not allowed in OpenMP, but it is > - allowed in Cilk Plus, which generates OMP_SIMD constructs. */ > - break;
Something I'm going to bring up wrt the main cilk+ patches, but checking flag_enable_cilk is useless. One can only get KIND_CILKSIMD if cilk is enabled, and the test itself is very inexpensive. Better as if (gimple_omp_for_kind (for_stmt) == GF_OMP_FOR_KIND_CILKSIMD) { // if you really thing we need to check it... gcc_checking_assert (flag_enable_cilk); break; } gcc_unreachable (); Or, best as gcc_checking_assert (flag_enable_cilk); gcc_assert (gimple_omp_for_kind (for_stmt) == GF_OMP_FOR_KIND_CILKSIMD); break; since I believe the front end should have already checked this grammar. > + bool cilkplus_block = false; > + if (flag_enable_cilk) > + { > + if ((branch_ctx > + && gimple_code (branch_ctx) == GIMPLE_OMP_FOR > + && gimple_omp_for_kind (branch_ctx) & GF_OMP_FOR_KIND_CILKSIMD) > + || (gimple_code (label_ctx) == GIMPLE_OMP_FOR > + && gimple_omp_for_kind (label_ctx) & GF_OMP_FOR_KIND_CILKSIMD)) > + cilkplus_block = true; > + } The & tests here aren't right. Recall that CILKSIMD == 3 << 3, so that covers DISTRIBUTE and normal SIMD as well. The only & tests should have been for SIMD when one wants both SIMD and CILKSIMD. r~