Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h
Line
Count
Source (jump to first uncovered line)
1
//===- TypeBasedAliasAnalysis.h - Type-Based Alias Analysis -----*- 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
//
9
/// \file
10
/// This is the interface for a metadata-based TBAA. See the source file for
11
/// details on the algorithm.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_ANALYSIS_TYPEBASEDALIASANALYSIS_H
16
#define LLVM_ANALYSIS_TYPEBASEDALIASANALYSIS_H
17
18
#include "llvm/Analysis/AliasAnalysis.h"
19
#include "llvm/IR/InstrTypes.h"
20
#include "llvm/IR/PassManager.h"
21
#include "llvm/Pass.h"
22
#include <memory>
23
24
namespace llvm {
25
26
class Function;
27
class MDNode;
28
class MemoryLocation;
29
30
/// A simple AA result that uses TBAA metadata to answer queries.
31
class TypeBasedAAResult : public AAResultBase<TypeBasedAAResult> {
32
  friend AAResultBase<TypeBasedAAResult>;
33
34
public:
35
  /// Handle invalidation events from the new pass manager.
36
  ///
37
  /// By definition, this result is stateless and so remains valid.
38
  bool invalidate(Function &, const PreservedAnalyses &,
39
2.96k
                  FunctionAnalysisManager::Invalidator &) {
40
2.96k
    return false;
41
2.96k
  }
42
43
  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
44
                    AAQueryInfo &AAQI);
45
  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
46
                              bool OrLocal);
47
  FunctionModRefBehavior getModRefBehavior(const CallBase *Call);
48
  FunctionModRefBehavior getModRefBehavior(const Function *F);
49
  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
50
                           AAQueryInfo &AAQI);
51
  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
52
                           AAQueryInfo &AAQI);
53
54
private:
55
  bool Aliases(const MDNode *A, const MDNode *B) const;
56
  bool PathAliases(const MDNode *A, const MDNode *B) const;
57
};
58
59
/// Analysis pass providing a never-invalidated alias analysis result.
60
class TypeBasedAA : public AnalysisInfoMixin<TypeBasedAA> {
61
  friend AnalysisInfoMixin<TypeBasedAA>;
62
63
  static AnalysisKey Key;
64
65
public:
66
  using Result = TypeBasedAAResult;
67
68
  TypeBasedAAResult run(Function &F, FunctionAnalysisManager &AM);
69
};
70
71
/// Legacy wrapper pass to provide the TypeBasedAAResult object.
72
class TypeBasedAAWrapperPass : public ImmutablePass {
73
  std::unique_ptr<TypeBasedAAResult> Result;
74
75
public:
76
  static char ID;
77
78
  TypeBasedAAWrapperPass();
79
80
10.5M
  TypeBasedAAResult &getResult() { return *Result; }
81
0
  const TypeBasedAAResult &getResult() const { return *Result; }
82
83
  bool doInitialization(Module &M) override;
84
  bool doFinalization(Module &M) override;
85
  void getAnalysisUsage(AnalysisUsage &AU) const override;
86
};
87
88
//===--------------------------------------------------------------------===//
89
//
90
// createTypeBasedAAWrapperPass - This pass implements metadata-based
91
// type-based alias analysis.
92
//
93
ImmutablePass *createTypeBasedAAWrapperPass();
94
95
} // end namespace llvm
96
97
#endif // LLVM_ANALYSIS_TYPEBASEDALIASANALYSIS_H