Coverage Report

Created: 2024-01-17 10:31

/src/llvm-project/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
Line
Count
Source (jump to first uncovered line)
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
740
  NVPTXAAResult() {}
24
0
  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
0
                  FunctionAnalysisManager::Invalidator &Inv) {
31
0
    return false;
32
0
  }
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
0
  NVPTXAAResult run(Function &F, AnalysisManager<Function> &AM) {
51
0
    return NVPTXAAResult();
52
0
  }
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
2.21k
  NVPTXAAResult &getResult() { return *Result; }
65
0
  const NVPTXAAResult &getResult() const { return *Result; }
66
67
740
  bool doInitialization(Module &M) override {
68
740
    Result.reset(new NVPTXAAResult());
69
740
    return false;
70
740
  }
71
72
740
  bool doFinalization(Module &M) override {
73
740
    Result.reset();
74
740
    return false;
75
740
  }
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
0
      : ExternalAAWrapperPass([](Pass &P, Function &, AAResults &AAR) {
88
0
          if (auto *WrapperPass =
89
0
                  P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())
90
0
            AAR.addAAResult(WrapperPass->getResult());
91
0
        }) {}
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