--- /dev/null
+//===- DXILPrettyPrinter.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 a pass for pretty printing DXIL metadata into IR
+/// comments when printing assembly output.
+///
+//===----------------------------------------------------------------------===//
+
+#include "DXILResourceAnalysis.h"
+#include "DirectX.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/IR/PassManager.h"
+#include "llvm/Pass.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+namespace {
+class DXILPrettyPrinter : public llvm::ModulePass {
+ raw_ostream &OS; // raw_ostream to print to.
+
+public:
+ static char ID;
+ DXILPrettyPrinter() : ModulePass(ID), OS(dbgs()) {
+ initializeDXILPrettyPrinterPass(*PassRegistry::getPassRegistry());
+ }
+
+ explicit DXILPrettyPrinter(raw_ostream &O) : ModulePass(ID), OS(O) {
+ initializeDXILPrettyPrinterPass(*PassRegistry::getPassRegistry());
+ }
+
+ StringRef getPassName() const override {
+ return "DXIL Metadata Pretty Printer";
+ }
+
+ bool runOnModule(Module &M) override;
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesAll();
+ AU.addRequired<DXILResourceWrapper>();
+ }
+};
+} // namespace
+
+char DXILPrettyPrinter::ID = 0;
+INITIALIZE_PASS_BEGIN(DXILPrettyPrinter, "dxil-pretty-printer",
+ "DXIL Metadata Pretty Printer", true, true)
+INITIALIZE_PASS_DEPENDENCY(DXILResourceWrapper)
+INITIALIZE_PASS_END(DXILPrettyPrinter, "dxil-pretty-printer",
+ "DXIL Metadata Pretty Printer", true, true)
+
+bool DXILPrettyPrinter::runOnModule(Module &M) {
+ dxil::Resources &Res = getAnalysis<DXILResourceWrapper>().getDXILResource();
+ Res.print(OS);
+ return false;
+}
+
+ModulePass *llvm::createDXILPrettyPrinterPass(raw_ostream &OS) {
+ return new DXILPrettyPrinter(OS);
+}
namespace llvm {
class ModulePass;
class PassRegistry;
+class raw_ostream;
/// Initializer for dxil writer pass
void initializeWriteDXILPassPass(PassRegistry &);
/// Initializer for DXILTranslateMetadata.
void initializeDXILResourceWrapperPass(PassRegistry &);
+/// Pass to pretty print DXIL metadata.
+ModulePass *createDXILPrettyPrinterPass(raw_ostream &OS);
+
+/// Initializer for DXILPrettyPrinter.
+void initializeDXILPrettyPrinterPass(PassRegistry &);
+
} // namespace llvm
#endif // LLVM_LIB_TARGET_DIRECTX_DIRECTX_H