[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