[clang] 806bbc4 - [OpenMP] Try to embed offloading objects after codegen

Joseph Huber via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 14 17:08:59 PDT 2022


Author: Joseph Huber
Date: 2022-03-14T20:08:24-04:00
New Revision: 806bbc49dc07465eddc883b09d48dd93fb64d147

URL: https://github.com/llvm/llvm-project/commit/806bbc49dc07465eddc883b09d48dd93fb64d147
DIFF: https://github.com/llvm/llvm-project/commit/806bbc49dc07465eddc883b09d48dd93fb64d147.diff

LOG: [OpenMP] Try to embed offloading objects after codegen

Currently we use the `-fembed-offload-object` option to embed a binary
file into the host as a named section. This is currently only used as a
codegen action, meaning we only handle this option correctly when the
input is a bitcode file. This patch adds the same handling to embed an
offloading object after we complete code generation. This allows us to
embed the object correctly if the input file is source or bitcode.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D120270

Added: 
    clang/test/Frontend/embed-object.c

Modified: 
    clang/lib/CodeGen/CodeGenModule.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index ad52c0df9b7ed..3da51261e2299 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -43,6 +43,7 @@
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/TargetInfo.h"
 #include "clang/Basic/Version.h"
+#include "clang/CodeGen/BackendUtil.h"
 #include "clang/CodeGen/ConstantInitBuilder.h"
 #include "clang/Frontend/FrontendDiagnostic.h"
 #include "llvm/ADT/StringSwitch.h"
@@ -876,6 +877,9 @@ void CodeGenModule::Release() {
 
   EmitBackendOptionsMetadata(getCodeGenOpts());
 
+  // If there is device offloading code embed it in the host now.
+  EmbedObject(&getModule(), CodeGenOpts, getDiags());
+
   // Set visibility from DLL storage class
   // We do this at the end of LLVM IR generation; after any operation
   // that might affect the DLL storage class or the visibility, and

diff  --git a/clang/test/Frontend/embed-object.c b/clang/test/Frontend/embed-object.c
new file mode 100644
index 0000000000000..f438aa37311b1
--- /dev/null
+++ b/clang/test/Frontend/embed-object.c
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -x c -triple x86_64-unknown-linux-gnu -emit-llvm -fembed-offload-object=%S/Inputs/empty.h,section
+
+// CHECK: @[[OBJECT:.+]] = private constant [0 x i8] zeroinitializer, section ".llvm.offloading.section"
+// CHECK: @llvm.compiler.used = appending global [3 x i8*] [i8* getelementptr inbounds ([0 x i8], [0 x i8]* @[[OBJECT1]]], section "llvm.metadata"
+
+void foo(void) {}


        


More information about the cfe-commits mailing list