File indexing completed on 2026-05-10 08:43:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
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
0026
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
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
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
0072 FunctionPass *createSCEVAAWrapperPass();
0073
0074 }
0075
0076 #endif