On Tue, Dec 03, 2013 at 01:25:57PM +0000, Iyer, Balaji V wrote: > > >> As you can tell, this is not how openmp handles a #pragma omp for loop. > > > > > > It's different in detail, but #pragma omp parallel for works very > > > similarly: it creates a separate function for the body of the loop and > > > then passes that to GOMP_parallel along with any shared data. > > My thoughts exactly. > > I understand you both now. Let me look into the OMP routines and see what > it is doing and see how I can port it to _Cilk_for.
Yeah. The work is actually multi-stage, first during gimplification the code does determine what variables are used in the #pragma omp parallel (etc., in your case _Cilk_for) region, and whether they should be shared, or privatized (and in that case in what way, normal private, firstprivate, lastprivate, firstprivate+lastprivate, reduction, ...). Then there is omplower pass (already enabled for Cilk+ due to #pragma simd) that e.g. lowers accesses to shared variables, creates new VAR_DECLs for the privatized vars etc. and then ompexp pass that will create the outlined body of the function and create call to the runtime library. I have no idea what privatization behavior _Cilk_for wants, I'd expect that at least the IV must be privatized, otherwise it would be racy, but about other vars? Jakub