[DX] Create globals for DXContainer parts
authorChris Bieneman <chris.bieneman@me.com>
Tue, 18 Oct 2022 16:42:09 +0000 (11:42 -0500)
committerChris Bieneman <chris.bieneman@me.com>
Tue, 18 Oct 2022 16:48:08 +0000 (11:48 -0500)
commit6e05c8dfc86cb9d1161784f4bfaf4f89709249d5
treeba053238ef2a2a29a0ebca7e243e6a11ee0aac94
parent4a687efecb825f8c1c3e10ffc7949f4b2cd3c1bd
[DX] Create globals for DXContainer parts

DXContainer files have a handful of sections that need to be written.
This adds a pass to write the section data into IR globals, and writes
the shader flag data into a global.

The test cases here verify that the shader flags are correctly written
from the IR into the global and emitted to the DXContainer.

This change also fixes a bug in the MCDXContainerWriter, where the size
of the dxbc::ProgramHeader was not being included in the part offset
calcuations. This is verified to be working by the new testcases where
obj2yaml can properly dump part data for parts after the DXIL part.

Resolves issue #57742 (https://github.com/llvm/llvm-project/issues/57742)

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D135793
llvm/lib/MC/MCDXContainerWriter.cpp
llvm/lib/Target/DirectX/CMakeLists.txt
llvm/lib/Target/DirectX/DXContainerGlobals.cpp [new file with mode: 0644]
llvm/lib/Target/DirectX/DXILShaderFlags.cpp
llvm/lib/Target/DirectX/DXILShaderFlags.h
llvm/lib/Target/DirectX/DirectX.h
llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
llvm/test/CodeGen/DirectX/ShaderFlags/double-extensions.ll
llvm/test/CodeGen/DirectX/ShaderFlags/doubles.ll
llvm/test/CodeGen/DirectX/embed-dxil.ll