Skip to content

Commit 2a3a561

Browse files
committed
cleanup
1 parent e120c4d commit 2a3a561

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-24
lines changed

compiler/rustc_codegen_llvm/src/back/write.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,23 @@ pub(crate) unsafe fn llvm_optimize(
765765
llvm_plugins.len(),
766766
)
767767
};
768+
769+
if cgcx.target_is_like_gpu && config.offload.contains(&config::Offload::Enable) {
770+
//let triple = SmallCStr::new(&versioned_llvm_target(sess));
771+
//let arch = SmallCStr::new(llvm_util::target_cpu(sess));
772+
//let arch = c"gfx90a";
773+
//let triple = c"amdgcn-amd-amdhsa";
774+
unsafe {
775+
llvm::rustBundleImages(
776+
module.module_llvm.llmod(),
777+
module.module_llvm.tm.raw(), //triple.as_ptr(),
778+
//triple.count_bytes(),
779+
//arch.as_ptr(),
780+
//arch.count_bytes(),
781+
);
782+
}
783+
}
784+
768785
result.into_result().unwrap_or_else(|()| llvm_err(dcx, LlvmError::RunLlvmPasses))
769786
}
770787

compiler/rustc_codegen_llvm/src/llvm/ffi.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2026,6 +2026,14 @@ unsafe extern "C" {
20262026

20272027
// Operations on functions
20282028
pub(crate) fn LLVMRustOffloadMapper<'a>(Fn: &'a Value, Fn: &'a Value);
2029+
pub(crate) fn rustBundleImages<'a>(
2030+
M: &'a Module,
2031+
TM: &'a TargetMachine,
2032+
//triple: *const c_char,
2033+
//tripleLen: size_t,
2034+
//arch: *const c_char,
2035+
//archLen: size_t,
2036+
) -> bool;
20292037
pub(crate) fn LLVMRustGetOrInsertFunction<'a>(
20302038
M: &'a Module,
20312039
Name: *const c_char,

compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@
4747
#include "llvm/Support/MemoryBuffer.h"
4848
#include "llvm/Support/Path.h"
4949
#include "llvm/Support/Signals.h"
50-
//#include "llvm/Support/StringSaver.h"
51-
//#include "llvm/Support/WithColor.h"
5250

5351
// for raw `write` in the bad-alloc handler
5452
#ifdef _MSC_VER
@@ -79,46 +77,36 @@ static Error writeFile(StringRef Filename, StringRef Data) {
7977
return E;
8078
return Error::success();
8179
}
82-
83-
extern "C" bool rustBundleImages(LLVMModuleRef M, StringRef triple, StringRef arch) {
84-
Module *Mptr = unwrap(M);
80+
#include "llvm/Target/TargetMachine.h"
81+
extern "C" bool rustBundleImages(LLVMModuleRef M, TargetMachine &TM) {
82+
//Module *Mptr = unwrap(M);
8583
std::string Storage;
8684
llvm::raw_string_ostream OS1(Storage);
87-
Mptr->print(OS1, nullptr);
85+
86+
llvm::WriteBitcodeToFile(*unwrap(M), OS1);
87+
//llvm::WriteBitcodeToFile(*Mptr, OS1);
8888
OS1.flush();
89-
auto MB = llvm::MemoryBuffer::getMemBufferCopy(Storage, "module.ll");
89+
auto MB = llvm::MemoryBuffer::getMemBufferCopy(Storage, "module.bc");
9090

9191
SmallVector<char, 1024> BinaryData;
9292
raw_svector_ostream OS(BinaryData);
9393
BumpPtrAllocator Alloc;
9494
StringSaver Saver(Alloc);
9595

9696
DenseMap<StringRef, StringRef> Args;
97-
//Args["triple"] = "amdgcn-amd-amdhsa"; // required
98-
//Args["arch"] = "gfx90a"; // optional, but from rustc?
9997

10098
{
10199
OffloadBinary::OffloadingImage ImageBinary{};
102-
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;
108-
109-
// Clang uses the '.o' suffix for LTO bitcode.
110100
ImageBinary.TheImageKind = object::IMG_Bitcode;
111101
ImageBinary.Image = std::move(MB);
112-
//ImageBinary.Image = std::move(*ObjectOrErr);
113102
ImageBinary.TheOffloadKind = object::OFK_OpenMP;
114-
ImageBinary.StringData["triple"] = triple;
115-
ImageBinary.StringData["arch"] = arch;
116-
//for (const auto &[Key, Value] : Args) {
117-
// ImageBinary.StringData[Key] = Value;
118-
//}
103+
//ImageBinary.StringData["triple"] = triple;
104+
//ImageBinary.StringData["arch"] = arch;
105+
ImageBinary.StringData["triple"] = TM.getTargetTriple().str();
106+
ImageBinary.StringData["arch"] = TM.getTargetCPU();
119107
llvm::SmallString<0> Buffer = OffloadBinary::write(ImageBinary);
120108
if (Buffer.size() % OffloadBinary::getAlignment() != 0)
121-
// "Offload binary has invalid size alignment");
109+
// Offload binary has invalid size alignment
122110
return false;
123111
OS << Buffer;
124112
}

0 commit comments

Comments
 (0)