[llvm] [DXIL][Analysis] Add DXILMetadataAnalysis pass (PR #102079)
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 8 00:29:15 PDT 2024
================
@@ -0,0 +1,85 @@
+//=- DXILMetadataAnalysis.h - Representation of Module metadata --*- C++ -*-=//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_DXILMETADATA_H
+#define LLVM_ANALYSIS_DXILMETADATA_H
+
+#include "llvm/ADT/MapVector.h"
+#include "llvm/IR/PassManager.h"
+#include "llvm/IR/Value.h"
+#include "llvm/Pass.h"
+#include "llvm/Support/DXILABI.h"
+#include "llvm/Support/VersionTuple.h"
+#include "llvm/TargetParser/Triple.h"
+
+namespace llvm {
+
+namespace dxil {
+
+struct ModuleMetadataInfo {
+ VersionTuple DXILVersion{};
+ VersionTuple ValidatorVersion{};
+ VersionTuple ShaderModelVersion{};
+ Triple::EnvironmentType ShaderStage = Triple::UnknownEnvironment;
+
+ void init(Module &);
+ void dump(raw_ostream &OS = dbgs()) const;
+};
+
+} // namespace dxil
+
+// Module metadata analysis pass for new pass manager
+class DXILMetadataAnalysis : public AnalysisInfoMixin<DXILMetadataAnalysis> {
+ friend AnalysisInfoMixin<DXILMetadataAnalysis>;
+
+ static AnalysisKey Key;
+
+public:
+ using Result = dxil::ModuleMetadataInfo;
+ /// Gather module metadata info for the module \c M.
+ dxil::ModuleMetadataInfo run(Module &M, ModuleAnalysisManager &AM);
+ dxil::ModuleMetadataInfo Data;
+};
+
+/// Printer pass for the \c DXILMetadataAnalysis results.
+class DXILMetadataAnalysisPrinterPass
+ : public PassInfoMixin<DXILMetadataAnalysisPrinterPass> {
+ raw_ostream &OS;
+
+public:
+ explicit DXILMetadataAnalysisPrinterPass(raw_ostream &OS) : OS(OS) {}
+
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+
+ static bool isRequired() { return true; }
+};
+
+/// Legacy pass to be used by other passes using legacy pass manager
+class DXILMetadataAnalysisLegacyPass : public ModulePass {
----------------
bogner wrote:
I'm not sure how consistent the naming conventions are here so maybe it doesn't matter too much, but I think the legacy PM versions of analysis passes are usually named as "wrapper" not "legacy", as in they are legacy wrappers for the new PM pass.
https://github.com/llvm/llvm-project/pull/102079
More information about the llvm-commits
mailing list