[PATCH] D67837: [CUDA][HIP] Fix host/device check with -fopenmp
Alexey Bataev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 7 07:01:49 PDT 2019
ABataev added inline comments.
================
Comment at: lib/Sema/SemaCUDA.cpp:604
// Do we know that we will eventually codegen the given function?
static bool IsKnownEmitted(Sema &S, FunctionDecl *FD) {
+ return S.getEmissionStatus(FD) == Sema::FunctionEmissionStatus::Emitted;
----------------
I believe this function can be removed
================
Comment at: lib/Sema/SemaDecl.cpp:17619
+
+ auto OMPES = FunctionEmissionStatus::Unknown;
+ if (LangOpts.OpenMPIsDevice) {
----------------
Better to use real type here, not `auto`
================
Comment at: lib/Sema/SemaDecl.cpp:17623-17626
+ if (DevTy.hasValue())
+ OMPES = (*DevTy == OMPDeclareTargetDeclAttr::DT_Host)
+ ? FunctionEmissionStatus::OMPDiscarded
+ : FunctionEmissionStatus::Emitted;
----------------
Enclose in braces
================
Comment at: lib/Sema/SemaDecl.cpp:17626
+ ? FunctionEmissionStatus::OMPDiscarded
+ : FunctionEmissionStatus::Emitted;
+ } else if (LangOpts.OpenMP) {
----------------
Hmm, it must be marked as know-emitted only if `S.DeviceKnownEmittedFns.count(FD) > 0`. Otherwise, it must be unknown.
================
Comment at: lib/Sema/SemaDecl.cpp:17629-17631
+ if (LangOpts.OpenMP <= 45)
+ OMPES = FunctionEmissionStatus::Emitted;
+ else {
----------------
Enclose in braces, not goo to have `else` branch enclosed in braces and `then` branch without.
================
Comment at: lib/Sema/SemaDecl.cpp:17641
+ ? FunctionEmissionStatus::OMPDiscarded
+ : FunctionEmissionStatus::Emitted;
+ }
----------------
Same here, it must be marked as know-emitted only if `S.DeviceKnownEmittedFns.count(FD) > 0`. Otherwise, it must be unknown.
================
Comment at: lib/Sema/SemaDecl.cpp:17684-17689
+ // If we have
+ // host fn calls kernel fn calls host+device,
+ // the HD function does not get instantiated on the host. We model this by
+ // omitting at the call to the kernel from the callgraph. This ensures
+ // that, when compiling for host, only HD functions actually called from the
+ // host get marked as known-emitted.
----------------
Reformat the comment here
================
Comment at: lib/Sema/SemaOpenMP.cpp:1629-1630
+ auto CalleeS = getEmissionStatus(Callee);
+ assert(CallerS != FunctionEmissionStatus::CUDADiscarded &&
+ CallerS != FunctionEmissionStatus::CUDADiscarded &&
+ "CUDADiscarded unexpected in OpenMP device function check");
----------------
The same condition is checked twice, one of them must be for `CalleeS`, I believe
================
Comment at: lib/Sema/SemaOpenMP.cpp:1674
+ (LangOpts.CUDA || (CallerS != FunctionEmissionStatus::CUDADiscarded &&
+ CallerS != FunctionEmissionStatus::CUDADiscarded)) &&
+ "CUDADiscarded unexpected in OpenMP host function check");
----------------
Again, the same condition checked twice.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D67837/new/
https://reviews.llvm.org/D67837
More information about the cfe-commits
mailing list