@@ -640,13 +640,13 @@ void createRegisterFatbinFunction(Module &M, GlobalVariable *FatbinDesc,
640640struct SYCLWrapper {
641641 Module &M;
642642 LLVMContext &C;
643- SYCLWrappingOptions Options;
643+ SYCLJITOptions Options;
644644
645645 StructType *EntryTy = nullptr ;
646646 StructType *SyclDeviceImageTy = nullptr ;
647647 StructType *SyclBinDescTy = nullptr ;
648648
649- SYCLWrapper (Module &M, const SYCLWrappingOptions &Options)
649+ SYCLWrapper (Module &M, const SYCLJITOptions &Options)
650650 : M(M), C(M.getContext()), Options(Options) {
651651 EntryTy = offloading::getEntryTy (M);
652652 SyclDeviceImageTy = getSyclDeviceImageTy ();
@@ -812,11 +812,12 @@ struct SYCLWrapper {
812812 std::unique_ptr<MemoryBuffer> MB = MemoryBuffer::getMemBuffer (
813813 Entries, /* BufferName*/ " " , /* RequiresNullTerminator*/ false );
814814 for (line_iterator LI (*MB); !LI.is_at_eof (); ++LI) {
815- Constant *C = addStringToModule (*LI, " __sycl_offload_entry_name" );
816- GlobalVariable *GV =
817- emitOffloadingEntry (M, /* Kind*/ OffloadKind::OFK_SYCL, C,
818- /* Name*/ " __sycl_offload_entry_name" , /* Size*/ 0 ,
819- /* Flags*/ 0 , /* Data*/ 0 );
815+ GlobalVariable *GV = emitOffloadingEntry (
816+ M, /* Kind*/ OffloadKind::OFK_SYCL,
817+ Constant::getNullValue (PointerType::getUnqual (C)),
818+ /* Name*/ *LI, /* Size*/ 0 ,
819+ // /*Name*/ "__sycl_offload_entry_name", /*Size*/ 0,
820+ /* Flags*/ 0 , /* Data*/ 0 );
820821 EntriesInits.push_back (GV->getInitializer ());
821822 }
822823
@@ -1079,22 +1080,30 @@ Error offloading::wrapHIPBinary(Module &M, ArrayRef<char> Image,
10791080 return Error::success ();
10801081}
10811082
1082- Error llvm::offloading::wrapSYCLBinaries (llvm::Module &M,
1083- ArrayRef<ArrayRef<char >> Buffers,
1084- SYCLWrappingOptions Options) {
1083+ Error llvm::offloading::wrapSYCLBinaries (llvm::Module &M, ArrayRef<char > Buffer,
1084+ SYCLJITOptions Options) {
10851085 SYCLWrapper W (M, Options);
1086- SmallVector<std::unique_ptr<OffloadBinary>> OffloadBinaries;
1087- OffloadBinaries.reserve (Buffers.size ());
1086+ MemoryBufferRef MBR (StringRef (Buffer.begin (), Buffer.size ()),
1087+ /* Identifier*/ " " );
1088+ SmallVector<OffloadFile> OffloadFiles;
1089+ if (Error E = extractOffloadBinaries (MBR, OffloadFiles))
1090+ return E;
1091+
10881092 SmallVector<OffloadingImage> Images;
1089- Images.reserve (Buffers.size ());
1090- for (auto Buf : Buffers) {
1091- MemoryBufferRef MBR (StringRef (Buf.begin (), Buf.size ()), /* Identifier*/ " " );
1092- auto OffloadBinaryOrErr = OffloadBinary::create (MBR);
1093- if (!OffloadBinaryOrErr)
1094- return OffloadBinaryOrErr.takeError ();
1095-
1096- OffloadBinaries.emplace_back (std::move (*OffloadBinaryOrErr));
1097- Images.emplace_back (OffloadBinaries.back ()->getOffloadingImage ());
1093+ Images.reserve (OffloadFiles.size ());
1094+ for (OffloadFile &File : OffloadFiles) {
1095+ OffloadBinary &Binary = *File.getBinary ();
1096+ OffloadingImage OI;
1097+ OI.TheImageKind = Binary.getImageKind ();
1098+ OI.TheOffloadKind = Binary.getOffloadKind ();
1099+ OI.Flags = Binary.getFlags ();
1100+ OI.StringData [" arch" ] = Binary.getString (" arch" );
1101+ OI.StringData [" triple" ] = Binary.getString (" triple" );
1102+ OI.StringData [" symbols" ] = Binary.getString (" symbols" );
1103+ OI.Image = MemoryBuffer::getMemBuffer (
1104+ MemoryBufferRef (Binary.getImage (), /* Identifier*/ " " ),
1105+ /* RequiresNullTerminator*/ false );
1106+ Images.emplace_back (std::move (OI));
10981107 }
10991108
11001109 GlobalVariable *Desc = W.createFatbinDesc (Images);
0 commit comments