@@ -31,6 +31,11 @@ namespace swift {
31
31
bool invalidate (llvm::Function &,
32
32
const llvm::PreservedAnalyses &) { return false ; }
33
33
34
+ bool invalidate (llvm::Function &, const llvm::PreservedAnalyses &,
35
+ llvm::FunctionAnalysisManager::Invalidator &) {
36
+ return false ;
37
+ }
38
+
34
39
using AAResultBase::getModRefInfo;
35
40
llvm::ModRefInfo getModRefInfo (const llvm::CallBase *Call,
36
41
const llvm::MemoryLocation &Loc) {
@@ -57,51 +62,97 @@ namespace swift {
57
62
void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
58
63
};
59
64
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
+
61
70
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 () {}
64
79
65
80
// / Returns the root of the RC-equivalent value for the given V.
66
81
llvm::Value *getSwiftRCIdentityRoot (llvm::Value *V);
82
+
67
83
private:
68
84
enum { MaxRecursionDepth = 16 };
69
- bool doInitialization (llvm::Module &M) override ;
70
85
71
- void getAnalysisUsage (llvm::AnalysisUsage &AU) const override {
72
- AU.setPreservesAll ();
73
- }
74
86
llvm::Value *stripPointerCasts (llvm::Value *Val);
75
87
llvm::Value *stripReferenceForwarding (llvm::Value *Val);
76
88
};
77
89
78
90
class SwiftARCOpt : public llvm ::FunctionPass {
79
91
// / Swift RC Identity analysis.
80
- SwiftRCIdentity * RC;
92
+ SwiftRCIdentity RC;
81
93
virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
82
94
virtual bool runOnFunction (llvm::Function &F) override ;
83
95
public:
84
96
static char ID;
85
97
SwiftARCOpt ();
86
98
};
87
99
100
+ struct SwiftARCOptPass : public llvm ::PassInfoMixin<SwiftARCOptPass> {
101
+ SwiftRCIdentity RC;
102
+
103
+ llvm::PreservedAnalyses run (llvm::Function &F,
104
+ llvm::FunctionAnalysisManager &AM);
105
+ };
106
+
88
107
class SwiftARCContract : public llvm ::FunctionPass {
89
108
// / Swift RC Identity analysis.
90
- SwiftRCIdentity * RC;
109
+ SwiftRCIdentity RC;
91
110
virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
92
111
virtual bool runOnFunction (llvm::Function &F) override ;
93
112
public:
94
113
static char ID;
95
114
SwiftARCContract () : llvm::FunctionPass(ID) {}
96
115
};
97
116
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
+
98
125
class InlineTreePrinter : public llvm ::ModulePass {
99
126
virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override ;
100
127
virtual bool runOnModule (llvm::Module &M) override ;
101
128
public:
102
129
static char ID;
103
130
InlineTreePrinter () : llvm::ModulePass(ID) {}
104
131
};
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
+ };
105
156
} // end namespace swift
106
157
107
158
#endif
0 commit comments