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:
DXILResourcePrinterPass(raw_ostream & OS)37   explicit DXILResourcePrinterPass(raw_ostream &OS) : OS(OS) {}
38   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
isRequired()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 
getDXILResource()52   dxil::Resources &getDXILResource() { return Resources; }
getDXILResource()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