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