mkuron added a comment.

I think `OffloadAction::DeviceDependences::add(..., ..., /*BoundArch=*/nullptr, 
Action::OFK_OpenMP)` is never sufficient. The invalid `BoundArch` eventually 
ends up in `NVPTX::Assembler::ConstructJob` and triggers an assert; I don't 
think there is any code path with OpenMP offloading where the GPU architecture 
is set correctly. If I compile a simple test file with

  clang -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda -c example.c 
-march=sm_30

the error message is the following:

  clang: /llvm/tools/clang/lib/Driver/Tools.cpp:11960: virtual void 
clang::driver::tools::NVPTX::Assembler::ConstructJob(clang::driver::Compilation&,
 const clang::driver::JobAction&, const clang::driver::InputInfo&, const 
InputInfoList&, const llvm::opt::ArgList&, const char*) const: Assertion 
`gpu_arch != CudaArch::UNKNOWN && "Device action expected to have an 
architecture."' failed.

On a related but different note, leaving out `-march=sm_30` in the clang call 
above causes an earlier assert to trigger:

  clang: /llvm/tools/clang/lib/Driver/ToolChains.cpp:5049: virtual void 
clang::driver::toolchains::CudaToolChain::addClangTargetOptions(const 
llvm::opt::ArgList&, llvm::opt::ArgStringList&) const: Assertion 
`!GpuArch.empty() && "Must have an explicit GPU arch."' failed.

The more appropriate flag would probably be `--cuda-gpu-arch=sm_30`, but that 
is not recognized.

I thought I'd just report this here as it seemed to me that with the merge of 
all of @sfantao's code yesterday the OpenMP offloading support should mostly 
work. If this is not the case or I should report the issue elsewhere, please 
let me know.


https://reviews.llvm.org/D21845



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

Reply via email to