@@ -207,9 +207,10 @@ struct MultilibGroupSerialization {
207
207
208
208
struct MultilibSetSerialization {
209
209
llvm::VersionTuple MultilibVersion;
210
- std::vector<MultilibGroupSerialization> Groups;
211
- std::vector<MultilibSerialization> Multilibs;
212
- std::vector<MultilibSet::FlagMatcher> FlagMatchers;
210
+ SmallVector<MultilibGroupSerialization> Groups;
211
+ SmallVector<MultilibSerialization> Multilibs;
212
+ SmallVector<MultilibSet::FlagMatcher> FlagMatchers;
213
+ SmallVector<MultilibSet::CustomFlagDeclaration> CustomFlagDeclarations;
213
214
};
214
215
215
216
} // end anonymous namespace
@@ -261,11 +262,31 @@ template <> struct llvm::yaml::MappingTraits<MultilibSet::FlagMatcher> {
261
262
}
262
263
};
263
264
265
+ template <>
266
+ struct llvm ::yaml::MappingTraits<MultilibSet::CustomFlagDeclaration> {
267
+ static void mapping (llvm::yaml::IO &io,
268
+ MultilibSet::CustomFlagDeclaration &V) {
269
+ io.mapRequired (" Name" , V.Name );
270
+ io.mapRequired (" Values" , V.Values );
271
+ io.mapRequired (" Default" , V.DefaultValue );
272
+ }
273
+ static std::string validate (IO &io, MultilibSet::CustomFlagDeclaration &V) {
274
+ if (V.Name .empty ())
275
+ return " name required for custom flag" ;
276
+ if (V.Values .empty ())
277
+ return " at least one value is expected" ;
278
+ if (!llvm::is_contained (V.Values , V.DefaultValue ))
279
+ return " default value is not one of the possible listed values" ;
280
+ return {};
281
+ }
282
+ };
283
+
264
284
template <> struct llvm ::yaml::MappingTraits<MultilibSetSerialization> {
265
285
static void mapping (llvm::yaml::IO &io, MultilibSetSerialization &M) {
266
286
io.mapRequired (" MultilibVersion" , M.MultilibVersion );
267
287
io.mapRequired (" Variants" , M.Multilibs );
268
288
io.mapOptional (" Groups" , M.Groups );
289
+ io.mapOptional (" Flags" , M.CustomFlagDeclarations );
269
290
io.mapOptional (" Mappings" , M.FlagMatchers );
270
291
}
271
292
static std::string validate (IO &io, MultilibSetSerialization &M) {
@@ -297,6 +318,7 @@ template <> struct llvm::yaml::MappingTraits<MultilibSetSerialization> {
297
318
LLVM_YAML_IS_SEQUENCE_VECTOR (MultilibSerialization)
298
319
LLVM_YAML_IS_SEQUENCE_VECTOR(MultilibGroupSerialization)
299
320
LLVM_YAML_IS_SEQUENCE_VECTOR(MultilibSet::FlagMatcher)
321
+ LLVM_YAML_IS_SEQUENCE_VECTOR(MultilibSet::CustomFlagDeclaration)
300
322
301
323
llvm::ErrorOr<MultilibSet>
302
324
MultilibSet::parseYaml(llvm::MemoryBufferRef Input,
@@ -325,7 +347,8 @@ MultilibSet::parseYaml(llvm::MemoryBufferRef Input,
325
347
}
326
348
}
327
349
328
- return MultilibSet (std::move (Multilibs), std::move (MS.FlagMatchers ));
350
+ return MultilibSet (std::move (Multilibs), std::move (MS.FlagMatchers ),
351
+ std::move (MS.CustomFlagDeclarations ));
329
352
}
330
353
331
354
LLVM_DUMP_METHOD void MultilibSet::dump () const {
0 commit comments