Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:17

0001 //===- ScalarEvolutionAliasAnalysis.h - SCEV-based AA -----------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 /// \file
0009 /// This is the interface for a SCEV-based alias analysis.
0010 ///
0011 //===----------------------------------------------------------------------===//
0012 
0013 #ifndef LLVM_ANALYSIS_SCALAREVOLUTIONALIASANALYSIS_H
0014 #define LLVM_ANALYSIS_SCALAREVOLUTIONALIASANALYSIS_H
0015 
0016 #include "llvm/Analysis/AliasAnalysis.h"
0017 #include "llvm/Pass.h"
0018 
0019 namespace llvm {
0020 
0021 class Function;
0022 class ScalarEvolution;
0023 class SCEV;
0024 
0025 /// A simple alias analysis implementation that uses ScalarEvolution to answer
0026 /// queries.
0027 class SCEVAAResult : public AAResultBase {
0028   ScalarEvolution &SE;
0029 
0030 public:
0031   explicit SCEVAAResult(ScalarEvolution &SE) : SE(SE) {}
0032   SCEVAAResult(SCEVAAResult &&Arg) : AAResultBase(std::move(Arg)), SE(Arg.SE) {}
0033 
0034   AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
0035                     AAQueryInfo &AAQI, const Instruction *CtxI);
0036 
0037   bool invalidate(Function &F, const PreservedAnalyses &PA,
0038                   FunctionAnalysisManager::Invalidator &Inv);
0039 
0040 private:
0041   Value *GetBaseValue(const SCEV *S);
0042 };
0043 
0044 /// Analysis pass providing a never-invalidated alias analysis result.
0045 class SCEVAA : public AnalysisInfoMixin<SCEVAA> {
0046   friend AnalysisInfoMixin<SCEVAA>;
0047   static AnalysisKey Key;
0048 
0049 public:
0050   typedef SCEVAAResult Result;
0051 
0052   SCEVAAResult run(Function &F, FunctionAnalysisManager &AM);
0053 };
0054 
0055 /// Legacy wrapper pass to provide the SCEVAAResult object.
0056 class SCEVAAWrapperPass : public FunctionPass {
0057   std::unique_ptr<SCEVAAResult> Result;
0058 
0059 public:
0060   static char ID;
0061 
0062   SCEVAAWrapperPass();
0063 
0064   SCEVAAResult &getResult() { return *Result; }
0065   const SCEVAAResult &getResult() const { return *Result; }
0066 
0067   bool runOnFunction(Function &F) override;
0068   void getAnalysisUsage(AnalysisUsage &AU) const override;
0069 };
0070 
0071 /// Creates an instance of \c SCEVAAWrapperPass.
0072 FunctionPass *createSCEVAAWrapperPass();
0073 
0074 }
0075 
0076 #endif