Coverage Report

Created: 2023-10-30 17:15

/builds/2mk6rsew/0/parcoach/parcoach/src/include/parcoach/MemoryRegion.h
Line
Count
Source
1
#pragma once
2
3
#include "llvm/ADT/DenseMap.h"
4
#include "llvm/IR/Value.h"
5
#include "llvm/Passes/PassBuilder.h"
6
7
#include <map>
8
#include <set>
9
10
class Andersen;
11
12
class MemRegEntry {
13
  unsigned id_;
14
  bool cudaShared_;
15
  std::string name_;
16
17
public:
18
  llvm::Value const *Val;
19
  MemRegEntry(llvm::Value const *V);
20
90
  llvm::StringRef getName() const { return name_; }
21
42.3k
  bool isCudaShared() const { return cudaShared_; }
22
  static unsigned generateId();
23
};
24
25
using MemRegSet = std::set<MemRegEntry *>;
26
using MemRegVector = std::vector<MemRegEntry *>;
27
using FunctionToMemRegSetMap =
28
    llvm::ValueMap<llvm::Function const *, MemRegSet>;
29
using FunctionToValueSetMap =
30
    llvm::ValueMap<llvm::Function const *, std::set<llvm::Value const *>>;
31
32
class MemReg {
33
  llvm::ValueMap<llvm::Value const *, std::unique_ptr<MemRegEntry>>
34
      valueToRegMap;
35
  MemRegSet sharedCudaRegions;
36
  FunctionToMemRegSetMap func2SharedOmpRegs;
37
38
  void createRegion(llvm::Value const *v);
39
  void setOmpSharedRegions(llvm::Function const *F, MemRegVector &regs);
40
41
public:
42
#ifndef NDEBUG
43
  void dumpRegions() const;
44
#endif
45
  MemRegEntry *getValueRegion(llvm::Value const *v) const;
46
  void getValuesRegion(std::vector<llvm::Value const *> &ptsSet,
47
                       MemRegVector &regs) const;
48
  MemRegSet const &getCudaSharedRegions() const;
49
  FunctionToMemRegSetMap const &getOmpSharedRegions() const;
50
  MemReg(llvm::Module &M, Andersen const &A);
51
  static FunctionToValueSetMap func2SharedOmpVar;
52
};
53
54
class MemRegAnalysis : public llvm::AnalysisInfoMixin<MemRegAnalysis> {
55
  friend llvm::AnalysisInfoMixin<MemRegAnalysis>;
56
  static llvm::AnalysisKey Key;
57
58
public:
59
  using Result = std::unique_ptr<MemReg>;
60
61
  static Result run(llvm::Module &M, llvm::ModuleAnalysisManager &);
62
};