[PATCH] D141417: [DirectX backend] emit metadata for DXIL version

Xiang Li via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 13 06:45:13 PST 2023


python3kgae updated this revision to Diff 488987.
python3kgae added a comment.

Squash 2 commits.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141417/new/

https://reviews.llvm.org/D141417

Files:
  llvm/lib/Target/DirectX/DXILMetadata.cpp
  llvm/lib/Target/DirectX/DXILMetadata.h
  llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
  llvm/test/CodeGen/DirectX/Metadata/dxil_version.ll


Index: llvm/test/CodeGen/DirectX/Metadata/dxil_version.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/DirectX/Metadata/dxil_version.ll
@@ -0,0 +1,18 @@
+; RUN: opt -S --mtriple=dxil-pc-shadermodel6.0-compute -dxil-metadata-emit %s | FileCheck %s --check-prefixes=SM60,CHECK
+; RUN: opt -S --mtriple=dxil-pc-shadermodel6.6-compute -dxil-metadata-emit %s | FileCheck %s --check-prefixes=SM66,CHECK
+
+; CHECK: !dx.shaderModel = !{![[SM:[0-9]+]]}
+; CHECK: !dx.version = !{![[DXIL_VERSION:[0-9]+]]}
+
+; SM60-DAG: ![[SM]] = !{!"cs", i32 6, i32 0}
+; SM60-DAG: ![[DXIL_VERSION]] = !{i32 1, i32 0}
+
+; SM66-DAG: ![[SM]] = !{!"cs", i32 6, i32 6}
+; SM66-DAG: ![[DXIL_VERSION]] = !{i32 1, i32 6}
+
+define void @entry() #0 {
+entry:
+  ret void
+}
+
+attributes #0 = { noinline nounwind "hlsl.numthreads"="1,2,1" "hlsl.shader"="compute" }
Index: llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
===================================================================
--- llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
+++ llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
@@ -47,7 +47,7 @@
   dxil::ValidatorVersionMD ValVerMD(M);
   if (ValVerMD.isEmpty())
     ValVerMD.update(VersionTuple(1, 0));
-  dxil::createShaderModelMD(M);
+  dxil::createShaderModelAndDXILVersionMD(M);
 
   const dxil::Resources &Res =
       getAnalysis<DXILResourceWrapper>().getDXILResource();
Index: llvm/lib/Target/DirectX/DXILMetadata.h
===================================================================
--- llvm/lib/Target/DirectX/DXILMetadata.h
+++ llvm/lib/Target/DirectX/DXILMetadata.h
@@ -32,7 +32,7 @@
   bool isEmpty();
 };
 
-void createShaderModelMD(Module &M);
+void createShaderModelAndDXILVersionMD(Module &M);
 void createEntryMD(Module &M, const uint64_t ShaderFlags);
 
 } // namespace dxil
Index: llvm/lib/Target/DirectX/DXILMetadata.cpp
===================================================================
--- llvm/lib/Target/DirectX/DXILMetadata.cpp
+++ llvm/lib/Target/DirectX/DXILMetadata.cpp
@@ -67,7 +67,7 @@
   return "";
 }
 
-void dxil::createShaderModelMD(Module &M) {
+void dxil::createShaderModelAndDXILVersionMD(Module &M) {
   NamedMDNode *Entry = M.getOrInsertNamedMetadata("dx.shaderModel");
   Triple TT(M.getTargetTriple());
   VersionTuple Ver = TT.getOSVersion();
@@ -79,6 +79,14 @@
   Vals[1] = ConstantAsMetadata::get(B.getInt32(Ver.getMajor()));
   Vals[2] = ConstantAsMetadata::get(B.getInt32(Ver.getMinor().value_or(0)));
   Entry->addOperand(MDNode::get(Ctx, Vals));
+
+  // DXIL Version is just shader model major - 5. sm6.0-> dxil version 1.0.
+  NamedMDNode *DXILVerEntry = M.getOrInsertNamedMetadata("dx.version");
+  Metadata *DXILVerVals[2];
+  DXILVerVals[0] = ConstantAsMetadata::get(B.getInt32(Ver.getMajor() - 5));
+  DXILVerVals[1] =
+      ConstantAsMetadata::get(B.getInt32(Ver.getMinor().value_or(0)));
+  DXILVerEntry->addOperand(MDNode::get(Ctx, DXILVerVals));
 }
 
 static uint32_t getShaderStage(Triple::EnvironmentType Env) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D141417.488987.patch
Type: text/x-patch
Size: 3025 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230113/b2b49cb2/attachment.bin>


More information about the llvm-commits mailing list