aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorXiang Li <python3kgae@outlook.com>2024-05-13 15:50:16 -0700
committerGitHub <noreply@github.com>2024-05-13 18:50:16 -0400
commit531a0b67ea1ad65ea4d1a99c67fee280beeb8fbb (patch)
treee65d201af3cb9a517ce8296ed5510f4c946a5c2f /llvm/lib
parent943baf327409fdcb01c9d02aa3c3368f2fca114b (diff)
downloadllvm-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.cpp3
-rw-r--r--llvm/lib/TargetParser/Triple.cpp2
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.