Skip to content

Commit e120c4d

Browse files
committed
imprv
1 parent 9ab10a9 commit e120c4d

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,31 +80,42 @@ static Error writeFile(StringRef Filename, StringRef Data) {
8080
return Error::success();
8181
}
8282

83-
extern "C" bool rustBundleImages() {
83+
extern "C" bool rustBundleImages(LLVMModuleRef M, StringRef triple, StringRef arch) {
84+
Module *Mptr = unwrap(M);
85+
std::string Storage;
86+
llvm::raw_string_ostream OS1(Storage);
87+
Mptr->print(OS1, nullptr);
88+
OS1.flush();
89+
auto MB = llvm::MemoryBuffer::getMemBufferCopy(Storage, "module.ll");
90+
8491
SmallVector<char, 1024> BinaryData;
8592
raw_svector_ostream OS(BinaryData);
8693
BumpPtrAllocator Alloc;
8794
StringSaver Saver(Alloc);
8895

8996
DenseMap<StringRef, StringRef> Args;
90-
Args["triple"] = "amdgcn-amd-amdhsa"; // required
91-
Args["arch"] = "gfx90a"; // optional, but from rustc?
97+
//Args["triple"] = "amdgcn-amd-amdhsa"; // required
98+
//Args["arch"] = "gfx90a"; // optional, but from rustc?
9299

93100
{
94101
OffloadBinary::OffloadingImage ImageBinary{};
95102

96-
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> ObjectOrErr =
97-
llvm::MemoryBuffer::getFileOrSTDIN("device.bc");
98-
if (std::error_code EC = ObjectOrErr.getError())
99-
return false;
103+
104+
//llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> ObjectOrErr =
105+
// llvm::MemoryBuffer::getFileOrSTDIN("device.bc");
106+
//if (std::error_code EC = ObjectOrErr.getError())
107+
// return false;
100108

101109
// Clang uses the '.o' suffix for LTO bitcode.
102110
ImageBinary.TheImageKind = object::IMG_Bitcode;
103-
ImageBinary.Image = std::move(*ObjectOrErr);
111+
ImageBinary.Image = std::move(MB);
112+
//ImageBinary.Image = std::move(*ObjectOrErr);
104113
ImageBinary.TheOffloadKind = object::OFK_OpenMP;
105-
for (const auto &[Key, Value] : Args) {
106-
ImageBinary.StringData[Key] = Value;
107-
}
114+
ImageBinary.StringData["triple"] = triple;
115+
ImageBinary.StringData["arch"] = arch;
116+
//for (const auto &[Key, Value] : Args) {
117+
// ImageBinary.StringData[Key] = Value;
118+
//}
108119
llvm::SmallString<0> Buffer = OffloadBinary::write(ImageBinary);
109120
if (Buffer.size() % OffloadBinary::getAlignment() != 0)
110121
// "Offload binary has invalid size alignment");

0 commit comments

Comments
 (0)