
Now only DXILTranslateMetadata uses DXILResources, so DXILResourceWrapper is only used by DXILTranslateMetadata. Once we add lower for createHandle, DXILResourceWrapper will be used in more passes. Also we can add resource index allocation in DXILResourceWrapper. Reviewed By: beanz Differential Revision: https://reviews.llvm.org/D135190
57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
//===- DXILResourceAnalysis.h - DXIL Resource analysis-------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file This file contains Analysis for information about DXIL resources.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "DXILResource.h"
|
|
#include "llvm/IR/PassManager.h"
|
|
#include "llvm/Pass.h"
|
|
#include <memory>
|
|
|
|
namespace llvm {
|
|
/// Analysis pass that exposes the \c DXILResource for a module.
|
|
class DXILResourceAnalysis : public AnalysisInfoMixin<DXILResourceAnalysis> {
|
|
friend AnalysisInfoMixin<DXILResourceAnalysis>;
|
|
static AnalysisKey Key;
|
|
|
|
public:
|
|
typedef dxil::Resources Result;
|
|
dxil::Resources run(Module &M, ModuleAnalysisManager &AM);
|
|
};
|
|
|
|
/// Printer pass for the \c DXILResourceAnalysis results.
|
|
class DXILResourcePrinterPass : public PassInfoMixin<DXILResourcePrinterPass> {
|
|
raw_ostream &OS;
|
|
|
|
public:
|
|
explicit DXILResourcePrinterPass(raw_ostream &OS) : OS(OS) {}
|
|
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
|
|
};
|
|
|
|
/// The legacy pass manager's analysis pass to compute DXIL resource
|
|
/// information.
|
|
class DXILResourceWrapper : public ModulePass {
|
|
dxil::Resources Resources;
|
|
|
|
public:
|
|
static char ID; // Pass identification, replacement for typeid
|
|
|
|
DXILResourceWrapper();
|
|
|
|
dxil::Resources &getDXILResource() { return Resources; }
|
|
const dxil::Resources &getDXILResource() const { return Resources; }
|
|
|
|
/// Calculate the DXILResource for the module.
|
|
bool runOnModule(Module &M) override;
|
|
|
|
void print(raw_ostream &O, const Module *M = nullptr) const override;
|
|
};
|
|
} // namespace llvm
|