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 static bool isRequired() { return true; } 40 }; 41 42 /// The legacy pass manager's analysis pass to compute DXIL resource 43 /// information. 44 class DXILResourceWrapper : public ModulePass { 45 dxil::Resources Resources; 46 47 public: 48 static char ID; // Pass identification, replacement for typeid 49 50 DXILResourceWrapper(); 51 52 dxil::Resources &getDXILResource() { return Resources; } 53 const dxil::Resources &getDXILResource() const { return Resources; } 54 55 /// Calculate the DXILResource for the module. 56 bool runOnModule(Module &M) override; 57 58 void print(raw_ostream &O, const Module *M = nullptr) const override; 59 }; 60 } // namespace llvm 61 62 #endif // LLVM_TARGET_DIRECTX_DXILRESOURCEANALYSIS_H 63