Skip to content

Commit a3af5c9

Browse files
DianaChenigcbot
authored andcommitted
ZEBinary: add .misc.buildOptions section (2nd try)
.misc.buildOptions contains the build options those are used for compiling this binary. The information is needed for re-compilation from a ZEBinary.
1 parent 91618db commit a3af5c9

File tree

8 files changed

+38
-12
lines changed

8 files changed

+38
-12
lines changed

IGC/AdaptorOCL/OCL/sp/spp_g8.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,13 +427,19 @@ bool createElfFileName(std::string &name, unsigned int maxNameLen, SIMDMode simd
427427
}
428428

429429
void CGen8OpenCLProgram::GetZEBinary(
430-
llvm::raw_pwrite_stream& programBinary, unsigned pointerSizeInBytes,
431-
const char* spv, uint32_t spvSize, const char* metrics, uint32_t metricsSize)
430+
llvm::raw_pwrite_stream& programBinary,
431+
unsigned pointerSizeInBytes,
432+
const char* spv, uint32_t spvSize,
433+
const char* metrics, uint32_t metricsSize,
434+
const char* buildOptions, uint32_t buildOptionsSize)
432435
{
433436
std::vector<std::unique_ptr<llvm::MemoryBuffer>> elfStorage;
434437

435438
ZEBinaryBuilder zebuilder(m_Platform, pointerSizeInBytes == 8,
436-
m_Context.m_programInfo, (const uint8_t*)spv, spvSize, (const uint8_t*)metrics, metricsSize);
439+
m_Context.m_programInfo,
440+
(const uint8_t*)spv, spvSize,
441+
(const uint8_t*)metrics, metricsSize,
442+
(const uint8_t*)buildOptions, buildOptionsSize);
437443
zebuilder.setProductFamily(m_Platform.eProductFamily);
438444

439445
std::vector<string> elfVecNames; // Vector of parameters for the linker, contains in/out ELF file names and params

IGC/AdaptorOCL/OCL/sp/spp_g8.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,12 @@ class CGen8OpenCLProgram : public CGen8OpenCLProgramBase
8888

8989
/// getZEBinary - create and get ZE Binary
9090
/// if spv and spvSize are given, a .spv section will be created in the output ZEBinary
91-
void GetZEBinary(llvm::raw_pwrite_stream& programBinary, unsigned pointerSizeInBytes,
92-
const char* spv, uint32_t spvSize, const char* metrics, uint32_t metricsSize);
91+
void GetZEBinary(
92+
llvm::raw_pwrite_stream& programBinary,
93+
unsigned pointerSizeInBytes,
94+
const char* spv, uint32_t spvSize,
95+
const char* metrics, uint32_t metricsSize,
96+
const char* buildOptions, uint32_t buildOptionsSize);
9397

9498
// Used to track the kernel info from CodeGen
9599
std::vector<IGC::CShaderProgram*> m_ShaderProgramList;

IGC/AdaptorOCL/OCL/sp/zebin_builder.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ using namespace llvm;
2626

