MCPcopy Create free account
hub / github.com/KhronosGroup/SPIRV-Tools / CombineVariantDefs

Function CombineVariantDefs

source/link/fnvar.cpp:303–329  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

301}
302
303uint32_t CombineVariantDefs(const std::vector<VariantDef>& variant_defs,
304 const std::vector<size_t> var_ids,
305 IRContext* context,
306 std::map<std::vector<size_t>, uint32_t>& cache) {
307 assert(var_ids.size() <= variant_defs.size());
308 uint32_t spec_const_comb_id = 0;
309 if (var_ids.size() != variant_defs.size()) {
310 // if not used by all variants
311 if (cache.find(var_ids) == cache.end()) {
312 // cache variant combinations
313 std::vector<uint32_t> spec_const_ids;
314 for (const auto& var_id : var_ids) {
315 const auto var_name = variant_defs[var_id].GetName();
316 const auto var_spec_id =
317 FindSpecConstByName(context->module(), var_name);
318 spec_const_ids.push_back(var_spec_id);
319 }
320 spec_const_comb_id =
321 CombineIds(context, spec_const_ids, spv::Op::OpLogicalOr);
322 assert(spec_const_comb_id != 0);
323 cache.insert({var_ids, spec_const_comb_id});
324 } else {
325 spec_const_comb_id = cache[var_ids];
326 }
327 }
328 return spec_const_comb_id;
329}
330
331bool strToInt(std::string s, uint32_t* x) {
332 for (const char& c : s) {

Callers 1

CombineInstructionsMethod · 0.85

Calls 8

FindSpecConstByNameFunction · 0.85
CombineIdsFunction · 0.85
sizeMethod · 0.45
endMethod · 0.45
GetNameMethod · 0.45
moduleMethod · 0.45
push_backMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected