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