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