File indexing completed on 2026-05-10 08:43:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef LLVM_ANALYSIS_SCOPEDNOALIASAA_H
0015 #define LLVM_ANALYSIS_SCOPEDNOALIASAA_H
0016
0017 #include "llvm/Analysis/AliasAnalysis.h"
0018 #include "llvm/IR/PassManager.h"
0019 #include "llvm/Pass.h"
0020 #include <memory>
0021
0022 namespace llvm {
0023
0024 class Function;
0025 class MDNode;
0026 class MemoryLocation;
0027
0028
0029 class ScopedNoAliasAAResult : public AAResultBase {
0030 public:
0031
0032
0033
0034 bool invalidate(Function &, const PreservedAnalyses &,
0035 FunctionAnalysisManager::Invalidator &) {
0036 return false;
0037 }
0038
0039 AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
0040 AAQueryInfo &AAQI, const Instruction *CtxI);
0041 ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
0042 AAQueryInfo &AAQI);
0043 ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
0044 AAQueryInfo &AAQI);
0045
0046 private:
0047 bool mayAliasInScopes(const MDNode *Scopes, const MDNode *NoAlias) const;
0048 };
0049
0050
0051 class ScopedNoAliasAA : public AnalysisInfoMixin<ScopedNoAliasAA> {
0052 friend AnalysisInfoMixin<ScopedNoAliasAA>;
0053
0054 static AnalysisKey Key;
0055
0056 public:
0057 using Result = ScopedNoAliasAAResult;
0058
0059 ScopedNoAliasAAResult run(Function &F, FunctionAnalysisManager &AM);
0060 };
0061
0062
0063 class ScopedNoAliasAAWrapperPass : public ImmutablePass {
0064 std::unique_ptr<ScopedNoAliasAAResult> Result;
0065
0066 public:
0067 static char ID;
0068
0069 ScopedNoAliasAAWrapperPass();
0070
0071 ScopedNoAliasAAResult &getResult() { return *Result; }
0072 const ScopedNoAliasAAResult &getResult() const { return *Result; }
0073
0074 bool doInitialization(Module &M) override;
0075 bool doFinalization(Module &M) override;
0076 void getAnalysisUsage(AnalysisUsage &AU) const override;
0077 };
0078
0079
0080
0081
0082
0083
0084 ImmutablePass *createScopedNoAliasAAWrapperPass();
0085
0086 }
0087
0088 #endif