arpith-jacob added inline comments.

================
Comment at: lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp:539-542
+    llvm::Value *EndArgs[] = {emitUpdateLocation(CGF, Loc), ThreadID};
+    CGF.EmitRuntimeCall(
+        createNVPTXRuntimeFunction(OMPRTL_NVPTX__kmpc_end_serialized_parallel),
+        EndArgs);
----------------
ABataev wrote:
> It is better to emit this code as PrePostAction, so it is called upon exit of 
> any cleanup scope
Alexey, do you mean clean up during the execution of the serialized parallel 
region?  Is something like this what you have in mind?  Thanks.

  auto &&SeqGen = [this, Fn, &CapturedVars, &RTLoc, &Loc](CodeGenFunction &CGF,
                                                          PrePostActionTy &) {
    auto &&CodeGen = [..](..) {
        llvm::Value *Args[] = {RTLoc, ThreadID};
        CGF.EmitRuntimeCall(
            createNVPTXRuntimeFunction(OMPRTL_NVPTX__kmpc_serialized_parallel),
            Args);

        llvm::SmallVector<llvm::Value *, 16> OutlinedFnArgs;
        OutlinedFnArgs.push_back(
            llvm::ConstantPointerNull::get(CGM.Int32Ty->getPointerTo()));
        OutlinedFnArgs.push_back(
            llvm::ConstantPointerNull::get(CGM.Int32Ty->getPointerTo()));
        OutlinedFnArgs.append(CapturedVars.begin(), CapturedVars.end());
        CGF.EmitCallOrInvoke(Fn, OutlinedFnArgs);
    };

    RegionCodeGenTy RCG(CodeGen);
    CommonActionTy Action(
        nullptr, llvm::None,
        createNVPTXRuntimeFunction(OMPRTL_NVPTX__kmpc_end_serialized_parallel),
        {emitUpdateLocation(CGF, Loc), ThreadID});
    RCG.setAction(Action);
    RCG(CGF);
  };



https://reviews.llvm.org/D28145



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to