LCOV - code coverage report
Current view: top level - include/llvm/Analysis - ScalarEvolutionAliasAnalysis.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 4 4 100.0 %
Date: 2017-09-14 15:23:50 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- ScalarEvolutionAliasAnalysis.h - SCEV-based AA -----------*- C++ -*-===//
       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             : /// This is the interface for a SCEV-based alias analysis.
      11             : ///
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #ifndef LLVM_ANALYSIS_SCALAREVOLUTIONALIASANALYSIS_H
      15             : #define LLVM_ANALYSIS_SCALAREVOLUTIONALIASANALYSIS_H
      16             : 
      17             : #include "llvm/Analysis/AliasAnalysis.h"
      18             : #include "llvm/Analysis/ScalarEvolutionExpressions.h"
      19             : #include "llvm/IR/Function.h"
      20             : #include "llvm/IR/Module.h"
      21             : #include "llvm/Pass.h"
      22             : 
      23             : namespace llvm {
      24             : 
      25             : /// A simple alias analysis implementation that uses ScalarEvolution to answer
      26             : /// queries.
      27             : class SCEVAAResult : public AAResultBase<SCEVAAResult> {
      28             :   ScalarEvolution &SE;
      29             : 
      30             : public:
      31          19 :   explicit SCEVAAResult(ScalarEvolution &SE) : AAResultBase(), SE(SE) {}
      32          18 :   SCEVAAResult(SCEVAAResult &&Arg) : AAResultBase(std::move(Arg)), SE(Arg.SE) {}
      33             : 
      34             :   AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
      35             : 
      36             : private:
      37             :   Value *GetBaseValue(const SCEV *S);
      38             : };
      39             : 
      40             : /// Analysis pass providing a never-invalidated alias analysis result.
      41             : class SCEVAA : public AnalysisInfoMixin<SCEVAA> {
      42             :   friend AnalysisInfoMixin<SCEVAA>;
      43             :   static AnalysisKey Key;
      44             : 
      45             : public:
      46             :   typedef SCEVAAResult Result;
      47             : 
      48             :   SCEVAAResult run(Function &F, FunctionAnalysisManager &AM);
      49             : };
      50             : 
      51             : /// Legacy wrapper pass to provide the SCEVAAResult object.
      52          32 : class SCEVAAWrapperPass : public FunctionPass {
      53             :   std::unique_ptr<SCEVAAResult> Result;
      54             : 
      55             : public:
      56             :   static char ID;
      57             : 
      58             :   SCEVAAWrapperPass();
      59             : 
      60          14 :   SCEVAAResult &getResult() { return *Result; }
      61             :   const SCEVAAResult &getResult() const { return *Result; }
      62             : 
      63             :   bool runOnFunction(Function &F) override;
      64             :   void getAnalysisUsage(AnalysisUsage &AU) const override;
      65             : };
      66             : 
      67             : /// Creates an instance of \c SCEVAAWrapperPass.
      68             : FunctionPass *createSCEVAAWrapperPass();
      69             : 
      70             : }
      71             : 
      72             : #endif

Generated by: LCOV version 1.13