[PATCH] D60568: [OpenMP] Add support for registering requires directives with the runtime
Alexey Bataev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 17 08:55:58 PDT 2019
ABataev added inline comments.
================
Comment at: lib/CodeGen/CGOpenMPRuntime.cpp:9291
+ if (CGM.getLangOpts().OpenMPSimd || CGM.getLangOpts().OpenMPIsDevice ||
+ (OffloadEntriesInfoManager.empty() && !HasEmittedDeclareTargetRegion))
+ return nullptr;
----------------
Missed check for `HasEmittedTargetRegion` here
================
Comment at: lib/CodeGen/CGOpenMPRuntime.cpp:9312
+ // contain at least 1 target region.
+ if ((HasEmittedTargetRegion || HasEmittedDeclareTargetRegion) &&
+ HasRequiresUnifiedSharedMemory)
----------------
The first part of the condition is excessive. You have early exit from the function. Instead of the condition, use `assert((!OffloadEntriesInfoManager.empty() || HasEmittedDeclareTargetRegion || HasEmittedTargetRegion) && "Expected bla-bla-bla");`
================
Comment at: lib/CodeGen/CGOpenMPRuntime.cpp:10364
+ if (const auto *FD = dyn_cast<FunctionDecl>(D)) {
+ if (OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(FD)) {
+ HasEmittedDeclareTargetRegion = true;
----------------
gtbercea wrote:
> ABataev wrote:
> > gtbercea wrote:
> > > ABataev wrote:
> > > > gtbercea wrote:
> > > > > ABataev wrote:
> > > > > > ABataev wrote:
> > > > > > > No need for the braces
> > > > > > What if `declare target` is used only for variabes but not for the functions?
> > > > > Even more reason to error in that case since it may contain clauses like link or to which need for requires directives to be used consistently.
> > > > But I don't see that your patch works in this situation. Currently, it will emit the error only if the declare target function is found, no?
> > > Actually it will work even when just variables are used in the declare target region. There is another problem which I have a fix for. I will update the patch in a bit.
> > Why will it work in this case? If you have just a declare target region in the code for the variables and nothing else. You don't have target regions, declare target functions etc. It won't work in this case.
> It will work because the OffloadEntriesInfoManager.empty() will return false in that case.
But you don't have a check for `OffloadEntriesInfoManager.empty() ` when you set `Flags` for `__tgt_register_requires` function call.
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60568/new/
https://reviews.llvm.org/D60568
More information about the cfe-commits
mailing list