LLVM 18.0.0git
AliasAnalysisEvaluator.h
Go to the documentation of this file.
1//===- AliasAnalysisEvaluator.h - Alias Analysis Accuracy Evaluator -------===//
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///
10/// This file implements a simple N^2 alias analysis accuracy evaluator. The
11/// analysis result is a set of statistics of how many times the AA
12/// infrastructure provides each kind of alias result and mod/ref result when
13/// queried with all pairs of pointers in the function.
14///
15/// It can be used to evaluate a change in an alias analysis implementation,
16/// algorithm, or the AA pipeline infrastructure itself. It acts like a stable
17/// and easily tested consumer of all AA information exposed.
18///
19/// This is inspired and adapted from code by: Naveen Neelakantam, Francesco
20/// Spadini, and Wojciech Stryjewski.
21///
22//===----------------------------------------------------------------------===//
23
24#ifndef LLVM_ANALYSIS_ALIASANALYSISEVALUATOR_H
25#define LLVM_ANALYSIS_ALIASANALYSISEVALUATOR_H
26
27#include "llvm/IR/PassManager.h"
28
29namespace llvm {
30class AAResults;
31class Function;
32class FunctionPass;
33
34class AAEvaluator : public PassInfoMixin<AAEvaluator> {
35 int64_t FunctionCount = 0;
36 int64_t NoAliasCount = 0, MayAliasCount = 0, PartialAliasCount = 0;
37 int64_t MustAliasCount = 0;
38 int64_t NoModRefCount = 0, ModCount = 0, RefCount = 0, ModRefCount = 0;
39
40public:
41 AAEvaluator() = default;
43 : FunctionCount(Arg.FunctionCount), NoAliasCount(Arg.NoAliasCount),
44 MayAliasCount(Arg.MayAliasCount),
45 PartialAliasCount(Arg.PartialAliasCount),
46 MustAliasCount(Arg.MustAliasCount), NoModRefCount(Arg.NoModRefCount),
47 ModCount(Arg.ModCount), RefCount(Arg.RefCount),
48 ModRefCount(Arg.ModRefCount) {
49 Arg.FunctionCount = 0;
50 }
52
53 /// Run the pass over the function.
55
56private:
57 // Allow the legacy pass to run this using an internal API.
58 friend class AAEvalLegacyPass;
59
60 void runInternal(Function &F, AAResults &AA);
61};
62
63/// Create a wrapper of the above for the legacy pass manager.
65
66}
67
68#endif
#define F(x, y, z)
Definition: MD5.cpp:55
This header defines various interfaces for pass management in LLVM.
AAEvaluator()=default
AAEvaluator(AAEvaluator &&Arg)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Run the pass over the function.
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:620
FunctionPass class - This class is used to implement most global optimizations.
Definition: Pass.h:311
A set of analyses that are preserved following a run of a transformation pass.
Definition: PassManager.h:152
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
FunctionPass * createAAEvalPass()
Create a wrapper of the above for the legacy pass manager.
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition: PassManager.h:371