@@ -31,6 +31,11 @@ namespace swift {
3131 bool invalidate (llvm::Function &,
3232 const llvm::PreservedAnalyses &) { return false ; }
3333
34+ bool invalidate (llvm::Function &, const llvm::PreservedAnalyses &,
35+ llvm::FunctionAnalysisManager::Invalidator &) {
36+ return false ;
37+ }
38+
3439 using AAResultBase::getModRefInfo;
3540 llvm::ModRefInfo getModRefInfo (const llvm::CallBase *Call,
3641 const llvm::MemoryLocation &Loc) {
@@ -57,51 +62,97 @@ namespace swift {
5762 void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
5863 };
5964
60- class SwiftRCIdentity : public llvm ::ImmutablePass {
65+ class SwiftAA : public llvm ::AnalysisInfoMixin<SwiftAA> {
66+ friend llvm::AnalysisInfoMixin<SwiftAA>;
67+
68+ static llvm::AnalysisKey Key;
69+
6170 public:
62- static char ID; // Class identification, replacement for typeinfo
63- SwiftRCIdentity () : ImmutablePass(ID) {}
71+ using Result = SwiftAAResult;
72+
73+ SwiftAAResult run (llvm::Function &F, llvm::FunctionAnalysisManager &AM);
74+ };
75+
76+ class SwiftRCIdentity {
77+ public:
78+ SwiftRCIdentity () {}
6479
6580 // / Returns the root of the RC-equivalent value for the given V.
6681 llvm::Value *getSwiftRCIdentityRoot (llvm::Value *V);
82+
6783 private:
6884 enum { MaxRecursionDepth = 16 };
69- bool doInitialization (llvm::Module &M) override ;
7085
71- void getAnalysisUsage (llvm::AnalysisUsage &AU) const override {
72- AU.setPreservesAll ();
73- }
7486 llvm::Value *stripPointerCasts (llvm::Value *Val);
7587 llvm::Value *stripReferenceForwarding (llvm::Value *Val);
7688 };
7789
7890 class SwiftARCOpt : public llvm ::FunctionPass {
7991 // / Swift RC Identity analysis.
80- SwiftRCIdentity * RC;
92+ SwiftRCIdentity RC;
8193 virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
8294 virtual bool runOnFunction (llvm::Function &F) override ;
8395 public:
8496 static char ID;
8597 SwiftARCOpt ();
8698 };
8799
100+ struct SwiftARCOptPass : public llvm ::PassInfoMixin<SwiftARCOptPass> {
101+ SwiftRCIdentity RC;
102+
103+ llvm::PreservedAnalyses run (llvm::Function &F,
104+ llvm::FunctionAnalysisManager &AM);
105+ };
106+
88107 class SwiftARCContract : public llvm ::FunctionPass {
89108 // / Swift RC Identity analysis.
90- SwiftRCIdentity * RC;
109+ SwiftRCIdentity RC;
91110 virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
92111 virtual bool runOnFunction (llvm::Function &F) override ;
93112 public:
94113 static char ID;
95114 SwiftARCContract () : llvm::FunctionPass(ID) {}
96115 };
97116
117+ struct SwiftARCContractPass
118+ : public llvm::PassInfoMixin<SwiftARCContractPass> {
119+ SwiftRCIdentity RC;
120+
121+ llvm::PreservedAnalyses run (llvm::Function &F,
122+ llvm::FunctionAnalysisManager &AM);
123+ };
124+
98125 class InlineTreePrinter : public llvm ::ModulePass {
99126 virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
100127 virtual bool runOnModule (llvm::Module &M) override ;
101128 public:
102129 static char ID;
103130 InlineTreePrinter () : llvm::ModulePass(ID) {}
104131 };
132+
133+ class SwiftMergeFunctionsPass
134+ : public llvm::PassInfoMixin<SwiftMergeFunctionsPass> {
135+ bool ptrAuthEnabled = false ;
136+ unsigned ptrAuthKey = 0 ;
137+
138+ public:
139+ SwiftMergeFunctionsPass (bool ptrAuthEnabled, unsigned ptrAuthKey)
140+ : ptrAuthEnabled(ptrAuthEnabled), ptrAuthKey(ptrAuthKey) {}
141+ llvm::PreservedAnalyses run (llvm::Module &M,
142+ llvm::ModuleAnalysisManager &AM);
143+ };
144+
145+ struct SwiftDbgAddrBlockSplitterPass
146+ : public llvm::PassInfoMixin<SwiftDbgAddrBlockSplitterPass> {
147+ llvm::PreservedAnalyses run (llvm::Function &F,
148+ llvm::FunctionAnalysisManager &AM);
149+ };
150+
151+ struct InlineTreePrinterPass
152+ : public llvm::PassInfoMixin<InlineTreePrinterPass> {
153+ llvm::PreservedAnalyses run (llvm::Module &M,
154+ llvm::ModuleAnalysisManager &AM);
155+ };
105156} // end namespace swift
106157
107158#endif
0 commit comments