blob: 0941814a56c3410dc92e01a1735e3ecc8425b123 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- AliasAnalysisEvaluator.h - Alias Analysis Accuracy Evaluator -------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9/// \file
10///
11/// This file implements a simple N^2 alias analysis accuracy evaluator. The
12/// analysis result is a set of statistics of how many times the AA
13/// infrastructure provides each kind of alias result and mod/ref result when
14/// queried with all pairs of pointers in the function.
15///
16/// It can be used to evaluate a change in an alias analysis implementation,
17/// algorithm, or the AA pipeline infrastructure itself. It acts like a stable
18/// and easily tested consumer of all AA information exposed.
19///
20/// This is inspired and adapted from code by: Naveen Neelakantam, Francesco
21/// Spadini, and Wojciech Stryjewski.
22///
23//===----------------------------------------------------------------------===//
24
25#ifndef LLVM_ANALYSIS_ALIASANALYSISEVALUATOR_H
26#define LLVM_ANALYSIS_ALIASANALYSISEVALUATOR_H
27
28#include "llvm/IR/Function.h"
29#include "llvm/IR/PassManager.h"
30
31namespace llvm {
32class AAResults;
33
34class AAEvaluator : public PassInfoMixin<AAEvaluator> {
35 int64_t FunctionCount;
36 int64_t NoAliasCount, MayAliasCount, PartialAliasCount, MustAliasCount;
37 int64_t NoModRefCount, ModCount, RefCount, ModRefCount;
38 int64_t MustCount, MustRefCount, MustModCount, MustModRefCount;
39
40public:
41 AAEvaluator()
42 : FunctionCount(), NoAliasCount(), MayAliasCount(), PartialAliasCount(),
43 MustAliasCount(), NoModRefCount(), ModCount(), RefCount(),
44 ModRefCount(), MustCount(), MustRefCount(), MustModCount(),
45 MustModRefCount() {}
46 AAEvaluator(AAEvaluator &&Arg)
47 : FunctionCount(Arg.FunctionCount), NoAliasCount(Arg.NoAliasCount),
48 MayAliasCount(Arg.MayAliasCount),
49 PartialAliasCount(Arg.PartialAliasCount),
50 MustAliasCount(Arg.MustAliasCount), NoModRefCount(Arg.NoModRefCount),
51 ModCount(Arg.ModCount), RefCount(Arg.RefCount),
52 ModRefCount(Arg.ModRefCount), MustCount(Arg.MustCount),
53 MustRefCount(Arg.MustRefCount), MustModCount(Arg.MustModCount),
54 MustModRefCount(Arg.MustModRefCount) {
55 Arg.FunctionCount = 0;
56 }
57 ~AAEvaluator();
58
Andrew Scullcdfcccc2018-10-05 20:58:37 +010059 /// Run the pass over the function.
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010060 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
61
62private:
63 // Allow the legacy pass to run this using an internal API.
64 friend class AAEvalLegacyPass;
65
66 void runInternal(Function &F, AAResults &AA);
67};
68
69/// Create a wrapper of the above for the legacy pass manager.
70FunctionPass *createAAEvalPass();
71
72}
73
74#endif