Skip to content

Commit 3e516b7

Browse files
committed
[Pass] Add variadic function templates for PreservedAnalyses
So it is possible to use `PA.preserve<Analysis1, Analysis2>();`
1 parent 148a7ae commit 3e516b7

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

llvm/include/llvm/IR/Analysis.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@ class PreservedAnalyses {
133133
return *this;
134134
}
135135

136+
/// Mark multiple analyses as preserved.
137+
template <typename... AnalysisTs> PreservedAnalyses &preserve() {
138+
return preserve(AnalysisTs::ID()...);
139+
}
140+
136141
/// Given an analysis's ID, mark the analysis as preserved, adding it
137142
/// to the set.
138143
PreservedAnalyses &preserve(AnalysisKey *ID) {
@@ -146,12 +151,23 @@ class PreservedAnalyses {
146151
return *this;
147152
}
148153

154+
/// Mark analyses as preserved using IDs.
155+
template <typename... AnalysisKeyPtrs>
156+
PreservedAnalyses &preserve(AnalysisKeyPtrs... IDs) {
157+
return preserve(IDs), ..., *this;
158+
}
159+
149160
/// Mark an analysis set as preserved.
150161
template <typename AnalysisSetT> PreservedAnalyses &preserveSet() {
151162
preserveSet(AnalysisSetT::ID());
152163
return *this;
153164
}
154165

166+
/// Mark analysis sets as preserved.
167+
template <typename AnalysisSetTs> PreservedAnalyses &preserveSet() {
168+
return preserveSet(AnalysisSetT::ID()...);
169+
}
170+
155171
/// Mark an analysis set as preserved using its ID.
156172
PreservedAnalyses &preserveSet(AnalysisSetKey *ID) {
157173
// If we're not already in the saturated 'all' state, add this set.
@@ -160,6 +176,12 @@ class PreservedAnalyses {
160176
return *this;
161177
}
162178

179+
/// Mark analysis sets as preserved using IDs.
180+
template <typename... AnalysisSetKeyPtrs>
181+
PreservedAnalyses &preserveSet(AnalysisSetKeyPtrs... IDs) {
182+
return preserveSet(IDs), ..., *this;
183+
}
184+
163185
/// Mark an analysis as abandoned.
164186
///
165187
/// An abandoned analysis is not preserved, even if it is nominally covered
@@ -172,6 +194,11 @@ class PreservedAnalyses {
172194
return *this;
173195
}
174196

197+
/// Mark analyses as abandoned.
198+
template <typename... AnalysisTs> PreservedAnalyses &abandon() {
199+
return abandon(AnalysisTs::ID()...);
200+
}
201+
175202
/// Mark an analysis as abandoned using its ID.
176203
///
177204
/// An abandoned analysis is not preserved, even if it is nominally covered
@@ -185,6 +212,12 @@ class PreservedAnalyses {
185212
return *this;
186213
}
187214

215+
/// Mark analyses as abandoned using IDs.
216+
template <typename... AnalysisKeyPtrs>
217+
PreservedAnalyses &abandon(AnalysisKeyPtrs... IDs) {
218+
return abandon(IDs), ..., *this;
219+
}
220+
188221
/// Intersect this set with another in place.
189222
///
190223
/// This is a mutating operation on this preserved set, removing all

0 commit comments

Comments
 (0)