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

Reply via email to