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/Function.h" 28#include "llvm/IR/PassManager.h" 29 30namespace llvm { 31class AAResults; 32 33class AAEvaluator : public PassInfoMixin<AAEvaluator> { 34 int64_t FunctionCount; 35 int64_t NoAliasCount, MayAliasCount, PartialAliasCount, MustAliasCount; 36 int64_t NoModRefCount, ModCount, RefCount, ModRefCount; 37 int64_t MustCount, MustRefCount, MustModCount, MustModRefCount; 38 39public: 40 AAEvaluator() 41 : FunctionCount(), NoAliasCount(), MayAliasCount(), PartialAliasCount(), 42 MustAliasCount(), NoModRefCount(), ModCount(), RefCount(), 43 ModRefCount(), MustCount(), MustRefCount(), MustModCount(), 44 MustModRefCount() {} 45 AAEvaluator(AAEvaluator &&Arg) 46 : FunctionCount(Arg.FunctionCount), NoAliasCount(Arg.NoAliasCount), 47 MayAliasCount(Arg.MayAliasCount), 48 PartialAliasCount(Arg.PartialAliasCount), 49 MustAliasCount(Arg.MustAliasCount), NoModRefCount(Arg.NoModRefCount), 50 ModCount(Arg.ModCount), RefCount(Arg.RefCount), 51 ModRefCount(Arg.ModRefCount), MustCount(Arg.MustCount), 52 MustRefCount(Arg.MustRefCount), MustModCount(Arg.MustModCount), 53 MustModRefCount(Arg.MustModRefCount) { 54 Arg.FunctionCount = 0; 55 } 56 ~AAEvaluator(); 57 58 /// Run the pass over the function. 59 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 60 61private: 62 // Allow the legacy pass to run this using an internal API. 63 friend class AAEvalLegacyPass; 64 65 void runInternal(Function &F, AAResults &AA); 66}; 67 68/// Create a wrapper of the above for the legacy pass manager. 69FunctionPass *createAAEvalPass(); 70 71} 72 73#endif 74