brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · b832b82 Raw
113 lines · c
1//===-------------------- NVPTXAliasAnalysis.h ------------------*- C++ -*-===//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/// \file9/// This is the NVPTX address space based alias analysis pass.10//===----------------------------------------------------------------------===//11 12#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H13#define LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H14 15#include "llvm/Analysis/AliasAnalysis.h"16 17namespace llvm {18 19class MemoryLocation;20 21class NVPTXAAResult : public AAResultBase {22public:23  NVPTXAAResult() = default;24  NVPTXAAResult(NVPTXAAResult &&Arg) : AAResultBase(std::move(Arg)) {}25 26  /// Handle invalidation events from the new pass manager.27  ///28  /// By definition, this result is stateless and so remains valid.29  bool invalidate(Function &, const PreservedAnalyses &,30                  FunctionAnalysisManager::Invalidator &Inv) {31    return false;32  }33 34  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,35                    AAQueryInfo &AAQI, const Instruction *CtxI = nullptr);36 37  ModRefInfo getModRefInfoMask(const MemoryLocation &Loc, AAQueryInfo &AAQI,38                               bool IgnoreLocals);39 40  MemoryEffects getMemoryEffects(const CallBase *Call, AAQueryInfo &AAQI);41 42  MemoryEffects getMemoryEffects(const Function *F) {43    return MemoryEffects::unknown();44  }45};46 47/// Analysis pass providing a never-invalidated alias analysis result.48class NVPTXAA : public AnalysisInfoMixin<NVPTXAA> {49  friend AnalysisInfoMixin<NVPTXAA>;50 51  static AnalysisKey Key;52 53public:54  using Result = NVPTXAAResult;55 56  NVPTXAAResult run(Function &F, AnalysisManager<Function> &AM) {57    return NVPTXAAResult();58  }59};60 61/// Legacy wrapper pass to provide the NVPTXAAResult object.62class NVPTXAAWrapperPass : public ImmutablePass {63  std::unique_ptr<NVPTXAAResult> Result;64 65public:66  static char ID;67 68  NVPTXAAWrapperPass();69 70  NVPTXAAResult &getResult() { return *Result; }71  const NVPTXAAResult &getResult() const { return *Result; }72 73  bool doInitialization(Module &M) override {74    Result.reset(new NVPTXAAResult());75    return false;76  }77 78  bool doFinalization(Module &M) override {79    Result.reset();80    return false;81  }82 83  void getAnalysisUsage(AnalysisUsage &AU) const override;84};85 86// Wrapper around ExternalAAWrapperPass so that the default87// constructor gets the callback.88// Note that NVPTXAA will run before BasicAA for compile time considerations.89class NVPTXExternalAAWrapper : public ExternalAAWrapperPass {90public:91  static char ID;92 93  NVPTXExternalAAWrapper()94      : ExternalAAWrapperPass(95            [](Pass &P, Function &, AAResults &AAR) {96              if (auto *WrapperPass =97                      P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())98                AAR.addAAResult(WrapperPass->getResult());99            },100            /*RunEarly=*/true) {}101 102  StringRef getPassName() const override {103    return "NVPTX Address space based Alias Analysis Wrapper";104  }105};106 107ImmutablePass *createNVPTXAAWrapperPass();108ImmutablePass *createNVPTXExternalAAWrapperPass();109 110} // end namespace llvm111 112#endif // LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H113