xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/DirectX/DXILResourceAnalysis.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
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