Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
35271 views
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
/// \file
9
/// This is the NVPTX address space based alias analysis pass.
10
//===----------------------------------------------------------------------===//
11
12
#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H
13
#define LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H
14
15
#include "llvm/Analysis/AliasAnalysis.h"
16
17
namespace llvm {
18
19
class MemoryLocation;
20
21
class NVPTXAAResult : public AAResultBase {
22
public:
23
NVPTXAAResult() {}
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
41
/// Analysis pass providing a never-invalidated alias analysis result.
42
class NVPTXAA : public AnalysisInfoMixin<NVPTXAA> {
43
friend AnalysisInfoMixin<NVPTXAA>;
44
45
static AnalysisKey Key;
46
47
public:
48
using Result = NVPTXAAResult;
49
50
NVPTXAAResult run(Function &F, AnalysisManager<Function> &AM) {
51
return NVPTXAAResult();
52
}
53
};
54
55
/// Legacy wrapper pass to provide the NVPTXAAResult object.
56
class NVPTXAAWrapperPass : public ImmutablePass {
57
std::unique_ptr<NVPTXAAResult> Result;
58
59
public:
60
static char ID;
61
62
NVPTXAAWrapperPass();
63
64
NVPTXAAResult &getResult() { return *Result; }
65
const NVPTXAAResult &getResult() const { return *Result; }
66
67
bool doInitialization(Module &M) override {
68
Result.reset(new NVPTXAAResult());
69
return false;
70
}
71
72
bool doFinalization(Module &M) override {
73
Result.reset();
74
return false;
75
}
76
77
void getAnalysisUsage(AnalysisUsage &AU) const override;
78
};
79
80
// Wrapper around ExternalAAWrapperPass so that the default
81
// constructor gets the callback.
82
class NVPTXExternalAAWrapper : public ExternalAAWrapperPass {
83
public:
84
static char ID;
85
86
NVPTXExternalAAWrapper()
87
: ExternalAAWrapperPass([](Pass &P, Function &, AAResults &AAR) {
88
if (auto *WrapperPass =
89
P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())
90
AAR.addAAResult(WrapperPass->getResult());
91
}) {}
92
};
93
94
ImmutablePass *createNVPTXAAWrapperPass();
95
void initializeNVPTXAAWrapperPassPass(PassRegistry &);
96
ImmutablePass *createNVPTXExternalAAWrapperPass();
97
void initializeNVPTXExternalAAWrapperPass(PassRegistry &);
98
99
} // end namespace llvm
100
101
#endif // LLVM_LIB_TARGET_NVPTX_NVPTXALIASANALYSIS_H
102
103