[Openmp-commits] [openmp] 0f4b4e8 - [OpenMP] RecordReplay saves bitcode when JIT-ing

Giorgis Georgakoudis via Openmp-commits openmp-commits at lists.llvm.org
Wed Jan 18 11:25:32 PST 2023


Author: Giorgis Georgakoudis
Date: 2023-01-18T11:25:25-08:00
New Revision: 0f4b4e8e4d8b3aafba829143e2fd4237620ea4d7

URL: https://github.com/llvm/llvm-project/commit/0f4b4e8e4d8b3aafba829143e2fd4237620ea4d7
DIFF: https://github.com/llvm/llvm-project/commit/0f4b4e8e4d8b3aafba829143e2fd4237620ea4d7.diff

LOG: [OpenMP] RecordReplay saves bitcode when JIT-ing

This patch enables to store bitcode images when JIT is enabled for the record-and-replay functionality (see https://reviews.llvm.org/D138931). Credits to @jdoerfert for refactoring the code.

Reviewed By: jdoerfert

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

Added: 
    

Modified: 
    openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
    openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h

Removed: 
    


################################################################################
diff  --git a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
index d20fbf644ffed..7cc1aa2fcd593 100644
--- a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
+++ b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp
@@ -122,7 +122,15 @@ struct RecordReplayTy {
     raw_fd_ostream OS(ImageName.str(), EC);
     if (EC)
       report_fatal_error("Error saving image : " + StringRef(EC.message()));
-    OS << Image.getMemoryBuffer().getBuffer();
+    if (auto TgtImageBitcode = Image.getTgtImageBitcode()) {
+      size_t Size =
+          getPtrDiff(TgtImageBitcode->ImageEnd, TgtImageBitcode->ImageStart);
+      MemoryBufferRef MBR = MemoryBufferRef(
+          StringRef((const char *)TgtImageBitcode->ImageStart, Size), "");
+      OS << MBR.getBuffer();
+    } else {
+      OS << Image.getMemoryBuffer().getBuffer();
+    }
     OS.close();
   }
 
@@ -407,6 +415,8 @@ GenericDeviceTy::loadBinary(GenericPluginTy &Plugin,
 
   DeviceImageTy *Image = *ImageOrErr;
   assert(Image != nullptr && "Invalid image");
+  if (InputTgtImage != PostJITImageOrErr.get())
+    Image->setTgtImageBitcode(InputTgtImage);
 
   // Add the image to list.
   LoadedImages.push_back(Image);

diff  --git a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h
index d65209d3cfbd8..e53c666ad7eff 100644
--- a/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h
+++ b/openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.h
@@ -113,13 +113,14 @@ class DeviceImageTy {
 
   /// The pointer to the raw __tgt_device_image.
   const __tgt_device_image *TgtImage;
+  const __tgt_device_image *TgtImageBitcode;
 
   /// Table of offload entries.
   OffloadEntryTableTy OffloadEntryTable;
 
 public:
   DeviceImageTy(int32_t Id, const __tgt_device_image *Image)
-      : ImageId(Id), TgtImage(Image) {
+      : ImageId(Id), TgtImage(Image), TgtImageBitcode(nullptr) {
     assert(TgtImage && "Invalid target image");
   }
 
@@ -129,6 +130,14 @@ class DeviceImageTy {
   /// Get the pointer to the raw __tgt_device_image.
   const __tgt_device_image *getTgtImage() const { return TgtImage; }
 
+  void setTgtImageBitcode(const __tgt_device_image *TgtImageBitcode) {
+    this->TgtImageBitcode = TgtImageBitcode;
+  }
+
+  const __tgt_device_image *getTgtImageBitcode() const {
+    return TgtImageBitcode;
+  }
+
   /// Get the image starting address.
   void *getStart() const { return TgtImage->ImageStart; }
 


        


More information about the Openmp-commits mailing list