[Beignet] [PATCH V2] add binary type support for compiled object and library.
Song, Ruiling
ruiling.song at intel.com
Mon Jun 16 19:18:52 PDT 2014
Some comments.
save the llvm bitcode to program->binary: insert a byte in front of the bitcode stands for binary type(1 means COMPILED_OBJECT, 2 means LIBRARY); load the binary to module by ParseIR.
>>>>>> you'd better add "0 means executable binary" like message to make it clear.
namespace gbe {
@@ -188,7 +195,7 @@ namespace gbe {
static gbe_program genProgramNewFromBinary(uint32_t deviceID, const char *binary, size_t size) {
using namespace gbe;
std::string binary_content;
- binary_content.assign(binary, size);
>>>>> it is better you add one line comment here
+ binary_content.assign(binary+5, size-5);
GenProgram *program = GBE_NEW(GenProgram, deviceID);
std::istringstream ifs(binary_content, std::ostringstream::binary);
// FIXME we need to check the whether the current device ID match the binary file's.
@@ -203,20 +210,64 @@ namespace gbe {
return reinterpret_cast<gbe_program>(program);
}
- static size_t genProgramSerializeToBinary(gbe_program program, char **binary) {
+ static gbe_program genProgramNewFromLLVMBinary(uint32_t deviceID,
+const char *binary, size_t size) { #ifdef GBE_COMPILER_AVAILABLE
+ using namespace gbe;
+ std::string binary_content;
+ //the first byte stands for binary_type.
+ binary_content.assign(binary+1, size-1);
+ llvm::StringRef llvm_bin_str(binary_content);
+ llvm::LLVMContext& c = llvm::getGlobalContext();
+ llvm::SMDiagnostic Err;
+ llvm::MemoryBuffer* memory_buffer = llvm::MemoryBuffer::getMemBuffer(llvm_bin_str, "llvm_bin_str");
>>>>> here parseIR would modify globalContext, I think you need to add the same mutex as other places to protect globalcontext.
Other parts all looks good.
+ llvm::Module* module = llvm::ParseIR(memory_buffer, Err, c);
More information about the Beignet
mailing list