Skip to content

Commit 1b0f7b0

Browse files
gang chensys_zuul
authored andcommitted
enable vector-backend to take llvm bitcode input
Change-Id: If636682bb93cbc7bdfd4b54a45c5d3a19c36bc28
1 parent dc9e385 commit 1b0f7b0

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

IGC/VectorCompiler/igcdeps/src/TranslationInterface.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ static void adjustFileType(TC::TB_DATA_FORMAT DataFormat,
134134
case TC::TB_DATA_FORMAT::TB_DATA_FORMAT_LLVM_TEXT:
135135
Opts.FType = vc::FileType::LLVM_TEXT;
136136
return;
137+
case TC::TB_DATA_FORMAT::TB_DATA_FORMAT_LLVM_BINARY:
138+
Opts.FType = vc::FileType::LLVM_BINARY;
139+
return;
137140
case TC::TB_DATA_FORMAT::TB_DATA_FORMAT_SPIR_V:
138141
Opts.FType = vc::FileType::SPIRV;
139142
return;

IGC/VectorCompiler/include/vc/GenXCodeGen/GenXWrapper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ struct CompileOutput {
137137

138138
using CompileOutput = std::variant<cm::CompileOutput, ocl::CompileOutput>;
139139

140-
enum class FileType { SPIRV, LLVM_TEXT };
140+
enum class FileType { SPIRV, LLVM_TEXT, LLVM_BINARY };
141141

142142
enum class OptimizerLevel { None, Full };
143143

IGC/VectorCompiler/lib/GenXCodeGen/GenXWrapper.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,29 @@ getModuleFromLLVMText(ArrayRef<char> Input, LLVMContext &C) {
202202
return ExpModule;
203203
}
204204

205+
static Expected<std::unique_ptr<llvm::Module>>
206+
getModuleFromLLVMBinary(ArrayRef<char> Input, LLVMContext& C) {
207+
208+
llvm::MemoryBufferRef BufferRef(llvm::StringRef(Input.data(), Input.size()),
209+
"Deserialized LLVM Module");
210+
auto ExpModule = llvm::parseBitcodeFile(BufferRef, C);
211+
212+
if (!ExpModule)
213+
return llvm::handleExpected(
214+
std::move(ExpModule),
215+
[]() -> llvm::Error {
216+
IGC_ASSERT_EXIT_MESSAGE(0, "Should create new error");
217+
},
218+
[](const llvm::ErrorInfoBase& E) {
219+
return make_error<vc::BadBitcodeError>(E.message());
220+
});
221+
222+
if (verifyModule(*ExpModule.get()))
223+
return make_error<vc::InvalidModuleError>();
224+
225+
return ExpModule;
226+
}
227+
205228
static Expected<std::unique_ptr<llvm::Module>>
206229
getModule(ArrayRef<char> Input, vc::FileType FType,
207230
ArrayRef<uint32_t> SpecConstIds, ArrayRef<uint64_t> SpecConstValues,
@@ -211,6 +234,8 @@ getModule(ArrayRef<char> Input, vc::FileType FType,
211234
return getModuleFromSPIRV(Input, SpecConstIds, SpecConstValues, Ctx);
212235
case vc::FileType::LLVM_TEXT:
213236
return getModuleFromLLVMText(Input, Ctx);
237+
case vc::FileType::LLVM_BINARY:
238+
return getModuleFromLLVMBinary(Input, Ctx);
214239
}
215240
IGC_ASSERT_EXIT_MESSAGE(0, "Unknown input kind");
216241
}

0 commit comments

Comments
 (0)