[Openmp-dev] clang: Emit Target Functions when #pragma omp declare target

Jonas Hahnfeld via Openmp-dev openmp-dev at lists.llvm.org
Fri Dec 1 07:30:25 PST 2017

Hi Daniel,

I think Clang trunk doesn't yet have full codegen support for the 
declare target directive. Please see https://reviews.llvm.org/D39457 for 
a document with the current implementation status.


Am 2017-12-01 10:18, schrieb Daniel Schürmann via Openmp-dev:
> Hello!
> I wanted to ask, if this behavior is on purpose or if I am missing 
> something:
> To me it seems that using "#pragma omp declare target" has no effect
> on the code generation.
> The specification states that variables and functions are mapped to the 
> device.
> In my understanding, this means that device code should be emitted.
> However, CGOpenMPRuntime::emitTargetGlobal() does only search for
> target #pragmas and doesn't check for OMPDeclareTargetDeclAttr. This
> check is done in ASTContext::DeclMustBeEmitted(), but it seems, this
> can never happen. The reason is that CodeGenModule::EmitGlobal()
> returns early after calling CGOpenMPRuntime::emitTargetGlobal(). I
> hope, this is understandable.
> It might be that this problem never showed up when the device is x86
> as well. But I don't understand how Nvidia can compile e.g. lulesh
> like this...
> My question is if the intended way would be to change
> emitTargetGlobal() to also emit functions/variables with
> OMPDeclareTargetDeclAttr.
> Thanks in advance,
> Daniel
> _______________________________________________
> Openmp-dev mailing list
> Openmp-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev

More information about the Openmp-dev mailing list