[cfe-dev] aarch64 openmp offloading support

Jeffrey Sandoval via cfe-dev cfe-dev at lists.llvm.org
Thu Sep 13 10:26:57 PDT 2018


Hello all,

Are there any known issues with OpenMP offloading to aarch64?  The latest "OpenMP Support" documentation indicates that it should work: "Clang supports offloading to X86_64, AArch64, PPC64[LE] ..." (https://clang.llvm.org/docs/OpenMPSupport.html).

But when I try it (using an 8.0.0 development build), the "-fopenmp-targets" option accepts x86_64 and ppc64, but not aarch64:

$ clang -fopenmp -fopenmp-targets=x86_64 -c hello.c
$ clang -fopenmp -fopenmp-targets=ppc64 -c hello.c
$ clang -fopenmp -fopenmp-targets=aarch64 -c hello.c
error: OpenMP target is invalid: 'aarch64'

I can get it to work with a very simple change:

--- a/lib/Frontend/CompilerInvocation.cpp
+++ b/lib/Frontend/CompilerInvocation.cpp
@@ -2679,7 +2679,8 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
             TT.getArch() == llvm::Triple::nvptx ||
             TT.getArch() == llvm::Triple::nvptx64 ||
             TT.getArch() == llvm::Triple::x86 ||
-            TT.getArch() == llvm::Triple::x86_64))
+            TT.getArch() == llvm::Triple::x86_64 ||
+            TT.getArch() == llvm::Triple::aarch64))
         Diags.Report(diag::err_drv_invalid_omp_target) << A->getValue(i);
       else
         Opts.OMPTargetTriples.push_back(TT);

I haven't done extensive testing, but my simple "hello world" test case now works.  Before pursuing this further, does anyone foresee any issues with this change?

Thanks,
Jeff




More information about the cfe-dev mailing list