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 #ifndef LLVM_TARGET_DIRECTX_DXILRESOURCEANALYSIS_H 14 #define LLVM_TARGET_DIRECTX_DXILRESOURCEANALYSIS_H 15 16 #include "DXILResource.h" 17 #include "llvm/IR/PassManager.h" 18 #include "llvm/Pass.h" 19 #include <memory> 20 21 namespace llvm { 22 /// Analysis pass that exposes the \c DXILResource for a module. 23 class DXILResourceAnalysis : public AnalysisInfoMixin<DXILResourceAnalysis> { 24 friend AnalysisInfoMixin<DXILResourceAnalysis>; 25 static AnalysisKey Key; 26 27 public: 28 typedef dxil::Resources Result; 29 dxil::Resources run(Module &M, ModuleAnalysisManager &AM); 30 }; 31 32 /// Printer pass for the \c DXILResourceAnalysis results. 33 class DXILResourcePrinterPass : public PassInfoMixin<DXILResourcePrinterPass> { 34 raw_ostream &OS; 35 36 public: 37 explicit DXILResourcePrinterPass(raw_ostream &OS) : OS(OS) {} 38 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 39 }; 40 41 /// The legacy pass manager's analysis pass to compute DXIL resource 42 /// information. 43 class DXILResourceWrapper : public ModulePass { 44 dxil::Resources Resources; 45 46 public: 47 static char ID; // Pass identification, replacement for typeid 48 49 DXILResourceWrapper(); 50 51 dxil::Resources &getDXILResource() { return Resources; } 52 const dxil::Resources &getDXILResource() const { return Resources; } 53 54 /// Calculate the DXILResource for the module. 55 bool runOnModule(Module &M) override; 56 57 void print(raw_ostream &O, const Module *M = nullptr) const override; 58 }; 59 } // namespace llvm 60 61 #endif // LLVM_TARGET_DIRECTX_DXILRESOURCEANALYSIS_H 62