llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-directx Author: Helena Kotas (hekota) <details> <summary>Changes</summary> `DXILResourceMDAnalysis` gathers information about resources from obsolete resource metadata annotations that are going to be removed in a follow-up PR. Part 1/2 of #<!-- -->114126 --- Patch is 33.16 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/130323.diff 15 Files Affected: - (modified) llvm/lib/Target/DirectX/CMakeLists.txt (-2) - (modified) llvm/lib/Target/DirectX/DXILDataScalarization.h (-1) - (modified) llvm/lib/Target/DirectX/DXILIntrinsicExpansion.h (-1) - (modified) llvm/lib/Target/DirectX/DXILOpLowering.cpp (-2) - (modified) llvm/lib/Target/DirectX/DXILPrepare.cpp (-2) - (modified) llvm/lib/Target/DirectX/DXILPrettyPrinter.cpp (+3-20) - (removed) llvm/lib/Target/DirectX/DXILResource.cpp (-346) - (removed) llvm/lib/Target/DirectX/DXILResource.h (-133) - (removed) llvm/lib/Target/DirectX/DXILResourceAnalysis.cpp (-41) - (removed) llvm/lib/Target/DirectX/DXILResourceAnalysis.h (-55) - (modified) llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp (+4-27) - (modified) llvm/lib/Target/DirectX/DirectX.h (-3) - (modified) llvm/lib/Target/DirectX/DirectXPassRegistry.def (-1) - (modified) llvm/lib/Target/DirectX/DirectXTargetMachine.cpp (-2) - (modified) llvm/test/CodeGen/DirectX/llc-pipeline.ll (-1) ``````````diff diff --git a/llvm/lib/Target/DirectX/CMakeLists.txt b/llvm/lib/Target/DirectX/CMakeLists.txt index 5a167535b0afa..6904a1c0f1e73 100644 --- a/llvm/lib/Target/DirectX/CMakeLists.txt +++ b/llvm/lib/Target/DirectX/CMakeLists.txt @@ -28,8 +28,6 @@ add_llvm_target(DirectXCodeGen DXILOpLowering.cpp DXILPrepare.cpp DXILPrettyPrinter.cpp - DXILResource.cpp - DXILResourceAnalysis.cpp DXILResourceAccess.cpp DXILShaderFlags.cpp DXILTranslateMetadata.cpp diff --git a/llvm/lib/Target/DirectX/DXILDataScalarization.h b/llvm/lib/Target/DirectX/DXILDataScalarization.h index 560e061db96d0..e8cd495729431 100644 --- a/llvm/lib/Target/DirectX/DXILDataScalarization.h +++ b/llvm/lib/Target/DirectX/DXILDataScalarization.h @@ -9,7 +9,6 @@ #ifndef LLVM_TARGET_DIRECTX_DXILDATASCALARIZATION_H #define LLVM_TARGET_DIRECTX_DXILDATASCALARIZATION_H -#include "DXILResource.h" #include "llvm/IR/PassManager.h" #include "llvm/Pass.h" diff --git a/llvm/lib/Target/DirectX/DXILIntrinsicExpansion.h b/llvm/lib/Target/DirectX/DXILIntrinsicExpansion.h index c283386c6e3df..43fc4d7735e1f 100644 --- a/llvm/lib/Target/DirectX/DXILIntrinsicExpansion.h +++ b/llvm/lib/Target/DirectX/DXILIntrinsicExpansion.h @@ -8,7 +8,6 @@ #ifndef LLVM_TARGET_DIRECTX_DXILINTRINSICEXPANSION_H #define LLVM_TARGET_DIRECTX_DXILINTRINSICEXPANSION_H -#include "DXILResource.h" #include "llvm/IR/PassManager.h" #include "llvm/Pass.h" diff --git a/llvm/lib/Target/DirectX/DXILOpLowering.cpp b/llvm/lib/Target/DirectX/DXILOpLowering.cpp index 92b6787b9571e..1b02206464661 100644 --- a/llvm/lib/Target/DirectX/DXILOpLowering.cpp +++ b/llvm/lib/Target/DirectX/DXILOpLowering.cpp @@ -10,7 +10,6 @@ #include "DXILConstants.h" #include "DXILIntrinsicExpansion.h" #include "DXILOpBuilder.h" -#include "DXILResourceAnalysis.h" #include "DXILShaderFlags.h" #include "DirectX.h" #include "llvm/ADT/SmallVector.h" @@ -889,7 +888,6 @@ class DXILOpLoweringLegacy : public ModulePass { AU.addRequired<DXILResourceTypeWrapperPass>(); AU.addRequired<DXILResourceBindingWrapperPass>(); AU.addPreserved<DXILResourceBindingWrapperPass>(); - AU.addPreserved<DXILResourceMDWrapper>(); AU.addPreserved<DXILMetadataAnalysisWrapperPass>(); AU.addPreserved<ShaderFlagsAnalysisWrapper>(); } diff --git a/llvm/lib/Target/DirectX/DXILPrepare.cpp b/llvm/lib/Target/DirectX/DXILPrepare.cpp index 355c79ae0edc9..0014cc9e1f67c 100644 --- a/llvm/lib/Target/DirectX/DXILPrepare.cpp +++ b/llvm/lib/Target/DirectX/DXILPrepare.cpp @@ -11,7 +11,6 @@ /// Language (DXIL). //===----------------------------------------------------------------------===// -#include "DXILResourceAnalysis.h" #include "DXILShaderFlags.h" #include "DirectX.h" #include "DirectXIRPasses/PointerTypeAnalysis.h" @@ -248,7 +247,6 @@ class DXILPrepareModule : public ModulePass { void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<DXILMetadataAnalysisWrapperPass>(); AU.addPreserved<ShaderFlagsAnalysisWrapper>(); - AU.addPreserved<DXILResourceMDWrapper>(); AU.addPreserved<DXILMetadataAnalysisWrapperPass>(); AU.addPreserved<DXILResourceBindingWrapperPass>(); } diff --git a/llvm/lib/Target/DirectX/DXILPrettyPrinter.cpp b/llvm/lib/Target/DirectX/DXILPrettyPrinter.cpp index 7255a9be06d51..c1f2483044693 100644 --- a/llvm/lib/Target/DirectX/DXILPrettyPrinter.cpp +++ b/llvm/lib/Target/DirectX/DXILPrettyPrinter.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "DXILPrettyPrinter.h" -#include "DXILResourceAnalysis.h" #include "DirectX.h" #include "llvm/ADT/StringRef.h" #include "llvm/Analysis/DXILResource.h" @@ -222,8 +221,7 @@ struct FormatBindingSize } // namespace static void prettyPrintResources(raw_ostream &OS, const DXILBindingMap &DBM, - DXILResourceTypeMap &DRTM, - const dxil::Resources &MDResources) { + DXILResourceTypeMap &DRTM) { // Column widths are arbitrary but match the widths DXC uses. OS << ";\n; Resource Bindings:\n;\n"; OS << formatv("; {0,-30} {1,10} {2,7} {3,11} {4,7} {5,14} {6,9}\n", "Name", @@ -237,11 +235,6 @@ static void prettyPrintResources(raw_ostream &OS, const DXILBindingMap &DBM, const dxil::ResourceTypeInfo &RTI = DRTM[RBI.getHandleTy()]; dxil::ResourceClass RC = RTI.getResourceClass(); - assert((RC != dxil::ResourceClass::CBuffer || !MDResources.hasCBuffers()) && - "Old and new cbuffer representations can't coexist"); - assert((RC != dxil::ResourceClass::UAV || !MDResources.hasUAVs()) && - "Old and new UAV representations can't coexist"); - StringRef Name(RBI.getName()); StringRef Type(getRCName(RC)); StringRef Format(getFormatName(RTI)); @@ -252,12 +245,6 @@ static void prettyPrintResources(raw_ostream &OS, const DXILBindingMap &DBM, OS << formatv("; {0,-30} {1,10} {2,7} {3,11} {4,7} {5,14} {6,9}\n", Name, Type, Format, Dim, ID, Bind, Count); } - - if (MDResources.hasCBuffers()) - MDResources.printCBuffers(OS); - if (MDResources.hasUAVs()) - MDResources.printUAVs(OS); - OS << ";\n"; } @@ -265,8 +252,7 @@ PreservedAnalyses DXILPrettyPrinterPass::run(Module &M, ModuleAnalysisManager &MAM) { const DXILBindingMap &DBM = MAM.getResult<DXILResourceBindingAnalysis>(M); DXILResourceTypeMap &DRTM = MAM.getResult<DXILResourceTypeAnalysis>(M); - const dxil::Resources &MDResources = MAM.getResult<DXILResourceMDAnalysis>(M); - prettyPrintResources(OS, DBM, DRTM, MDResources); + prettyPrintResources(OS, DBM, DRTM); return PreservedAnalyses::all(); } @@ -293,7 +279,6 @@ class DXILPrettyPrinterLegacy : public llvm::ModulePass { AU.setPreservesAll(); AU.addRequired<DXILResourceTypeWrapperPass>(); AU.addRequired<DXILResourceBindingWrapperPass>(); - AU.addRequired<DXILResourceMDWrapper>(); } }; } // namespace @@ -303,7 +288,6 @@ INITIALIZE_PASS_BEGIN(DXILPrettyPrinterLegacy, "dxil-pretty-printer", "DXIL Metadata Pretty Printer", true, true) INITIALIZE_PASS_DEPENDENCY(DXILResourceTypeWrapperPass) INITIALIZE_PASS_DEPENDENCY(DXILResourceBindingWrapperPass) -INITIALIZE_PASS_DEPENDENCY(DXILResourceMDWrapper) INITIALIZE_PASS_END(DXILPrettyPrinterLegacy, "dxil-pretty-printer", "DXIL Metadata Pretty Printer", true, true) @@ -312,8 +296,7 @@ bool DXILPrettyPrinterLegacy::runOnModule(Module &M) { getAnalysis<DXILResourceBindingWrapperPass>().getBindingMap(); DXILResourceTypeMap &DRTM = getAnalysis<DXILResourceTypeWrapperPass>().getResourceTypeMap(); - dxil::Resources &Res = getAnalysis<DXILResourceMDWrapper>().getDXILResource(); - prettyPrintResources(OS, DBM, DRTM, Res); + prettyPrintResources(OS, DBM, DRTM); return false; } diff --git a/llvm/lib/Target/DirectX/DXILResource.cpp b/llvm/lib/Target/DirectX/DXILResource.cpp deleted file mode 100644 index f027283b70521..0000000000000 --- a/llvm/lib/Target/DirectX/DXILResource.cpp +++ /dev/null @@ -1,346 +0,0 @@ -//===- DXILResource.cpp - DXIL Resource helper objects --------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -/// -/// \file This file contains helper objects for working with DXIL Resources. -/// -//===----------------------------------------------------------------------===// - -#include "DXILResource.h" -#include "CBufferDataLayout.h" -#include "llvm/ADT/StringSwitch.h" -#include "llvm/IR/IRBuilder.h" -#include "llvm/IR/Metadata.h" -#include "llvm/IR/Module.h" -#include "llvm/Support/Debug.h" -#include "llvm/Support/Format.h" - -using namespace llvm; -using namespace llvm::dxil; - -template <typename T> void ResourceTable<T>::collect(Module &M) { - NamedMDNode *Entry = M.getNamedMetadata(MDName); - if (!Entry || Entry->getNumOperands() == 0) - return; - - uint32_t Counter = 0; - for (auto *Res : Entry->operands()) { - Data.push_back(T(Counter++, hlsl::FrontendResource(cast<MDNode>(Res)))); - } -} - -template <> void ResourceTable<ConstantBuffer>::collect(Module &M) { - NamedMDNode *Entry = M.getNamedMetadata(MDName); - if (!Entry || Entry->getNumOperands() == 0) - return; - - uint32_t Counter = 0; - for (auto *Res : Entry->operands()) { - Data.push_back( - ConstantBuffer(Counter++, hlsl::FrontendResource(cast<MDNode>(Res)))); - } - // FIXME: share CBufferDataLayout with CBuffer load lowering. - // See https://github.com/llvm/llvm-project/issues/58381 - CBufferDataLayout CBDL(M.getDataLayout(), /*IsLegacy*/ true); - for (auto &CB : Data) - CB.setSize(CBDL); -} - -void Resources::collect(Module &M) { - UAVs.collect(M); - CBuffers.collect(M); -} - -ResourceBase::ResourceBase(uint32_t I, hlsl::FrontendResource R) - : ID(I), GV(R.getGlobalVariable()), Name(""), Space(R.getSpace()), - LowerBound(R.getResourceIndex()), RangeSize(1) { - if (auto *ArrTy = dyn_cast<ArrayType>(GV->getValueType())) - RangeSize = ArrTy->getNumElements(); -} - -StringRef ResourceBase::getElementTypeName(ElementType ElTy) { - switch (ElTy) { - case ElementType::Invalid: - return "invalid"; - case ElementType::I1: - return "i1"; - case ElementType::I16: - return "i16"; - case ElementType::U16: - return "u16"; - case ElementType::I32: - return "i32"; - case ElementType::U32: - return "u32"; - case ElementType::I64: - return "i64"; - case ElementType::U64: - return "u64"; - case ElementType::F16: - return "f16"; - case ElementType::F32: - return "f32"; - case ElementType::F64: - return "f64"; - case ElementType::SNormF16: - return "snorm_f16"; - case ElementType::UNormF16: - return "unorm_f16"; - case ElementType::SNormF32: - return "snorm_f32"; - case ElementType::UNormF32: - return "unorm_f32"; - case ElementType::SNormF64: - return "snorm_f64"; - case ElementType::UNormF64: - return "unorm_f64"; - case ElementType::PackedS8x32: - return "p32i8"; - case ElementType::PackedU8x32: - return "p32u8"; - } - llvm_unreachable("All ElementType enums are handled in switch"); -} - -void ResourceBase::printElementType(ResourceKind Kind, ElementType ElTy, - unsigned Alignment, raw_ostream &OS) { - switch (Kind) { - default: - // TODO: add vector size. - OS << right_justify(getElementTypeName(ElTy), Alignment); - break; - case ResourceKind::RawBuffer: - OS << right_justify("byte", Alignment); - break; - case ResourceKind::StructuredBuffer: - OS << right_justify("struct", Alignment); - break; - case ResourceKind::CBuffer: - case ResourceKind::Sampler: - OS << right_justify("NA", Alignment); - break; - case ResourceKind::Invalid: - case ResourceKind::NumEntries: - break; - } -} - -StringRef ResourceBase::getKindName(ResourceKind Kind) { - switch (Kind) { - case ResourceKind::NumEntries: - case ResourceKind::Invalid: - return "invalid"; - case ResourceKind::Texture1D: - return "1d"; - case ResourceKind::Texture2D: - return "2d"; - case ResourceKind::Texture2DMS: - return "2dMS"; - case ResourceKind::Texture3D: - return "3d"; - case ResourceKind::TextureCube: - return "cube"; - case ResourceKind::Texture1DArray: - return "1darray"; - case ResourceKind::Texture2DArray: - return "2darray"; - case ResourceKind::Texture2DMSArray: - return "2darrayMS"; - case ResourceKind::TextureCubeArray: - return "cubearray"; - case ResourceKind::TypedBuffer: - return "buf"; - case ResourceKind::RawBuffer: - return "rawbuf"; - case ResourceKind::StructuredBuffer: - return "structbuf"; - case ResourceKind::CBuffer: - return "cbuffer"; - case ResourceKind::Sampler: - return "sampler"; - case ResourceKind::TBuffer: - return "tbuffer"; - case ResourceKind::RTAccelerationStructure: - return "ras"; - case ResourceKind::FeedbackTexture2D: - return "fbtex2d"; - case ResourceKind::FeedbackTexture2DArray: - return "fbtex2darray"; - } - llvm_unreachable("All ResourceKind enums are handled in switch"); -} - -void ResourceBase::printKind(ResourceKind Kind, unsigned Alignment, - raw_ostream &OS, bool SRV, bool HasCounter, - uint32_t SampleCount) { - switch (Kind) { - default: - OS << right_justify(getKindName(Kind), Alignment); - break; - - case ResourceKind::RawBuffer: - case ResourceKind::StructuredBuffer: - if (SRV) - OS << right_justify("r/o", Alignment); - else { - if (!HasCounter) - OS << right_justify("r/w", Alignment); - else - OS << right_justify("r/w+cnt", Alignment); - } - break; - case ResourceKind::TypedBuffer: - OS << right_justify("buf", Alignment); - break; - case ResourceKind::Texture2DMS: - case ResourceKind::Texture2DMSArray: { - std::string DimName = getKindName(Kind).str(); - if (SampleCount) - DimName += std::to_string(SampleCount); - OS << right_justify(DimName, Alignment); - } break; - case ResourceKind::CBuffer: - case ResourceKind::Sampler: - OS << right_justify("NA", Alignment); - break; - case ResourceKind::Invalid: - case ResourceKind::NumEntries: - break; - } -} - -void ResourceBase::print(raw_ostream &OS, StringRef IDPrefix, - StringRef BindingPrefix) const { - std::string ResID = IDPrefix.str(); - ResID += std::to_string(ID); - OS << right_justify(ResID, 8); - - std::string Bind = BindingPrefix.str(); - Bind += std::to_string(LowerBound); - if (Space) - Bind += ",space" + std::to_string(Space); - - OS << right_justify(Bind, 15); - if (RangeSize != UINT_MAX) - OS << right_justify(std::to_string(RangeSize), 6) << "\n"; - else - OS << right_justify("unbounded", 6) << "\n"; -} - -void UAVResource::print(raw_ostream &OS) const { - OS << "; " << left_justify(Name, 31); - - OS << right_justify("UAV", 10); - - printElementType(Shape, ExtProps.ElementType.value_or(ElementType::Invalid), - 8, OS); - - // FIXME: support SampleCount. - // See https://github.com/llvm/llvm-project/issues/58175 - printKind(Shape, 12, OS, /*SRV*/ false, HasCounter); - // Print the binding part. - ResourceBase::print(OS, "U", "u"); -} - -ConstantBuffer::ConstantBuffer(uint32_t I, hlsl::FrontendResource R) - : ResourceBase(I, R) {} - -void ConstantBuffer::setSize(CBufferDataLayout &DL) { - CBufferSizeInBytes = DL.getTypeAllocSizeInBytes(GV->getValueType()); -} - -void ConstantBuffer::print(raw_ostream &OS) const { - OS << "; " << left_justify(Name, 31); - - OS << right_justify("cbuffer", 10); - - printElementType(ResourceKind::CBuffer, ElementType::Invalid, 8, OS); - - printKind(ResourceKind::CBuffer, 12, OS, /*SRV*/ false, /*HasCounter*/ false); - // Print the binding part. - ResourceBase::print(OS, "CB", "cb"); -} - -template <typename T> void ResourceTable<T>::print(raw_ostream &OS) const { - for (auto &Res : Data) - Res.print(OS); -} - -MDNode *ResourceBase::ExtendedProperties::write(LLVMContext &Ctx) const { - IRBuilder<> B(Ctx); - SmallVector<Metadata *> Entries; - if (ElementType) { - Entries.emplace_back( - ConstantAsMetadata::get(B.getInt32(TypedBufferElementType))); - Entries.emplace_back(ConstantAsMetadata::get( - B.getInt32(static_cast<uint32_t>(*ElementType)))); - } - if (Entries.empty()) - return nullptr; - return MDNode::get(Ctx, Entries); -} - -void ResourceBase::write(LLVMContext &Ctx, - MutableArrayRef<Metadata *> Entries) const { - IRBuilder<> B(Ctx); - Entries[0] = ConstantAsMetadata::get(B.getInt32(ID)); - Entries[1] = ConstantAsMetadata::get(GV); - Entries[2] = MDString::get(Ctx, Name); - Entries[3] = ConstantAsMetadata::get(B.getInt32(Space)); - Entries[4] = ConstantAsMetadata::get(B.getInt32(LowerBound)); - Entries[5] = ConstantAsMetadata::get(B.getInt32(RangeSize)); -} - -MDNode *UAVResource::write() const { - auto &Ctx = GV->getContext(); - IRBuilder<> B(Ctx); - Metadata *Entries[11]; - ResourceBase::write(Ctx, Entries); - Entries[6] = - ConstantAsMetadata::get(B.getInt32(static_cast<uint32_t>(Shape))); - Entries[7] = ConstantAsMetadata::get(B.getInt1(GloballyCoherent)); - Entries[8] = ConstantAsMetadata::get(B.getInt1(HasCounter)); - Entries[9] = ConstantAsMetadata::get(B.getInt1(IsROV)); - Entries[10] = ExtProps.write(Ctx); - return MDNode::get(Ctx, Entries); -} - -MDNode *ConstantBuffer::write() const { - auto &Ctx = GV->getContext(); - IRBuilder<> B(Ctx); - Metadata *Entries[7]; - ResourceBase::write(Ctx, Entries); - - Entries[6] = ConstantAsMetadata::get(B.getInt32(CBufferSizeInBytes)); - return MDNode::get(Ctx, Entries); -} - -template <typename T> MDNode *ResourceTable<T>::write(Module &M) const { - if (Data.empty()) - return nullptr; - SmallVector<Metadata *> MDs; - for (auto &Res : Data) - MDs.emplace_back(Res.write()); - - NamedMDNode *Entry = M.getNamedMetadata(MDName); - if (Entry) - Entry->eraseFromParent(); - - return MDNode::get(M.getContext(), MDs); -} - -Metadata *Resources::writeUAVs(Module &M) const { return UAVs.write(M); } -void Resources::printUAVs(raw_ostream &OS) const { UAVs.print(OS); } -Metadata *Resources::writeCBuffers(Module &M) const { - return CBuffers.write(M); -} -void Resources::printCBuffers(raw_ostream &OS) const { CBuffers.print(OS); } - -void Resources::dump() const { - printCBuffers(dbgs()); - printUAVs(dbgs()); -} diff --git a/llvm/lib/Target/DirectX/DXILResource.h b/llvm/lib/Target/DirectX/DXILResource.h deleted file mode 100644 index 812729bc4dc57..0000000000000 --- a/llvm/lib/Target/DirectX/DXILResource.h +++ /dev/null @@ -1,133 +0,0 @@ -//===- DXILResource.h - DXIL Resource helper objects ----------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -/// -/// \file This file contains helper objects for working with DXIL Resources. -/// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TARGET_DIRECTX_DXILRESOURCE_H -#define LLVM_TARGET_DIRECTX_DXILRESOURCE_H - -#include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Frontend/HLSL/HLSLResource.h" -#include "llvm/IR/Metadata.h" -#include "llvm/Support/Compiler.h" -#include "llvm/Support/DXILABI.h" -#include <cstdint> - -namespace llvm { -class Module; -class GlobalVariable; - -namespace dxil { -class CBufferDataLayout; - -class ResourceBase { -protected: - uint32_t ID; - GlobalVariable *GV; - StringRef Name; - uint32_t Space; - uint32_t LowerBound; - uint32_t RangeSize; - ResourceBase(uint32_t I, hlsl::FrontendResource R); - - void write(LLVMContext &Ctx, MutableArrayRef<Metadata *> Entries) const; - - void print(raw_ostream &O, StringRef IDPrefix, StringRef BindingPrefix) const; - static StringRef getKindName(dxil::ResourceKind Kind); - static void printKind(dxil::ResourceKind Kind, unsigned Alignment, - raw_ostream &OS, bool SRV = false, - bool HasCounter = false, uint32_t SampleCount = 0); - - static StringRef getElementTypeName(dxil::ElementType CompType); - static void printElementType(dxil::ResourceKind Kind, - dxil::ElementType CompType, unsigned Alignment, - raw_ostream &OS); - -public: - struct ExtendedProperties { - std::optional<dxil::ElementType> ElementType; - - // The value ordering of this enumeration is part of the DXIL ABI. Elements - // can only be added to the end, and not removed. - enum Tags : uint32_t { - TypedBufferElementType = 0, - StructuredBufferElementStride, - SamplerFeedbackKind, - Atomic64Use - }; - - MDNode *write(LLVMContext &Ctx) const; - }; -}; - -class UAVResource : public ResourceBase { - dxil::ResourceKind Shape; - bool GloballyCoherent; -... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/130323 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits