brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · ec82aa9 Raw
97 lines · c
1//===- DXILRootSignature.h - DXIL Root Signature helper objects -----------===//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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file This file contains helper objects and APIs for working with DXIL10///       Root Signatures.11///12//===----------------------------------------------------------------------===//13#ifndef LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H14#define LLVM_LIB_TARGET_DIRECTX_DXILROOTSIGNATURE_H15 16#include "llvm/ADT/DenseMap.h"17#include "llvm/Analysis/DXILMetadataAnalysis.h"18#include "llvm/IR/DiagnosticInfo.h"19#include "llvm/IR/Metadata.h"20#include "llvm/IR/Module.h"21#include "llvm/IR/PassManager.h"22#include "llvm/MC/DXContainerRootSignature.h"23#include "llvm/Pass.h"24 25namespace llvm {26namespace dxil {27 28class RootSignatureBindingInfo {29private:30  SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> FuncToRsMap;31 32public:33  using iterator =34      SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>::iterator;35 36  RootSignatureBindingInfo() = default;37  RootSignatureBindingInfo(38      SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> Map)39      : FuncToRsMap(Map) {};40 41  iterator find(const Function *F) { return FuncToRsMap.find(F); }42 43  iterator end() { return FuncToRsMap.end(); }44 45  mcdxbc::RootSignatureDesc *getDescForFunction(const Function *F) {46    const auto FuncRs = find(F);47    if (FuncRs == end())48      return nullptr;49    return &FuncRs->second;50  }51};52 53class RootSignatureAnalysis : public AnalysisInfoMixin<RootSignatureAnalysis> {54  friend AnalysisInfoMixin<RootSignatureAnalysis>;55  static AnalysisKey Key;56 57public:58  RootSignatureAnalysis() = default;59 60  using Result = RootSignatureBindingInfo;61 62  Result run(Module &M, ModuleAnalysisManager &AM);63};64 65/// Wrapper pass for the legacy pass manager.66///67/// This is required because the passes that will depend on this are codegen68/// passes which run through the legacy pass manager.69class RootSignatureAnalysisWrapper : public ModulePass {70private:71  std::unique_ptr<RootSignatureBindingInfo> FuncToRsMap;72 73public:74  static char ID;75  RootSignatureAnalysisWrapper() : ModulePass(ID) {}76 77  RootSignatureBindingInfo &getRSInfo() { return *FuncToRsMap; }78 79  bool runOnModule(Module &M) override;80 81  void getAnalysisUsage(AnalysisUsage &AU) const override;82};83 84/// Printer pass for RootSignatureAnalysis results.85class RootSignatureAnalysisPrinter86    : public PassInfoMixin<RootSignatureAnalysisPrinter> {87  raw_ostream &OS;88 89public:90  explicit RootSignatureAnalysisPrinter(raw_ostream &OS) : OS(OS) {}91  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);92};93 94} // namespace dxil95} // namespace llvm96#endif97