2727
ZEBinaryBuilder::ZEBinaryBuilder(
2828
const PLATFORM plat, bool is64BitPointer, const IGC::SOpenCLProgramInfo& programInfo,
29-
const uint8_t* spvData, uint32_t spvSize, const uint8_t* metricsData, uint32_t metricsSize)
29+
const uint8_t* spvData, uint32_t spvSize,
30+
const uint8_t* metricsData, uint32_t metricsSize,
31+
const uint8_t* buildOptions, uint32_t buildOptionsSize)
3032
: mPlatform(plat), mBuilder(is64BitPointer)
3133
{
3234
G6HWC::InitializeCapsGen8(&mHWCaps);
@@ -44,6 +46,9 @@ ZEBinaryBuilder::ZEBinaryBuilder(
4446
if (spvData != nullptr)
4547
addSPIRV(spvData, spvSize);
4648

49+
if (buildOptions != nullptr && buildOptionsSize)
50+
addMiscInfoSection("buildOptions", buildOptions, buildOptionsSize);
51+
4752
// Add metrics section to zeBinary regardless of metrics presence,
4853
// i.e. if there is no metrics data then an empty section will be added.
4954
addMetrics(metricsData, metricsSize);
@@ -256,6 +261,11 @@ void ZEBinaryBuilder::addSPIRV(const uint8_t* data, uint32_t size)
256261
mBuilder.addSectionSpirv("", data, size);
257262
}
258263

264+
void ZEBinaryBuilder::addMiscInfoSection(std::string sectName, const uint8_t* data, uint32_t size)
265+
{
266+
mBuilder.addSectionMisc(sectName, data, size);
267+
}
268+
259269
void ZEBinaryBuilder::addMetrics(const uint8_t* data, uint32_t size)
260270
{
261271
mBuilder.addSectionMetrics("", data, size);

IGC/AdaptorOCL/OCL/sp/zebin_builder.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ class ZEBinaryBuilder : DisallowCopy
3939
// Setup ZEBin platform, and ELF header information. The program scope information
4040
// is also be parsed from SOpenCLProgramInfo in the constructor
4141
ZEBinaryBuilder(const PLATFORM plat, bool is64BitPointer,
42-
const IGC::SOpenCLProgramInfo& programInfo, const uint8_t* spvData, uint32_t spvSize,
43-
const uint8_t* metricsData, uint32_t metricsSize);
42+
const IGC::SOpenCLProgramInfo& programInfo,
43+
const uint8_t* spvData, uint32_t spvSize,
44+
const uint8_t* metricsData, uint32_t metricsSize,
45+
const uint8_t* buildOptions, uint32_t buildOptionsSize);
4446

4547
// Set the ProductFamily as the specified value.
4648
void setProductFamily(PRODUCT_FAMILY value);
@@ -100,6 +102,9 @@ class ZEBinaryBuilder : DisallowCopy
100102
/// add spir-v section
101103
void addSPIRV(const uint8_t* data, uint32_t size);
102104

105+
/// add miscellaneous info section (section with SHT_ZEBIN_MISC type)
106+
void addMiscInfoSection(std::string sectName, const uint8_t* data, uint32_t size);
107+
103108
/// add runtime symbols
104109
void addRuntimeSymbols();
105110

IGC/AdaptorOCL/dllInterfaceCompute.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,7 @@ bool TranslateBuildSPMD(const STB_TranslateInputArgs *pInputArgs,
13771377
auto metricData = reinterpret_cast<const char*>(oclContext.metrics.getMetricData());
13781378

13791379
oclContext.m_programOutput.GetZEBinary(llvm_os, pointerSizeInBytes,
1380-
spv_data, spv_size, metricData, metricDataSize);
1380+
spv_data, spv_size, metricData, metricDataSize, pInputArgs->pOptions, pInputArgs->OptionsSize);
13811381

13821382
// FIXME: try to avoid memory copy here
13831383
binarySize = buf.size();

IGC/VectorCompiler/igcdeps/src/PatchTokens.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ void CGen8CMProgram::GetZEBinary(llvm::raw_pwrite_stream &programBinary,
191191
// is destroyed.
192192
std::unique_ptr<llvm::MemoryBuffer> DebugInfoHolder;
193193
iOpenCL::ZEBinaryBuilder zebuilder{m_Platform, pointerSizeInBytes == 8,
194-
*m_programInfo, nullptr, 0, nullptr, 0};
194+
*m_programInfo, nullptr, 0, nullptr, 0, nullptr, 0};
195195
zebuilder.setGfxCoreFamily(m_Platform.eRenderCoreFamily);
196196

197197
for (const auto &kernel : m_kernels) {

IGC/ZEBinWriter/zebin/source/ZEELFObjectBuilder.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,8 @@ void ELFWriter::writeSections()
697697
}
698698
case ELF::SHT_PROGBITS:
699699
case SHT_ZEBIN_VISAASM:
700-
case SHT_ZEBIN_SPIRV: {
700+
case SHT_ZEBIN_SPIRV:
701+
case SHT_ZEBIN_MISC: {
701702
IGC_ASSERT(nullptr != entry.section);
702703
IGC_ASSERT(entry.section->getKind() == Section::STANDARD);
703704
const StandardSection* const stdsect =

IGC/ZEBinWriter/zebin/spec/elf.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ SPDX-License-Identifier: MIT
2424
| .debug_* | the debug information (if required) | SHT_PROGBITS |
2525
| .ze_info | the metadata section for runtime information | SHT_ZEBIN_ZEINFO |
2626
| .gtpin_info.{*kernel_name*\|*function_name*} | the metadata section for gtpin information (if any) | SHT_ZEBIN_GTPIN_INFO |
27-
| .misc | the miscellaneous data for multiple purposes (if required) | SHT_ZEBIN_MISC |
27+
| .misc.{*misc_name*} | the miscellaneous data for multiple purposes. For example, the section _.misc.buildOptions_ contains the build options used for compiling this binary. | SHT_ZEBIN_MISC |
2828
| .note.intelgt.compat | the compatibility notes for runtime information | SHT_NOTE |
2929
| .strtab | the string table for section/symbol names | SHT_STRTAB |
3030

0 commit comments

Comments
 (0)