@@ -807,7 +807,7 @@ struct SYCLWrapper {
807807 // /
808808 // / \returns Pointers to the beginning and end of the array.
809809 std::pair<Constant *, Constant *>
810- initOffloadEntriesPerImage (StringRef Entries) {
810+ initOffloadEntriesPerImage (StringRef Entries, const Twine &OffloadKindTag ) {
811811 SmallVector<Constant *> EntriesInits;
812812 std::unique_ptr<MemoryBuffer> MB = MemoryBuffer::getMemBuffer (
813813 Entries, /* BufferName*/ " " , /* RequiresNullTerminator*/ false );
@@ -824,7 +824,7 @@ struct SYCLWrapper {
824824 EntriesInits);
825825 auto *EntriesGV = new GlobalVariable (M, Arr->getType (), /* isConstant*/ true ,
826826 GlobalVariable::InternalLinkage, Arr,
827- " .sycl_offloading. entries_arr" );
827+ OffloadKindTag + " entries_arr" );
828828
829829 auto *EntriesB = ConstantExpr::getGetElementPtr (
830830 EntriesGV->getValueType (), EntriesGV, getSizetConstPair (0 , 0 ));
@@ -857,7 +857,7 @@ struct SYCLWrapper {
857857 appendToUsed (M, ImgInfoVar);
858858 }
859859
860- Constant *wrapImage (const OffloadingImage &OI , const Twine &ImageID,
860+ Constant *wrapImage (const OffloadBinary &OB , const Twine &ImageID,
861861 StringRef OffloadKindTag) {
862862 // Note: Intel DPC++ compiler had 2 versions of this structure
863863 // and clang++ has a third different structure. To avoid ABI incompatibility
@@ -866,10 +866,10 @@ struct SYCLWrapper {
866866 Constant *Version =
867867 ConstantInt::get (Type::getInt16Ty (C), DeviceImageStructVersion);
868868 Constant *OffloadKindConstant = ConstantInt::get (
869- Type::getInt8Ty (C), static_cast <uint8_t >(OI. TheOffloadKind ));
869+ Type::getInt8Ty (C), static_cast <uint8_t >(OB. getOffloadKind () ));
870870 Constant *ImageKindConstant = ConstantInt::get (
871- Type::getInt8Ty (C), static_cast <uint8_t >(OI. TheImageKind ));
872- StringRef Triple = OI. StringData . lookup (" triple" );
871+ Type::getInt8Ty (C), static_cast <uint8_t >(OB. getImageKind () ));
872+ StringRef Triple = OB. getString (" triple" );
873873 Constant *TripleConstant =
874874 addStringToModule (Triple, Twine (OffloadKindTag) + " target." + ImageID);
875875 Constant *CompileOptions =
@@ -883,21 +883,21 @@ struct SYCLWrapper {
883883 Constant::getNullValue (PointerType::getUnqual (C)),
884884 Constant::getNullValue (PointerType::getUnqual (C))};
885885
886- const MemoryBuffer & RawImage = *OI. Image ;
886+ StringRef RawImage = OB. getImage () ;
887887 std::pair<Constant *, Constant *> Binary = addArrayToModule (
888- ArrayRef<char >(RawImage.getBufferStart (), RawImage.getBufferEnd ()),
888+ ArrayRef<char >(RawImage.begin (), RawImage.end ()),
889889 Twine (OffloadKindTag) + ImageID + " .data" , " .llvm.offloading" );
890890
891891 // For SYCL images offload entries are defined here per image.
892892 std::pair<Constant *, Constant *> ImageEntriesPtrs =
893- initOffloadEntriesPerImage (OI. StringData . lookup (" symbols" ));
893+ initOffloadEntriesPerImage (OB. getString (" symbols" ), OffloadKindTag );
894894 Constant *WrappedBinary = ConstantStruct::get (
895895 SyclDeviceImageTy, Version, OffloadKindConstant, ImageKindConstant,
896896 TripleConstant, CompileOptions, LinkOptions, Binary.first ,
897897 Binary.second , ImageEntriesPtrs.first , ImageEntriesPtrs.second ,
898898 PropertiesConstants.first , PropertiesConstants.second );
899899
900- emitRegistrationFunctions (Binary.first , RawImage.getBufferSize (), ImageID,
900+ emitRegistrationFunctions (Binary.first , RawImage.size (), ImageID,
901901 OffloadKindTag);
902902
903903 return WrappedBinary;
@@ -983,12 +983,13 @@ struct SYCLWrapper {
983983 // / \endcode
984984 // /
985985 // / \returns Global variable that represents FatbinDesc.
986- GlobalVariable *createFatbinDesc (ArrayRef<OffloadingImage> Images ) {
986+ GlobalVariable *createFatbinDesc (ArrayRef<OffloadFile> OffloadFiles ) {
987987 StringRef OffloadKindTag = " .sycl_offloading." ;
988988 SmallVector<Constant *> WrappedImages;
989- WrappedImages.reserve (Images.size ());
990- for (size_t I = 0 , E = Images.size (); I != E; ++I)
991- WrappedImages.push_back (wrapImage (Images[I], Twine (I), OffloadKindTag));
989+ WrappedImages.reserve (OffloadFiles.size ());
990+ for (size_t I = 0 , E = OffloadFiles.size (); I != E; ++I)
991+ WrappedImages.push_back (
992+ wrapImage (*OffloadFiles[I].getBinary (), Twine (I), OffloadKindTag));
992993
993994 return combineWrappedImages (WrappedImages, OffloadKindTag);
994995 }
@@ -1088,24 +1089,7 @@ Error llvm::offloading::wrapSYCLBinaries(llvm::Module &M, ArrayRef<char> Buffer,
10881089 if (Error E = extractOffloadBinaries (MBR, OffloadFiles))
10891090 return E;
10901091
1091- SmallVector<OffloadingImage> Images;
1092- Images.reserve (OffloadFiles.size ());
1093- for (OffloadFile &File : OffloadFiles) {
1094- OffloadBinary &Binary = *File.getBinary ();
1095- OffloadingImage OI;
1096- OI.TheImageKind = Binary.getImageKind ();
1097- OI.TheOffloadKind = Binary.getOffloadKind ();
1098- OI.Flags = Binary.getFlags ();
1099- OI.StringData [" arch" ] = Binary.getString (" arch" );
1100- OI.StringData [" triple" ] = Binary.getString (" triple" );
1101- OI.StringData [" symbols" ] = Binary.getString (" symbols" );
1102- OI.Image = MemoryBuffer::getMemBuffer (
1103- MemoryBufferRef (Binary.getImage (), /* Identifier*/ " " ),
1104- /* RequiresNullTerminator*/ false );
1105- Images.emplace_back (std::move (OI));
1106- }
1107-
1108- GlobalVariable *Desc = W.createFatbinDesc (Images);
1092+ GlobalVariable *Desc = W.createFatbinDesc (OffloadFiles);
11091093 if (!Desc)
11101094 return createStringError (inconvertibleErrorCode (),
11111095 " No binary descriptors created." );
0 commit comments