1 //===- TypeBasedAliasAnalysis.h - Type-Based Alias Analysis -----*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
10 /// This is the interface for a metadata-based TBAA. See the source file for
11 /// details on the algorithm.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_ANALYSIS_TYPEBASEDALIASANALYSIS_H
16 #define LLVM_ANALYSIS_TYPEBASEDALIASANALYSIS_H
18 #include "llvm/Analysis/AliasAnalysis.h"
19 #include "llvm/IR/InstrTypes.h"
20 #include "llvm/IR/PassManager.h"
21 #include "llvm/Pass.h"
30 /// A simple AA result that uses TBAA metadata to answer queries.
31 class TypeBasedAAResult
: public AAResultBase
<TypeBasedAAResult
> {
32 friend AAResultBase
<TypeBasedAAResult
>;
35 /// Handle invalidation events from the new pass manager.
37 /// By definition, this result is stateless and so remains valid.
38 bool invalidate(Function
&, const PreservedAnalyses
&,
39 FunctionAnalysisManager::Invalidator
&) {
43 AliasResult
alias(const MemoryLocation
&LocA
, const MemoryLocation
&LocB
,
45 bool pointsToConstantMemory(const MemoryLocation
&Loc
, AAQueryInfo
&AAQI
,
47 FunctionModRefBehavior
getModRefBehavior(const CallBase
*Call
);
48 FunctionModRefBehavior
getModRefBehavior(const Function
*F
);
49 ModRefInfo
getModRefInfo(const CallBase
*Call
, const MemoryLocation
&Loc
,
51 ModRefInfo
getModRefInfo(const CallBase
*Call1
, const CallBase
*Call2
,
55 bool Aliases(const MDNode
*A
, const MDNode
*B
) const;
56 bool PathAliases(const MDNode
*A
, const MDNode
*B
) const;
59 /// Analysis pass providing a never-invalidated alias analysis result.
60 class TypeBasedAA
: public AnalysisInfoMixin
<TypeBasedAA
> {
61 friend AnalysisInfoMixin
<TypeBasedAA
>;
63 static AnalysisKey Key
;
66 using Result
= TypeBasedAAResult
;
68 TypeBasedAAResult
run(Function
&F
, FunctionAnalysisManager
&AM
);
71 /// Legacy wrapper pass to provide the TypeBasedAAResult object.
72 class TypeBasedAAWrapperPass
: public ImmutablePass
{
73 std::unique_ptr
<TypeBasedAAResult
> Result
;
78 TypeBasedAAWrapperPass();
80 TypeBasedAAResult
&getResult() { return *Result
; }
81 const TypeBasedAAResult
&getResult() const { return *Result
; }
83 bool doInitialization(Module
&M
) override
;
84 bool doFinalization(Module
&M
) override
;
85 void getAnalysisUsage(AnalysisUsage
&AU
) const override
;
88 //===--------------------------------------------------------------------===//
90 // createTypeBasedAAWrapperPass - This pass implements metadata-based
91 // type-based alias analysis.
93 ImmutablePass
*createTypeBasedAAWrapperPass();
95 } // end namespace llvm
97 #endif // LLVM_ANALYSIS_TYPEBASEDALIASANALYSIS_H