1 //===- DXILResourceAnalysis.h - DXIL Resource analysis-------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// 9 /// \file This file contains Analysis for information about DXIL resources. 10 /// 11 //===----------------------------------------------------------------------===// 12 13 #include "DXILResource.h" 14 #include "llvm/IR/PassManager.h" 15 #include "llvm/Pass.h" 16 #include <memory> 17 18 namespace llvm { 19 /// Analysis pass that exposes the \c DXILResource for a module. 20 class DXILResourceAnalysis : public AnalysisInfoMixin<DXILResourceAnalysis> { 21 friend AnalysisInfoMixin<DXILResourceAnalysis>; 22 static AnalysisKey Key; 23 24 public: 25 typedef dxil::Resources Result; 26 dxil::Resources run(Module &M, ModuleAnalysisManager &AM); 27 }; 28 29 /// Printer pass for the \c DXILResourceAnalysis results. 30 class DXILResourcePrinterPass : public PassInfoMixin<DXILResourcePrinterPass> { 31 raw_ostream &OS; 32 33 public: 34 explicit DXILResourcePrinterPass(raw_ostream &OS) : OS(OS) {} 35 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 36 }; 37 38 /// The legacy pass manager's analysis pass to compute DXIL resource 39 /// information. 40 class DXILResourceWrapper : public ModulePass { 41 dxil::Resources Resources; 42 43 public: 44 static char ID; // Pass identification, replacement for typeid 45 46 DXILResourceWrapper(); 47 48 dxil::Resources &getDXILResource() { return Resources; } 49 const dxil::Resources &getDXILResource() const { return Resources; } 50 51 /// Calculate the DXILResource for the module. 52 bool runOnModule(Module &M) override; 53 54 void print(raw_ostream &O, const Module *M = nullptr) const override; 55 }; 56 } // namespace llvm 57