Path: blob/main/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
35271 views
//===-------------------- NVPTXAliasAnalysis.h ------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7/// \file8/// This is the NVPTX address space based alias analysis pass.9//===----------------------------------------------------------------------===//1011#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H12#define LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H1314#include "llvm/Analysis/AliasAnalysis.h"1516namespace llvm {1718class MemoryLocation;1920class NVPTXAAResult : public AAResultBase {21public:22NVPTXAAResult() {}23NVPTXAAResult(NVPTXAAResult &&Arg) : AAResultBase(std::move(Arg)) {}2425/// Handle invalidation events from the new pass manager.26///27/// By definition, this result is stateless and so remains valid.28bool invalidate(Function &, const PreservedAnalyses &,29FunctionAnalysisManager::Invalidator &Inv) {30return false;31}3233AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,34AAQueryInfo &AAQI, const Instruction *CtxI = nullptr);3536ModRefInfo getModRefInfoMask(const MemoryLocation &Loc, AAQueryInfo &AAQI,37bool IgnoreLocals);38};3940/// Analysis pass providing a never-invalidated alias analysis result.41class NVPTXAA : public AnalysisInfoMixin<NVPTXAA> {42friend AnalysisInfoMixin<NVPTXAA>;4344static AnalysisKey Key;4546public:47using Result = NVPTXAAResult;4849NVPTXAAResult run(Function &F, AnalysisManager<Function> &AM) {50return NVPTXAAResult();51}52};5354/// Legacy wrapper pass to provide the NVPTXAAResult object.55class NVPTXAAWrapperPass : public ImmutablePass {56std::unique_ptr<NVPTXAAResult> Result;5758public:59static char ID;6061NVPTXAAWrapperPass();6263NVPTXAAResult &getResult() { return *Result; }64const NVPTXAAResult &getResult() const { return *Result; }6566bool doInitialization(Module &M) override {67Result.reset(new NVPTXAAResult());68return false;69}7071bool doFinalization(Module &M) override {72Result.reset();73return false;74}7576void getAnalysisUsage(AnalysisUsage &AU) const override;77};7879// Wrapper around ExternalAAWrapperPass so that the default80// constructor gets the callback.81class NVPTXExternalAAWrapper : public ExternalAAWrapperPass {82public:83static char ID;8485NVPTXExternalAAWrapper()86: ExternalAAWrapperPass([](Pass &P, Function &, AAResults &AAR) {87if (auto *WrapperPass =88P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())89AAR.addAAResult(WrapperPass->getResult());90}) {}91};9293ImmutablePass *createNVPTXAAWrapperPass();94void initializeNVPTXAAWrapperPassPass(PassRegistry &);95ImmutablePass *createNVPTXExternalAAWrapperPass();96void initializeNVPTXExternalAAWrapperPass(PassRegistry &);9798} // end namespace llvm99100#endif // LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H101102103