Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.  
  29. namespace llvm {
  30. class AAResults;
  31. class Function;
  32. class FunctionPass;
  33.  
  34. class 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.  
  40. public:
  41.   AAEvaluator() = default;
  42.   AAEvaluator(AAEvaluator &&Arg)
  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.   }
  51.   ~AAEvaluator();
  52.  
  53.   /// Run the pass over the function.
  54.   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
  55.  
  56. private:
  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.
  64. FunctionPass *createAAEvalPass();
  65.  
  66. }
  67.  
  68. #endif
  69.