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 | |