|  | //===- 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); | 
|  | } |