arpith-jacob added inline comments.
================ Comment at: lib/CodeGen/CGOpenMPRuntime.h:543 virtual llvm::Value *emitParallelOrTeamsOutlinedFunction( - const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, - OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen); + const OMPExecutableDirective &D, const CapturedStmt *CS, + const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, ---------------- ABataev wrote: > I don't think you need to pass a new `CS` parameter here, you can use > `InnermostKind` param as an arg to `getCapturedStmt()` function Hi Alexey, this is tricky. emitParallelOrTeamsOutlinedFunction() is called from emitCommonOMPParallelDirective(...InnermostKind...). Here is how that function is called for 'parallel for'. ``` void CodeGenFunction::EmitOMPParallelForDirective( const OMPParallelForDirective &S) { ... emitCommonOMPParallelDirective(*this, S, /*InnermostKind=*/OMPD_for, CodeGen); } ``` You'll notice that InnermostKind is OMPD_for. OMPD_for does not have a CapturedStmt, only the OMPD_parallel part. So we cannot use the InnermostKind variable. Here is an alternative solution: I will split emitParallelOrTeamsOutlinedFunction() to emitParallelOutlinedFunction() and emitTeamsOutlinedFunction(). I can then use getCapturedStmt(OMPD_parallel) and getCapturedStmt(OMPD_teams) respectively and I don't have to pass the CS parameter. I also think this makes sense because apart from the host, teams and parallel codegen are very different and so they should be in different routines. Let me know if you disagree. https://reviews.llvm.org/D28753 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits