diff options
author | Xiang Li <python3kgae@outlook.com> | 2024-05-13 15:50:16 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-13 18:50:16 -0400 |
commit | 531a0b67ea1ad65ea4d1a99c67fee280beeb8fbb (patch) | |
tree | e65d201af3cb9a517ce8296ed5510f4c946a5c2f /llvm/lib | |
parent | 943baf327409fdcb01c9d02aa3c3368f2fca114b (diff) | |
download | llvm-531a0b67ea1ad65ea4d1a99c67fee280beeb8fbb.zip llvm-531a0b67ea1ad65ea4d1a99c67fee280beeb8fbb.tar.gz llvm-531a0b67ea1ad65ea4d1a99c67fee280beeb8fbb.tar.bz2 |
[DirectX] Reapply Fix DXIL part header version encoding (#91956)
This reapplies
https://github.com/llvm/llvm-project/commit/195d8ac26d91ca798733c3a5f58d67992d43503d
[DirectX] Fix DXIL part header version encoding. The endian issue was
fixed by
https://github.com/llvm/llvm-project/commit/f42117c8517cc928c6373bad35ebf75d94fe865b.
Move MinorVersion be the lower 8 bit.
Set DXIL version in DXContainerObjectWriter::writeObject.
Fixes #89952
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCDXContainerWriter.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/TargetParser/Triple.cpp | 2 |
2 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCDXContainerWriter.cpp b/llvm/lib/MC/MCDXContainerWriter.cpp index ff64c6e5..1d82a7e 100644 --- a/llvm/lib/MC/MCDXContainerWriter.cpp +++ b/llvm/lib/MC/MCDXContainerWriter.cpp @@ -129,6 +129,9 @@ uint64_t DXContainerObjectWriter::writeObject(MCAssembler &Asm, // The program header's size field is in 32-bit words. Header.Size = (SectionSize + sizeof(dxbc::ProgramHeader) + 3) / 4; memcpy(Header.Bitcode.Magic, "DXIL", 4); + VersionTuple DXILVersion = TT.getDXILVersion(); + Header.Bitcode.MajorVersion = DXILVersion.getMajor(); + Header.Bitcode.MinorVersion = DXILVersion.getMinor().value_or(0); Header.Bitcode.Offset = sizeof(dxbc::BitcodeHeader); Header.Bitcode.Size = SectionSize; if (sys::IsBigEndianHost) diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index f8269a5..4fc1ff5 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -1510,6 +1510,8 @@ VersionTuple Triple::getDXILVersion() const { if (getArch() != dxil || getOS() != ShaderModel) llvm_unreachable("invalid DXIL triple"); StringRef Arch = getArchName(); + if (getSubArch() == NoSubArch) + Arch = getDXILArchNameFromShaderModel(getOSName()); Arch.consume_front("dxilv"); VersionTuple DXILVersion = parseVersionFromName(Arch); // FIXME: validate DXIL version against Shader Model version. |