[PATCH] D127705: [DirectX] Support opaque ptr for ValueAsMetadata in DXILBitcodeWriter

Xiang Li via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 22 09:10:59 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
python3kgae marked an inline comment as done.
Closed by commit rG73ebb05e4423: [DirectX] Support opaque ptr for ValueAsMetadata in DXILBitcodeWriter (authored by python3kgae).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127705

Files:
  llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp
  llvm/lib/Target/DirectX/DXILWriter/DXILValueEnumerator.cpp
  llvm/test/tools/dxil-dis/opaque-value_as_metadata.ll


Index: llvm/test/tools/dxil-dis/opaque-value_as_metadata.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/dxil-dis/opaque-value_as_metadata.ll
@@ -0,0 +1,29 @@
+; RUN: llc --filetype=obj %s -o - 2>&1 | dxil-dis -o - | FileCheck %s
+target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%"$Globals" = type { float }
+
+ at CBV = external constant %"$Globals"
+
+define void @main() {
+  ret void
+}
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!2}
+!dx.shaderModel = !{!3}
+!dx.entryPoints = !{!8}
+
+!0 = !{!"clang version 15.0.0"}
+!1 = !{i32 1, i32 0}
+!2 = !{i32 1, i32 7}
+!3 = !{!"ps", i32 6, i32 0}
+!4 = !{null, null, !5, null}
+!5 = !{!6}
+; CHECK-DAG:!{{[0-9]+}} = !{i32 0, %"$Globals"* @CBV
+!6 = !{i32 0, ptr @CBV, !"", i32 0, i32 0, i32 1, i32 4, null}
+!7 = !{[2 x i32] [i32 0, i32 1]}
+; CHECK-DAG:!{{[0-9]+}} = !{void ()* @main
+!8 = !{ptr @main, !"main", null, !4, null}
Index: llvm/lib/Target/DirectX/DXILWriter/DXILValueEnumerator.cpp
===================================================================
--- llvm/lib/Target/DirectX/DXILWriter/DXILValueEnumerator.cpp
+++ llvm/lib/Target/DirectX/DXILWriter/DXILValueEnumerator.cpp
@@ -12,6 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "DXILValueEnumerator.h"
+#include "DXILPointerType.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Config/llvm-config.h"
 #include "llvm/IR/Argument.h"
@@ -373,6 +374,8 @@
   for (const Function &F : M) {
     EnumerateValue(&F);
     EnumerateType(F.getValueType());
+    EnumerateType(
+        dxil::TypedPointerType::get(F.getFunctionType(), F.getAddressSpace()));
     EnumerateAttributes(F.getAttributes());
   }
 
@@ -392,6 +395,8 @@
   for (const GlobalVariable &GV : M.globals()) {
     if (GV.hasInitializer())
       EnumerateValue(GV.getInitializer());
+    EnumerateType(
+        dxil::TypedPointerType::get(GV.getValueType(), GV.getAddressSpace()));
     if (GV.hasAttributes())
       EnumerateAttributes(GV.getAttributesAsList(AttributeList::FunctionIndex));
   }
Index: llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp
===================================================================
--- llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp
+++ llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp
@@ -1357,7 +1357,12 @@
     const ValueAsMetadata *MD, SmallVectorImpl<uint64_t> &Record) {
   // Mimic an MDNode with a value as one operand.
   Value *V = MD->getValue();
-  Record.push_back(getTypeID(V->getType()));
+  Type *Ty = V->getType();
+  if (Function *F = dyn_cast<Function>(V))
+    Ty = TypedPointerType::get(F->getFunctionType(), F->getAddressSpace());
+  else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
+    Ty = TypedPointerType::get(GV->getValueType(), GV->getAddressSpace());
+  Record.push_back(getTypeID(Ty));
   Record.push_back(VE.getValueID(V));
   Stream.EmitRecord(bitc::METADATA_VALUE, Record, 0);
   Record.clear();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127705.439049.patch
Type: text/x-patch
Size: 3104 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220622/51eba6a7/attachment.bin>


More information about the llvm-commits mailing list