; LLVM IR from Try/Tempest :: Engine/thirdparty/spirv_cross (spirv_glsl)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.180 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.185 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.286 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.512 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.514 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.543 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.555 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.708 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.923 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1345 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1527 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1567 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1581 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1582 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1583 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1584 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1585 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1586 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1587 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1588 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1589 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1590 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1591 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1592 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1593 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1594 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1595 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1596 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1597 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1598 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1599 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1600 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1601 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1602 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1603 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1604 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1605 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1606 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1607 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1608 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1609 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare ptr @__cxa_allocate_exception(i64)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #1 align 2

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) #4 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_physical_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler35is_physical_pointer_to_buffer_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) #6

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i1, align 1
  %11 = alloca i32, align 4
  %12 = alloca %"class.spirv_cross::TypedID.280", align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.spirv_cross::TypedID.280", align 4
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::allocator.71", align 1
  %22 = alloca %"class.std::allocator.71", align 1
  %23 = alloca %"class.std::allocator.71", align 1
  %24 = alloca %"class.std::allocator.71", align 1
  %25 = alloca %"class.std::allocator.71", align 1
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator.71", align 1
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::allocator.71", align 1
  %30 = alloca %"class.std::allocator.71", align 1
  %31 = alloca %"class.std::allocator.71", align 1
  %32 = alloca %"class.std::allocator.71", align 1
  %33 = alloca %"class.std::allocator.71", align 1
  %34 = alloca %"class.std::allocator.71", align 1
  %35 = alloca %"class.std::allocator.71", align 1
  %36 = alloca %"class.std::allocator.71", align 1
  %37 = alloca %"class.std::allocator.71", align 1
  %38 = alloca %"class.std::allocator.71", align 1
  %39 = alloca %"class.std::allocator.71", align 1
  %40 = alloca %"class.std::allocator.71", align 1
  %41 = alloca %"class.std::allocator.71", align 1
  %42 = alloca %"class.std::allocator.71", align 1
  %43 = alloca %"class.std::allocator.71", align 1
  %44 = alloca %"class.std::allocator.71", align 1
  %45 = alloca %"class.std::allocator.71", align 1
  %46 = alloca %"class.std::allocator.71", align 1
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !9
  %47 = load ptr, ptr %6, align 8
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  %49 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_physical_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %47, ptr noundef nonnull align 8 dereferenceable(336) %48)
  br i1 %49, label %50, label %147

50:                                               ; preds = %4
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler35is_physical_pointer_to_buffer_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %47, ptr noundef nonnull align 8 dereferenceable(336) %51)
  br i1 %52, label %147, label %53

53:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %47, ptr noundef nonnull align 8 dereferenceable(336) %54)
  store ptr %55, ptr %9, align 8, !tbaa !5
  store i1 false, ptr %10, align 1
  %56 = load ptr, ptr %9, align 8, !tbaa !5
  %57 = load ptr, ptr %47, align 8, !tbaa !11
  %58 = getelementptr inbounds ptr, ptr %57, i64 19
  %59 = load ptr, ptr %58, align 8
  call void %59(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %47, ptr noundef nonnull align 8 dereferenceable(336) %56, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %60, i32 0, i32 16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %61)
          to label %62 unwind label %84

62:                                               ; preds = %53
  %63 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %12, i32 0, i32 0
  %64 = load i32, ptr %63, align 4
  %65 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %47, i32 %64, i32 noundef 6)
          to label %66 unwind label %84

66:                                               ; preds = %62
  store i32 %65, ptr %11, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %130, %66
  %68 = load ptr, ptr %9, align 8, !tbaa !5
  %69 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %47, ptr noundef nonnull align 8 dereferenceable(336) %68)
          to label %70 unwind label %84

70:                                               ; preds = %67
  br i1 %69, label %71, label %140

71:                                               ; preds = %70
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %72, i32 0, i32 7
  %74 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK11spirv_cross10VectorViewIbE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %73) #7
  %75 = load i8, ptr %74, align 1, !tbaa !13, !range !15, !noundef !16
  %76 = trunc i8 %75 to i1
  br i1 %76, label %77, label %97

77:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #7
  %78 = load ptr, ptr %7, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %78, i32 0, i32 6
  %80 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #7
  invoke void @_ZN11spirv_cross4joinIJRKjRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 4 dereferenceable(4) %80, ptr noundef nonnull align 1 dereferenceable(2) @.str.286)
          to label %81 unwind label %88

81:                                               ; preds = %77
  %82 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %83 unwind label %92

83:                                               ; preds = %81
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  br label %113

84:                                               ; preds = %140, %128, %124, %120, %117, %67, %62, %53
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %13, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %14, align 4
  br label %144

88:                                               ; preds = %77
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %13, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %14, align 4
  br label %96

92:                                               ; preds = %81
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %13, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %96

96:                                               ; preds = %92, %88
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #7
  br label %144

97:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #7
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %98, i32 0, i32 6
  %100 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %99) #7
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRKjRA2_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 1 dereferenceable(3) @.str.1581, ptr noundef nonnull align 4 dereferenceable(4) %100, ptr noundef nonnull align 1 dereferenceable(2) @.str.286)
          to label %101 unwind label %104

101:                                              ; preds = %97
  %102 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %103 unwind label %108

103:                                              ; preds = %101
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %113

104:                                              ; preds = %97
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %13, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %14, align 4
  br label %112

108:                                              ; preds = %101
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %13, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %112

112:                                              ; preds = %108, %104
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %144

113:                                              ; preds = %103, %83
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #7
  %114 = load i32, ptr %11, align 4, !tbaa !9
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, i32 noundef %114) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef @.str.1582, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %115 unwind label %131

115:                                              ; preds = %113
  %116 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %117 unwind label %135

117:                                              ; preds = %115
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #7
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %118, i32 0, i32 16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 4 dereferenceable(4) %119)
          to label %120 unwind label %84

120:                                              ; preds = %117
  %121 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %19, i32 0, i32 0
  %122 = load i32, ptr %121, align 4
  %123 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %47, i32 %122, i32 noundef 6)
          to label %124 unwind label %84

124:                                              ; preds = %120
  store i32 %123, ptr %11, align 4, !tbaa !9
  %125 = load ptr, ptr %9, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %125, i32 0, i32 16
  %127 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %126)
          to label %128 unwind label %84

128:                                              ; preds = %124
  %129 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %47, i32 noundef %127)
          to label %130 unwind label %84

130:                                              ; preds = %128
  store ptr %129, ptr %9, align 8, !tbaa !5
  br label %67, !llvm.loop !17

131:                                              ; preds = %113
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %13, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %14, align 4
  br label %139

135:                                              ; preds = %115
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %13, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %139

139:                                              ; preds = %135, %131
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #7
  br label %144

140:                                              ; preds = %70
  %141 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1583)
          to label %142 unwind label %84

142:                                              ; preds = %140
  store i1 true, ptr %10, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  %143 = load i1, ptr %10, align 1
  br i1 %143, label %146, label %145

144:                                              ; preds = %139, %112, %96, %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %545

145:                                              ; preds = %142
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br label %146

146:                                              ; preds = %145, %142
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %544

147:                                              ; preds = %50, %4
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %148, i32 0, i32 2
  %150 = load i32, ptr %149, align 8, !tbaa !19
  switch i32 %150, label %215 [
    i32 15, label %151
    i32 16, label %175
    i32 17, label %175
    i32 18, label %181
    i32 19, label %192
    i32 20, label %203
    i32 1, label %209
  ]

151:                                              ; preds = %147
  %152 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %153 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %152, i32 0, i32 22
  %154 = load i8, ptr %153, align 1, !tbaa !46, !range !15, !noundef !16
  %155 = trunc i8 %154 to i1
  br i1 %155, label %156, label %168

156:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #7
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %157, i32 0, i32 1
  %159 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %158)
  %160 = load ptr, ptr %47, align 8, !tbaa !11
  %161 = getelementptr inbounds ptr, ptr %160, i64 6
  %162 = load ptr, ptr %161, align 8
  call void %162(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(3176) %47, i32 noundef %159, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.180, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %163 unwind label %164

163:                                              ; preds = %156
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  br label %544

164:                                              ; preds = %156
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %13, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  br label %545

168:                                              ; preds = %151
  %169 = load ptr, ptr %7, align 8, !tbaa !5
  %170 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %169, i32 0, i32 1
  %171 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %170)
  %172 = load ptr, ptr %47, align 8, !tbaa !11
  %173 = getelementptr inbounds ptr, ptr %172, i64 6
  %174 = load ptr, ptr %173, align 8
  call void %174(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(3176) %47, i32 noundef %171, i1 noundef zeroext true)
  br label %544

175:                                              ; preds = %147, %147
  %176 = load ptr, ptr %7, align 8, !tbaa !5
  %177 = load i32, ptr %8, align 4, !tbaa !9
  %178 = load ptr, ptr %47, align 8, !tbaa !11
  %179 = getelementptr inbounds ptr, ptr %178, i64 23
  %180 = load ptr, ptr %179, align 8
  call void %180(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %47, ptr noundef nonnull align 8 dereferenceable(336) %176, i32 noundef %177, i1 noundef zeroext false)
  br label %544

181:                                              ; preds = %147
  %182 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %47, i32 0, i32 25
  %183 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %182, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %184 = icmp ne i64 %183, 0
  %185 = zext i1 %184 to i64
  %186 = select i1 %184, ptr @.str.1584, ptr @.str.1567
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %186, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %187 unwind label %188

187:                                              ; preds = %181
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  br label %544

188:                                              ; preds = %181
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %13, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  br label %545

192:                                              ; preds = %147
  %193 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 36
  %194 = load i8, ptr %193, align 4, !tbaa !141, !range !15, !noundef !16
  %195 = trunc i8 %194 to i1
  %196 = zext i1 %195 to i64
  %197 = select i1 %195, ptr @.str.1527, ptr @.str.1585
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %197, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %198 unwind label %199

198:                                              ; preds = %192
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  br label %544

199:                                              ; preds = %192
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %13, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  br label %545

203:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1586, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %204 unwind label %205

204:                                              ; preds = %203
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  br label %544

205:                                              ; preds = %203
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %13, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  br label %545

209:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.708, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %210 unwind label %211

210:                                              ; preds = %209
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  br label %544

211:                                              ; preds = %209
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %13, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  br label %545

215:                                              ; preds = %147
  br label %216

216:                                              ; preds = %215
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %217, i32 0, i32 2
  %219 = load i32, ptr %218, align 8, !tbaa !19
  %220 = icmp eq i32 %219, 8
  br i1 %220, label %221, label %250

221:                                              ; preds = %216
  %222 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %47)
  br i1 %222, label %223, label %250

223:                                              ; preds = %221
  %224 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 9
  %225 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %224, i32 0, i32 1
  %226 = load i8, ptr %225, align 4, !tbaa !142, !range !15, !noundef !16
  %227 = trunc i8 %226 to i1
  br i1 %227, label %228, label %237

228:                                              ; preds = %223
  %229 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %230 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %229, i32 0, i32 8
  %231 = load ptr, ptr %230, align 8, !tbaa !143
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %231, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %232 unwind label %233

232:                                              ; preds = %228
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  br label %544

233:                                              ; preds = %228
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %13, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  br label %545

237:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %238 unwind label %240

238:                                              ; preds = %237
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %47, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %239 unwind label %244

239:                                              ; preds = %238
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %249

240:                                              ; preds = %237
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %13, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %14, align 4
  br label %248

244:                                              ; preds = %238
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %13, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %248

248:                                              ; preds = %244, %240
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %545

249:                                              ; preds = %239
  br label %250

250:                                              ; preds = %249, %221, %216
  %251 = load ptr, ptr %7, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %251, i32 0, i32 2
  %253 = load i32, ptr %252, align 8, !tbaa !19
  %254 = icmp eq i32 %253, 11
  br i1 %254, label %255, label %296

255:                                              ; preds = %250
  %256 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 9
  %257 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %256, i32 0, i32 1
  %258 = load i8, ptr %257, align 4, !tbaa !142, !range !15, !noundef !16
  %259 = trunc i8 %258 to i1
  br i1 %259, label %260, label %272

260:                                              ; preds = %255
  %261 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 9
  %262 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %261, i32 0, i32 0
  %263 = load i32, ptr %262, align 4, !tbaa !144
  %264 = icmp ult i32 %263, 310
  br i1 %264, label %265, label %272

265:                                              ; preds = %260
  %266 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %266, ptr noundef @.str.1587)
          to label %267 unwind label %268

267:                                              ; preds = %265
  call void @__cxa_throw(ptr %266, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
  unreachable

268:                                              ; preds = %265
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %13, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %14, align 4
  call void @__cxa_free_exception(ptr %266) #7
  br label %545

272:                                              ; preds = %260, %255
  %273 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 9
  %274 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %273, i32 0, i32 1
  %275 = load i8, ptr %274, align 4, !tbaa !142, !range !15, !noundef !16
  %276 = trunc i8 %275 to i1
  br i1 %276, label %294, label %277

277:                                              ; preds = %272
  %278 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 9
  %279 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %278, i32 0, i32 0
  %280 = load i32, ptr %279, align 4, !tbaa !144
  %281 = icmp ult i32 %280, 420
  br i1 %281, label %282, label %294

282:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.1588, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %283 unwind label %285

283:                                              ; preds = %282
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %47, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %284 unwind label %289

284:                                              ; preds = %283
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  br label %294

285:                                              ; preds = %282
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %13, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %14, align 4
  br label %293

289:                                              ; preds = %283
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %13, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br label %293

293:                                              ; preds = %289, %285
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  br label %545

294:                                              ; preds = %284, %277, %272
  br label %295

295:                                              ; preds = %294
  br label %296

296:                                              ; preds = %295, %250
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %297, i32 0, i32 4
  %299 = load i32, ptr %298, align 8, !tbaa !145
  %300 = icmp eq i32 %299, 1
  br i1 %300, label %301, label %412

301:                                              ; preds = %296
  %302 = load ptr, ptr %7, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %302, i32 0, i32 5
  %304 = load i32, ptr %303, align 4, !tbaa !146
  %305 = icmp eq i32 %304, 1
  br i1 %305, label %306, label %412

306:                                              ; preds = %301
  %307 = load ptr, ptr %7, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %307, i32 0, i32 2
  %309 = load i32, ptr %308, align 8, !tbaa !19
  switch i32 %309, label %406 [
    i32 2, label %310
    i32 3, label %316
    i32 4, label %325
    i32 5, label %334
    i32 6, label %343
    i32 7, label %352
    i32 8, label %361
    i32 11, label %370
    i32 12, label %376
    i32 13, label %382
    i32 14, label %388
    i32 9, label %394
    i32 10, label %400
  ]

310:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.514, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %311 unwind label %312

311:                                              ; preds = %310
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  br label %544

312:                                              ; preds = %310
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %13, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  br label %545

316:                                              ; preds = %306
  %317 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %318 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %317, i32 0, i32 10
  %319 = load ptr, ptr %318, align 8, !tbaa !147
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %319, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %320 unwind label %321

320:                                              ; preds = %316
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  br label %544

321:                                              ; preds = %316
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %13, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  br label %545

325:                                              ; preds = %306
  %326 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %327 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %326, i32 0, i32 11
  %328 = load ptr, ptr %327, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %328, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %329 unwind label %330

329:                                              ; preds = %325
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #7
  br label %544

330:                                              ; preds = %325
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %13, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #7
  br label %545

334:                                              ; preds = %306
  %335 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %336 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %335, i32 0, i32 12
  %337 = load ptr, ptr %336, align 8, !tbaa !149
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %337, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %338 unwind label %339

338:                                              ; preds = %334
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #7
  br label %544

339:                                              ; preds = %334
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %13, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #7
  br label %545

343:                                              ; preds = %306
  %344 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %345 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %344, i32 0, i32 13
  %346 = load ptr, ptr %345, align 8, !tbaa !150
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %346, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %347 unwind label %348

347:                                              ; preds = %343
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %544

348:                                              ; preds = %343
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %13, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %545

352:                                              ; preds = %306
  %353 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %354 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %353, i32 0, i32 8
  %355 = load ptr, ptr %354, align 8, !tbaa !143
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %355, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %356 unwind label %357

356:                                              ; preds = %352
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  br label %544

357:                                              ; preds = %352
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %13, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  br label %545

361:                                              ; preds = %306
  %362 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %47, i32 0, i32 21
  %363 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %362, i32 0, i32 9
  %364 = load ptr, ptr %363, align 8, !tbaa !151
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %364, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %365 unwind label %366

365:                                              ; preds = %361
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  br label %544

366:                                              ; preds = %361
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %13, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  br label %545

370:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.512, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %371 unwind label %372

371:                                              ; preds = %370
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  br label %544

372:                                              ; preds = %370
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %13, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  br label %545

376:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.923, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %377 unwind label %378

377:                                              ; preds = %376
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #7
  br label %544

378:                                              ; preds = %376
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %13, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #7
  br label %545

382:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.555, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %383 unwind label %384

383:                                              ; preds = %382
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #7
  br label %544

384:                                              ; preds = %382
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %13, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #7
  br label %545

388:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.543, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %389 unwind label %390

389:                                              ; preds = %388
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  br label %544

390:                                              ; preds = %388
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %13, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  br label %545

394:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1589, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %395 unwind label %396

395:                                              ; preds = %394
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #7
  br label %544

396:                                              ; preds = %394
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %13, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #7
  br label %545

400:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1590, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %401 unwind label %402

401:                                              ; preds = %400
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #7
  br label %544

402:                                              ; preds = %400
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %13, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #7
  br label %545

406:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %407 unwind label %408

407:                                              ; preds = %406
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  br label %544

408:                                              ; preds = %406
  %409 = landingpad { ptr, i32 }
          cleanup
  %410 = extractvalue { ptr, i32 } %409, 0
  store ptr %410, ptr %13, align 8
  %411 = extractvalue { ptr, i32 } %409, 1
  store i32 %411, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  br label %545

412:                                              ; preds = %301, %296
  %413 = load ptr, ptr %7, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %413, i32 0, i32 4
  %415 = load i32, ptr %414, align 8, !tbaa !145
  %416 = icmp ugt i32 %415, 1
  br i1 %416, label %417, label %468

417:                                              ; preds = %412
  %418 = load ptr, ptr %7, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %418, i32 0, i32 5
  %420 = load i32, ptr %419, align 4, !tbaa !146
  %421 = icmp eq i32 %420, 1
  br i1 %421, label %422, label %468

422:                                              ; preds = %417
  %423 = load ptr, ptr %7, align 8, !tbaa !5
  %424 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %423, i32 0, i32 2
  %425 = load i32, ptr %424, align 8, !tbaa !19
  switch i32 %425, label %462 [
    i32 2, label %426
    i32 3, label %429
    i32 4, label %432
    i32 5, label %435
    i32 6, label %438
    i32 7, label %441
    i32 8, label %444
    i32 12, label %447
    i32 13, label %450
    i32 14, label %453
    i32 9, label %456
    i32 10, label %459
  ]

426:                                              ; preds = %422
  %427 = load ptr, ptr %7, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %427, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1592, ptr noundef nonnull align 4 dereferenceable(4) %428)
  br label %544

429:                                              ; preds = %422
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %430, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA6_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1593, ptr noundef nonnull align 4 dereferenceable(4) %431)
  br label %544

432:                                              ; preds = %422
  %433 = load ptr, ptr %7, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %433, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA6_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1594, ptr noundef nonnull align 4 dereferenceable(4) %434)
  br label %544

435:                                              ; preds = %422
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %436, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1595, ptr noundef nonnull align 4 dereferenceable(4) %437)
  br label %544

438:                                              ; preds = %422
  %439 = load ptr, ptr %7, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %439, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1596, ptr noundef nonnull align 4 dereferenceable(4) %440)
  br label %544

441:                                              ; preds = %422
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %442, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1597, ptr noundef nonnull align 4 dereferenceable(4) %443)
  br label %544

444:                                              ; preds = %422
  %445 = load ptr, ptr %7, align 8, !tbaa !5
  %446 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %445, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1598, ptr noundef nonnull align 4 dereferenceable(4) %446)
  br label %544

447:                                              ; preds = %422
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %448, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1599, ptr noundef nonnull align 4 dereferenceable(4) %449)
  br label %544

450:                                              ; preds = %422
  %451 = load ptr, ptr %7, align 8, !tbaa !5
  %452 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %451, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA4_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(4) @.str.1600, ptr noundef nonnull align 4 dereferenceable(4) %452)
  br label %544

453:                                              ; preds = %422
  %454 = load ptr, ptr %7, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %454, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1601, ptr noundef nonnull align 4 dereferenceable(4) %455)
  br label %544

456:                                              ; preds = %422
  %457 = load ptr, ptr %7, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %457, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1602, ptr noundef nonnull align 4 dereferenceable(4) %458)
  br label %544

459:                                              ; preds = %422
  %460 = load ptr, ptr %7, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %460, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1603, ptr noundef nonnull align 4 dereferenceable(4) %461)
  br label %544

462:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %44)
          to label %463 unwind label %464

463:                                              ; preds = %462
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  br label %544

464:                                              ; preds = %462
  %465 = landingpad { ptr, i32 }
          cleanup
  %466 = extractvalue { ptr, i32 } %465, 0
  store ptr %466, ptr %13, align 8
  %467 = extractvalue { ptr, i32 } %465, 1
  store i32 %467, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  br label %545

468:                                              ; preds = %417, %412
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %469, i32 0, i32 4
  %471 = load i32, ptr %470, align 8, !tbaa !145
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %472, i32 0, i32 5
  %474 = load i32, ptr %473, align 4, !tbaa !146
  %475 = icmp eq i32 %471, %474
  br i1 %475, label %476, label %504

476:                                              ; preds = %468
  %477 = load ptr, ptr %7, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %477, i32 0, i32 2
  %479 = load i32, ptr %478, align 8, !tbaa !19
  switch i32 %479, label %498 [
    i32 2, label %480
    i32 7, label %483
    i32 8, label %486
    i32 12, label %489
    i32 13, label %492
    i32 14, label %495
  ]

480:                                              ; preds = %476
  %481 = load ptr, ptr %7, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %481, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1604, ptr noundef nonnull align 4 dereferenceable(4) %482)
  br label %544

483:                                              ; preds = %476
  %484 = load ptr, ptr %7, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %484, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1605, ptr noundef nonnull align 4 dereferenceable(4) %485)
  br label %544

486:                                              ; preds = %476
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %487, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1606, ptr noundef nonnull align 4 dereferenceable(4) %488)
  br label %544

489:                                              ; preds = %476
  %490 = load ptr, ptr %7, align 8, !tbaa !5
  %491 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %490, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1607, ptr noundef nonnull align 4 dereferenceable(4) %491)
  br label %544

492:                                              ; preds = %476
  %493 = load ptr, ptr %7, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %493, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA4_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(4) @.str.1608, ptr noundef nonnull align 4 dereferenceable(4) %494)
  br label %544

495:                                              ; preds = %476
  %496 = load ptr, ptr %7, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %496, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1609, ptr noundef nonnull align 4 dereferenceable(4) %497)
  br label %544

498:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %499 unwind label %500

499:                                              ; preds = %498
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  br label %544

500:                                              ; preds = %498
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %13, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  br label %545

504:                                              ; preds = %468
  %505 = load ptr, ptr %7, align 8, !tbaa !5
  %506 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %505, i32 0, i32 2
  %507 = load i32, ptr %506, align 8, !tbaa !19
  switch i32 %507, label %538 [
    i32 2, label %508
    i32 7, label %513
    i32 8, label %518
    i32 12, label %523
    i32 13, label %528
    i32 14, label %533
  ]

508:                                              ; preds = %504
  %509 = load ptr, ptr %7, align 8, !tbaa !5
  %510 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %509, i32 0, i32 5
  %511 = load ptr, ptr %7, align 8, !tbaa !5
  %512 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %511, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1604, ptr noundef nonnull align 4 dereferenceable(4) %510, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %512)
  br label %544

513:                                              ; preds = %504
  %514 = load ptr, ptr %7, align 8, !tbaa !5
  %515 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %514, i32 0, i32 5
  %516 = load ptr, ptr %7, align 8, !tbaa !5
  %517 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %516, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1605, ptr noundef nonnull align 4 dereferenceable(4) %515, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %517)
  br label %544

518:                                              ; preds = %504
  %519 = load ptr, ptr %7, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %519, i32 0, i32 5
  %521 = load ptr, ptr %7, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %521, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1606, ptr noundef nonnull align 4 dereferenceable(4) %520, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %522)
  br label %544

523:                                              ; preds = %504
  %524 = load ptr, ptr %7, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %524, i32 0, i32 5
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %526, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1607, ptr noundef nonnull align 4 dereferenceable(4) %525, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %527)
  br label %544

528:                                              ; preds = %504
  %529 = load ptr, ptr %7, align 8, !tbaa !5
  %530 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %529, i32 0, i32 5
  %531 = load ptr, ptr %7, align 8, !tbaa !5
  %532 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %531, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA4_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(4) @.str.1608, ptr noundef nonnull align 4 dereferenceable(4) %530, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %532)
  br label %544

533:                                              ; preds = %504
  %534 = load ptr, ptr %7, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %534, i32 0, i32 5
  %536 = load ptr, ptr %7, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %536, i32 0, i32 4
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1609, ptr noundef nonnull align 4 dereferenceable(4) %535, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %537)
  br label %544

538:                                              ; preds = %504
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %539 unwind label %540

539:                                              ; preds = %538
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  br label %544

540:                                              ; preds = %538
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %13, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  br label %545

544:                                              ; preds = %539, %533, %528, %523, %518, %513, %508, %499, %495, %492, %489, %486, %483, %480, %463, %459, %456, %453, %450, %447, %444, %441, %438, %435, %432, %429, %426, %407, %401, %395, %389, %383, %377, %371, %365, %356, %347, %338, %329, %320, %311, %232, %210, %204, %198, %187, %175, %168, %163, %146
  ret void

545:                                              ; preds = %540, %500, %464, %408, %402, %396, %390, %384, %378, %372, %366, %357, %348, %339, %330, %321, %312, %293, %268, %248, %233, %211, %205, %199, %188, %164, %144
  %546 = load ptr, ptr %13, align 8
  %547 = load i32, ptr %14, align 4
  %548 = insertvalue { ptr, i32 } poison, ptr %546, 0
  %549 = insertvalue { ptr, i32 } %548, i32 %547, 1
  resume { ptr, i32 } %549
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK11spirv_cross10VectorViewIbE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRKjRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA3_KcRKjRA2_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA6_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(6), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA4_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA7_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA4_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4)) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"vtable pointer", !8, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !24, i64 16}
!20 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !21, i64 0, !23, i64 12, !24, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !25, i64 32, !29, i64 88, !10, i64 120, !14, i64 124, !14, i64 125, !32, i64 128, !33, i64 136, !25, i64 192, !36, i64 248, !37, i64 272, !37, i64 276, !41, i64 280}
!21 = !{!"_ZTSN11spirv_cross8IVariantE", !22, i64 8}
!22 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!23 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !26, i64 0, !27, i64 16, !28, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !27, i64 8}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !30, i64 0, !27, i64 16, !31, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !27, i64 8}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!32 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !34, i64 0, !27, i64 16, !35, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !27, i64 8}
!35 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !37, i64 0, !38, i64 4, !14, i64 8, !14, i64 9, !14, i64 10, !10, i64 12, !39, i64 16, !40, i64 20}
!37 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!38 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!39 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!40 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!41 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !42, i64 0}
!42 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!43 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!44 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !45, i64 0, !27, i64 8}
!45 = !{!"float", !7, i64 0}
!46 = !{!47, !14, i64 8383}
!47 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !48, i64 0, !6, i64 3176, !105, i64 3184, !14, i64 3272, !108, i64 3280, !6, i64 7616, !6, i64 7624, !14, i64 7632, !14, i64 7633, !113, i64 7636, !41, i64 7680, !41, i64 7736, !41, i64 7792, !41, i64 7848, !41, i64 7904, !41, i64 7960, !41, i64 8016, !117, i64 8072, !103, i64 8128, !14, i64 8184, !119, i64 8192, !10, i64 8416, !90, i64 8424, !90, i64 8480, !90, i64 8536, !120, i64 8592, !122, i64 8648, !123, i64 8656, !73, i64 8712, !73, i64 8992, !123, i64 9272, !33, i64 9328, !10, i64 9384, !10, i64 9388, !10, i64 9392, !14, i64 9396, !14, i64 9397, !125, i64 9400, !125, i64 9424, !129, i64 9448, !133, i64 9472, !123, i64 9496, !90, i64 9552, !90, i64 9608, !7, i64 9664, !137, i64 9672, !90, i64 9728, !6, i64 9784, !139, i64 9792}
!48 = !{!"_ZTSN11spirv_cross8CompilerE", !49, i64 8, !25, i64 1928, !25, i64 1984, !6, i64 2040, !6, i64 2048, !10, i64 2056, !92, i64 2064, !14, i64 2120, !90, i64 2128, !14, i64 2184, !14, i64 2185, !94, i64 2192, !25, i64 2312, !97, i64 2368, !90, i64 2400, !90, i64 2456, !90, i64 2512, !90, i64 2568, !90, i64 2624, !89, i64 2680, !89, i64 2744, !10, i64 2808, !10, i64 2812, !14, i64 2816, !90, i64 2824, !14, i64 2880, !14, i64 2881, !10, i64 2884, !99, i64 2888, !25, i64 2944, !101, i64 3000, !90, i64 3056, !14, i64 3112, !103, i64 3120}
!49 = !{!"_ZTSN11spirv_cross8ParsedIRE", !50, i64 0, !56, i64 8, !60, i64 32, !63, i64 248, !7, i64 304, !65, i64 1088, !65, i64 1144, !68, i64 1200, !70, i64 1256, !73, i64 1312, !76, i64 1592, !79, i64 1624, !81, i64 1680, !83, i64 1736, !84, i64 1740, !85, i64 1748, !86, i64 1752, !10, i64 1756, !10, i64 1760, !87, i64 1768, !89, i64 1800, !90, i64 1864}
!50 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !51, i64 0}
!51 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !52, i64 0}
!52 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !53, i64 0}
!53 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !54, i64 0}
!54 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !55, i64 0}
!55 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!56 = !{!"_ZTSSt6vectorIjSaIjEE", !57, i64 0}
!57 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!60 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !61, i64 0, !27, i64 16, !62, i64 24}
!61 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !27, i64 8}
!62 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!63 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !64, i64 0}
!64 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!65 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !66, i64 0, !27, i64 16, !67, i64 24}
!66 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !27, i64 8}
!67 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!68 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !69, i64 0}
!69 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !71, i64 0, !27, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !27, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!73 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !74, i64 0, !27, i64 16, !75, i64 24}
!74 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !27, i64 8}
!75 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!76 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !77, i64 0, !27, i64 16, !78, i64 24}
!77 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !27, i64 8}
!78 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!79 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !80, i64 0}
!80 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!81 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !82, i64 0}
!82 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!83 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!84 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !14, i64 4, !14, i64 5, !14, i64 6}
!85 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!86 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!87 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !88, i64 0, !27, i64 8, !7, i64 16}
!88 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!89 = !{!"_ZTSN11spirv_cross6BitsetE", !27, i64 0, !90, i64 8}
!90 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !91, i64 0}
!91 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!92 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !93, i64 0}
!93 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!94 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !95, i64 0, !27, i64 16, !96, i64 24}
!95 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !27, i64 8}
!96 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!97 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !98, i64 0, !6, i64 24}
!98 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!99 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !100, i64 0}
!100 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!101 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !102, i64 0}
!102 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!103 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !104, i64 0}
!104 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!105 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !106, i64 0, !27, i64 16, !107, i64 24}
!106 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !27, i64 8}
!107 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!108 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !109, i64 0, !7, i64 24, !110, i64 4120}
!109 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !27, i64 8, !27, i64 16}
!110 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !111, i64 0, !27, i64 16, !112, i64 24}
!111 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !27, i64 8}
!112 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!113 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !10, i64 0, !14, i64 4, !14, i64 5, !10, i64 8, !14, i64 12, !14, i64 13, !14, i64 14, !14, i64 15, !14, i64 16, !14, i64 17, !14, i64 18, !14, i64 19, !14, i64 20, !14, i64 21, !14, i64 22, !14, i64 23, !10, i64 24, !114, i64 28, !115, i64 32}
!114 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !14, i64 0, !14, i64 1, !14, i64 2}
!115 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !116, i64 0, !116, i64 4}
!116 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!117 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !118, i64 0}
!118 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!119 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !87, i64 0, !87, i64 32, !87, i64 64, !14, i64 96, !14, i64 97, !14, i64 98, !14, i64 99, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !24, i64 184, !14, i64 188, !14, i64 189, !14, i64 190, !14, i64 191, !14, i64 192, !14, i64 193, !14, i64 194, !14, i64 195, !14, i64 196, !14, i64 197, !14, i64 198, !14, i64 199, !14, i64 200, !14, i64 201, !14, i64 202, !14, i64 203, !14, i64 204, !14, i64 205, !14, i64 206, !14, i64 207, !14, i64 208, !14, i64 209, !14, i64 210, !14, i64 211, !14, i64 212, !14, i64 213, !14, i64 214, !14, i64 215, !14, i64 216, !14, i64 217, !14, i64 218, !14, i64 219}
!120 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !121, i64 0}
!121 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!122 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !10, i64 0}
!123 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !124, i64 0}
!124 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!125 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !126, i64 0}
!126 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !127, i64 0}
!127 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !128, i64 0}
!128 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!129 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !130, i64 0}
!130 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !131, i64 0}
!131 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !132, i64 0}
!132 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!133 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !134, i64 0}
!134 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !135, i64 0}
!135 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !136, i64 0}
!136 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!137 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !138, i64 0}
!138 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!139 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !140, i64 0}
!140 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !43, i64 16, !27, i64 24, !44, i64 32, !6, i64 48}
!141 = !{!47, !14, i64 9396}
!142 = !{!47, !14, i64 7640}
!143 = !{!47, !6, i64 8296}
!144 = !{!47, !10, i64 7636}
!145 = !{!20, !10, i64 24}
!146 = !{!20, !10, i64 28}
!147 = !{!47, !6, i64 8312}
!148 = !{!47, !6, i64 8320}
!149 = !{!47, !6, i64 8328}
!150 = !{!47, !6, i64 8336}
!151 = !{!47, !6, i64 8304}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.std::allocator.71" = type { i8 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.180 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.185 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.286 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.512 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.514 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.543 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.555 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.708 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.923 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1345 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1527 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1567 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1581 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1582 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1583 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1584 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1585 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1586 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1587 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1588 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1589 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1590 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1591 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1592 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1593 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1594 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1595 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1596 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1597 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1598 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1599 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1600 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1601 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1602 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1603 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1604 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1605 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1606 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1607 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1608 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1609 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #1 align 2

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_physical_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler35is_physical_pointer_to_buffer_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL12type_to_glslB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca %"class.spirv_cross::TypedID.280", align 4
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.spirv_cross::TypedID.280", align 4
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator.71", align 1
  %14 = alloca %"class.std::allocator.71", align 1
  %15 = alloca %"class.std::allocator.71", align 1
  %16 = alloca %"class.std::allocator.71", align 1
  %17 = alloca %"class.std::allocator.71", align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator.71", align 1
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::allocator.71", align 1
  %22 = alloca %"class.std::allocator.71", align 1
  %23 = alloca %"class.std::allocator.71", align 1
  %24 = alloca %"class.std::allocator.71", align 1
  %25 = alloca %"class.std::allocator.71", align 1
  %26 = alloca %"class.std::allocator.71", align 1
  %27 = alloca %"class.std::allocator.71", align 1
  %28 = alloca %"class.std::allocator.71", align 1
  %29 = alloca %"class.std::allocator.71", align 1
  %30 = alloca %"class.std::allocator.71", align 1
  %31 = alloca %"class.std::allocator.71", align 1
  %32 = alloca %"class.std::allocator.71", align 1
  %33 = alloca %"class.std::allocator.71", align 1
  %34 = alloca %"class.std::allocator.71", align 1
  %35 = alloca %"class.std::allocator.71", align 1
  %36 = alloca %"class.std::allocator.71", align 1
  %37 = alloca %"class.std::allocator.71", align 1
  %38 = alloca %"class.std::allocator.71", align 1
  store i32 %3, ptr %5, align 4, !tbaa !5
  %39 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_physical_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
  br i1 %39, label %40, label %99

40:                                               ; preds = %4
  %41 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler35is_physical_pointer_to_buffer_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
  br i1 %41, label %99, label %42

42:                                               ; preds = %40
  %43 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
  %44 = load ptr, ptr %1, align 8, !tbaa !9
  %45 = getelementptr inbounds i8, ptr %44, i64 152
  %46 = load ptr, ptr %45, align 8
  tail call void %46(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %43, i32 noundef 0)
  %47 = getelementptr inbounds i8, ptr %2, i64 276
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %48 unwind label %.loopexit.split-lp

48:                                               ; preds = %42
  %49 = load i32, ptr %6, align 4
  %50 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %49, i32 noundef 6)
          to label %.preheader unwind label %.loopexit.split-lp

.preheader:                                       ; preds = %48
  %51 = getelementptr inbounds i8, ptr %2, i64 32
  br label %52

52:                                               ; preds = %.preheader, %88
  %.069 = phi ptr [ %90, %88 ], [ %43, %.preheader ]
  %.068 = phi i32 [ %87, %88 ], [ %50, %.preheader ]
  %53 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.069)
          to label %54 unwind label %.loopexit

54:                                               ; preds = %52
  br i1 %53, label %55, label %96

55:                                               ; preds = %54
  %56 = getelementptr inbounds i8, ptr %.069, i64 88
  %57 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK11spirv_cross10VectorViewIbE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %56) #7
  %58 = load i8, ptr %57, align 1, !tbaa !11, !range !13, !noundef !14
  %59 = trunc nuw i8 %58 to i1
  br i1 %59, label %60, label %70

60:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %61 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %51) #7
  invoke void @_ZN11spirv_cross4joinIJRKjRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 1 dereferenceable(2) @.str.286)
          to label %62 unwind label %65

62:                                               ; preds = %60
  %63 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %64 unwind label %67

64:                                               ; preds = %62
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %80

.loopexit:                                        ; preds = %52, %83, %85, %88
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %98

.loopexit.split-lp:                               ; preds = %42, %48, %96
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %98

65:                                               ; preds = %60
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %69

67:                                               ; preds = %62
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  br label %69

69:                                               ; preds = %67, %65
  %.pn71 = phi { ptr, i32 } [ %68, %67 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %98

70:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  %71 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %51) #7
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRKjRA2_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 1 dereferenceable(3) @.str.1581, ptr noundef nonnull align 4 dereferenceable(4) %71, ptr noundef nonnull align 1 dereferenceable(2) @.str.286)
          to label %72 unwind label %75

72:                                               ; preds = %70
  %73 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %74 unwind label %77

74:                                               ; preds = %72
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %80

75:                                               ; preds = %70
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %79

77:                                               ; preds = %72
  %78 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  br label %79

79:                                               ; preds = %77, %75
  %.pn = phi { ptr, i32 } [ %78, %77 ], [ %76, %75 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %98

80:                                               ; preds = %74, %64
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, i32 noundef %.068) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull @.str.1582, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %81 unwind label %91

81:                                               ; preds = %80
  %82 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %83 unwind label %93

83:                                               ; preds = %81
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  %84 = getelementptr inbounds i8, ptr %.069, i64 276
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %85 unwind label %.loopexit

85:                                               ; preds = %83
  %86 = load i32, ptr %11, align 4
  %87 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %86, i32 noundef 6)
          to label %88 unwind label %.loopexit

88:                                               ; preds = %85
  %89 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
  %90 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %89)
          to label %52 unwind label %.loopexit, !llvm.loop !15

91:                                               ; preds = %80
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %95

93:                                               ; preds = %81
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %95

95:                                               ; preds = %93, %91
  %.pn73 = phi { ptr, i32 } [ %94, %93 ], [ %92, %91 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %98

96:                                               ; preds = %54
  %97 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1583)
          to label %315 unwind label %.loopexit.split-lp

98:                                               ; preds = %.loopexit, %.loopexit.split-lp, %95, %79, %69
  %.pn75 = phi { ptr, i32 } [ %.pn73, %95 ], [ %.pn71, %69 ], [ %.pn, %79 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br label %316

99:                                               ; preds = %40, %4
  %100 = getelementptr inbounds i8, ptr %2, i64 16
  %101 = load i32, ptr %100, align 8, !tbaa !17
  switch i32 %101, label %168 [
    i32 15, label %102
    i32 16, label %121
    i32 17, label %121
    i32 18, label %125
    i32 19, label %132
    i32 20, label %140
    i32 1, label %144
    i32 8, label %148
  ]

102:                                              ; preds = %99
  %103 = getelementptr inbounds i8, ptr %1, i64 8383
  %104 = load i8, ptr %103, align 1, !tbaa !45, !range !13, !noundef !14
  %105 = trunc nuw i8 %104 to i1
  br i1 %105, label %106, label %115

106:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  %107 = getelementptr inbounds i8, ptr %2, i64 8
  %108 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %107)
  %109 = load ptr, ptr %1, align 8, !tbaa !9
  %110 = getelementptr inbounds i8, ptr %109, i64 48
  %111 = load ptr, ptr %110, align 8
  call void %111(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %108, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.180, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %112 unwind label %113

112:                                              ; preds = %106
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %315

113:                                              ; preds = %106
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %316

115:                                              ; preds = %102
  %116 = getelementptr inbounds i8, ptr %2, i64 8
  %117 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %116)
  %118 = load ptr, ptr %1, align 8, !tbaa !9
  %119 = getelementptr inbounds i8, ptr %118, i64 48
  %120 = load ptr, ptr %119, align 8
  tail call void %120(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %117, i1 noundef zeroext true)
  br label %315

121:                                              ; preds = %99, %99
  %122 = load ptr, ptr %1, align 8, !tbaa !9
  %123 = getelementptr inbounds i8, ptr %122, i64 184
  %124 = load ptr, ptr %123, align 8
  tail call void %124(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, i32 noundef %3, i1 noundef zeroext false)
  br label %315

125:                                              ; preds = %99
  %126 = getelementptr inbounds i8, ptr %1, i64 2824
  %127 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %126, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %.not = icmp eq i64 %127, 0
  %128 = select i1 %.not, ptr @.str.1567, ptr @.str.1584
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %128, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %129 unwind label %130

129:                                              ; preds = %125
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  br label %315

130:                                              ; preds = %125
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  br label %316

132:                                              ; preds = %99
  %133 = getelementptr inbounds i8, ptr %1, i64 9396
  %134 = load i8, ptr %133, align 4, !tbaa !140, !range !13, !noundef !14
  %135 = trunc nuw i8 %134 to i1
  %136 = select i1 %135, ptr @.str.1527, ptr @.str.1585
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %136, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %137 unwind label %138

137:                                              ; preds = %132
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #7
  br label %315

138:                                              ; preds = %132
  %139 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #7
  br label %316

140:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1586, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %141 unwind label %142

141:                                              ; preds = %140
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #7
  br label %315

142:                                              ; preds = %140
  %143 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #7
  br label %316

144:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.708, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %145 unwind label %146

145:                                              ; preds = %144
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  br label %315

146:                                              ; preds = %144
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  br label %316

148:                                              ; preds = %99
  %149 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %1)
  br i1 %149, label %150, label %thread-pre-split

150:                                              ; preds = %148
  %151 = getelementptr inbounds i8, ptr %1, i64 7640
  %152 = load i8, ptr %151, align 8, !tbaa !141, !range !13, !noundef !14
  %153 = trunc nuw i8 %152 to i1
  br i1 %153, label %154, label %160

154:                                              ; preds = %150
  %155 = getelementptr inbounds i8, ptr %1, i64 8296
  %156 = load ptr, ptr %155, align 8, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %156, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %157 unwind label %158

157:                                              ; preds = %154
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #7
  br label %315

158:                                              ; preds = %154
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #7
  br label %316

160:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %161 unwind label %163

161:                                              ; preds = %160
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %162 unwind label %165

162:                                              ; preds = %161
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %thread-pre-split

163:                                              ; preds = %160
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %167

165:                                              ; preds = %161
  %166 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %167

167:                                              ; preds = %165, %163
  %.pn77 = phi { ptr, i32 } [ %166, %165 ], [ %164, %163 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %316

thread-pre-split:                                 ; preds = %148, %162
  %.pr = load i32, ptr %100, align 8, !tbaa !17
  br label %168

168:                                              ; preds = %thread-pre-split, %99
  %169 = phi i32 [ %.pr, %thread-pre-split ], [ %101, %99 ]
  %170 = icmp eq i32 %169, 11
  br i1 %170, label %171, label %193

171:                                              ; preds = %168
  %172 = getelementptr inbounds i8, ptr %1, i64 7636
  %173 = getelementptr inbounds i8, ptr %1, i64 7640
  %174 = load i8, ptr %173, align 8, !tbaa !141, !range !13, !noundef !14
  %175 = trunc nuw i8 %174 to i1
  %176 = load i32, ptr %172, align 4
  %177 = icmp ult i32 %176, 310
  %or.cond = select i1 %175, i1 %177, i1 false
  br i1 %or.cond, label %178, label %183

178:                                              ; preds = %171
  %179 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %179, ptr noundef nonnull @.str.1587)
          to label %180 unwind label %181

180:                                              ; preds = %178
  call void @__cxa_throw(ptr nonnull %179, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

181:                                              ; preds = %178
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %179) #7
  br label %316

183:                                              ; preds = %171
  %184 = icmp ugt i32 %176, 419
  %or.cond86.not = select i1 %175, i1 true, i1 %184
  br i1 %or.cond86.not, label %193, label %185

185:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull @.str.1588, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %186 unwind label %188

186:                                              ; preds = %185
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %187 unwind label %190

187:                                              ; preds = %186
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  br label %193

188:                                              ; preds = %185
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %192

190:                                              ; preds = %186
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  br label %192

192:                                              ; preds = %190, %188
  %.pn79 = phi { ptr, i32 } [ %191, %190 ], [ %189, %188 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  br label %316

193:                                              ; preds = %187, %183, %168
  %194 = getelementptr inbounds i8, ptr %2, i64 24
  %195 = load i32, ptr %194, align 8, !tbaa !143
  %196 = icmp eq i32 %195, 1
  %197 = getelementptr inbounds i8, ptr %2, i64 28
  %198 = load i32, ptr %197, align 4
  %199 = icmp eq i32 %198, 1
  %or.cond89 = select i1 %196, i1 %199, i1 false
  br i1 %or.cond89, label %200, label %270

200:                                              ; preds = %193
  %201 = load i32, ptr %100, align 8, !tbaa !17
  switch i32 %201, label %266 [
    i32 2, label %202
    i32 3, label %206
    i32 4, label %212
    i32 5, label %218
    i32 6, label %224
    i32 7, label %230
    i32 8, label %236
    i32 11, label %242
    i32 12, label %246
    i32 13, label %250
    i32 14, label %254
    i32 9, label %258
    i32 10, label %262
  ]

202:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.514, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %203 unwind label %204

203:                                              ; preds = %202
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #7
  br label %315

204:                                              ; preds = %202
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #7
  br label %316

206:                                              ; preds = %200
  %207 = getelementptr inbounds i8, ptr %1, i64 8312
  %208 = load ptr, ptr %207, align 8, !tbaa !144
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %208, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %209 unwind label %210

209:                                              ; preds = %206
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #7
  br label %315

210:                                              ; preds = %206
  %211 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #7
  br label %316

212:                                              ; preds = %200
  %213 = getelementptr inbounds i8, ptr %1, i64 8320
  %214 = load ptr, ptr %213, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %214, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %215 unwind label %216

215:                                              ; preds = %212
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #7
  br label %315

216:                                              ; preds = %212
  %217 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #7
  br label %316

218:                                              ; preds = %200
  %219 = getelementptr inbounds i8, ptr %1, i64 8328
  %220 = load ptr, ptr %219, align 8, !tbaa !146
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %220, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %221 unwind label %222

221:                                              ; preds = %218
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #7
  br label %315

222:                                              ; preds = %218
  %223 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #7
  br label %316

224:                                              ; preds = %200
  %225 = getelementptr inbounds i8, ptr %1, i64 8336
  %226 = load ptr, ptr %225, align 8, !tbaa !147
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %226, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %227 unwind label %228

227:                                              ; preds = %224
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #7
  br label %315

228:                                              ; preds = %224
  %229 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #7
  br label %316

230:                                              ; preds = %200
  %231 = getelementptr inbounds i8, ptr %1, i64 8296
  %232 = load ptr, ptr %231, align 8, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %232, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %233 unwind label %234

233:                                              ; preds = %230
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #7
  br label %315

234:                                              ; preds = %230
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #7
  br label %316

236:                                              ; preds = %200
  %237 = getelementptr inbounds i8, ptr %1, i64 8304
  %238 = load ptr, ptr %237, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %238, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %239 unwind label %240

239:                                              ; preds = %236
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #7
  br label %315

240:                                              ; preds = %236
  %241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #7
  br label %316

242:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %29) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.512, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %243 unwind label %244

243:                                              ; preds = %242
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %29) #7
  br label %315

244:                                              ; preds = %242
  %245 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %29) #7
  br label %316

246:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.923, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %247 unwind label %248

247:                                              ; preds = %246
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #7
  br label %315

248:                                              ; preds = %246
  %249 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #7
  br label %316

250:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %31) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.555, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %251 unwind label %252

251:                                              ; preds = %250
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #7
  br label %315

252:                                              ; preds = %250
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #7
  br label %316

254:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %32) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.543, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %255 unwind label %256

255:                                              ; preds = %254
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #7
  br label %315

256:                                              ; preds = %254
  %257 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #7
  br label %316

258:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1589, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %259 unwind label %260

259:                                              ; preds = %258
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #7
  br label %315

260:                                              ; preds = %258
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #7
  br label %316

262:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %34) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1590, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %263 unwind label %264

263:                                              ; preds = %262
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #7
  br label %315

264:                                              ; preds = %262
  %265 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #7
  br label %316

266:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %35) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %267 unwind label %268

267:                                              ; preds = %266
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #7
  br label %315

268:                                              ; preds = %266
  %269 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #7
  br label %316

270:                                              ; preds = %193
  %271 = icmp ugt i32 %195, 1
  %or.cond92 = select i1 %271, i1 %199, i1 false
  br i1 %or.cond92, label %272, label %290

272:                                              ; preds = %270
  %273 = load i32, ptr %100, align 8, !tbaa !17
  switch i32 %273, label %286 [
    i32 2, label %274
    i32 3, label %275
    i32 4, label %276
    i32 5, label %277
    i32 6, label %278
    i32 7, label %279
    i32 8, label %280
    i32 12, label %281
    i32 13, label %282
    i32 14, label %283
    i32 9, label %284
    i32 10, label %285
  ]

274:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1592, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

275:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA6_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1593, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

276:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA6_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1594, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

277:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1595, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

278:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1596, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

279:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1597, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

280:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1598, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

281:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1599, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

282:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA4_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(4) @.str.1600, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

283:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1601, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

284:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1602, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

285:                                              ; preds = %272
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1603, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

286:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %36) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %287 unwind label %288

287:                                              ; preds = %286
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #7
  br label %315

288:                                              ; preds = %286
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #7
  br label %316

290:                                              ; preds = %270
  %291 = icmp eq i32 %195, %198
  %292 = load i32, ptr %100, align 8, !tbaa !17
  br i1 %291, label %293, label %304

293:                                              ; preds = %290
  switch i32 %292, label %300 [
    i32 2, label %294
    i32 7, label %295
    i32 8, label %296
    i32 12, label %297
    i32 13, label %298
    i32 14, label %299
  ]

294:                                              ; preds = %293
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1604, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

295:                                              ; preds = %293
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1605, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

296:                                              ; preds = %293
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1606, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

297:                                              ; preds = %293
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1607, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

298:                                              ; preds = %293
  call void @_ZN11spirv_cross4joinIJRA4_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(4) @.str.1608, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

299:                                              ; preds = %293
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1609, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

300:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %301 unwind label %302

301:                                              ; preds = %300
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #7
  br label %315

302:                                              ; preds = %300
  %303 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #7
  br label %316

304:                                              ; preds = %290
  switch i32 %292, label %311 [
    i32 2, label %305
    i32 7, label %306
    i32 8, label %307
    i32 12, label %308
    i32 13, label %309
    i32 14, label %310
  ]

305:                                              ; preds = %304
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1604, ptr noundef nonnull align 4 dereferenceable(4) %197, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

306:                                              ; preds = %304
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1605, ptr noundef nonnull align 4 dereferenceable(4) %197, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

307:                                              ; preds = %304
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1606, ptr noundef nonnull align 4 dereferenceable(4) %197, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

308:                                              ; preds = %304
  call void @_ZN11spirv_cross4joinIJRA7_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1607, ptr noundef nonnull align 4 dereferenceable(4) %197, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

309:                                              ; preds = %304
  call void @_ZN11spirv_cross4joinIJRA4_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(4) @.str.1608, ptr noundef nonnull align 4 dereferenceable(4) %197, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

310:                                              ; preds = %304
  call void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1609, ptr noundef nonnull align 4 dereferenceable(4) %197, ptr noundef nonnull align 1 dereferenceable(2) @.str.1345, ptr noundef nonnull align 4 dereferenceable(4) %194)
  br label %315

311:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %38) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1591, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %312 unwind label %313

312:                                              ; preds = %311
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #7
  br label %315

313:                                              ; preds = %311
  %314 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #7
  br label %316

315:                                              ; preds = %96, %312, %310, %309, %308, %307, %306, %305, %301, %299, %298, %297, %296, %295, %294, %287, %285, %284, %283, %282, %281, %280, %279, %278, %277, %276, %275, %274, %267, %263, %259, %255, %251, %247, %243, %239, %233, %227, %221, %215, %209, %203, %157, %145, %141, %137, %129, %121, %115, %112
  ret void

316:                                              ; preds = %313, %302, %288, %268, %264, %260, %256, %252, %248, %244, %240, %234, %228, %222, %216, %210, %204, %192, %181, %167, %158, %146, %142, %138, %130, %113, %98
  %.pn81 = phi { ptr, i32 } [ %159, %158 ], [ %182, %181 ], [ %269, %268 ], [ %265, %264 ], [ %261, %260 ], [ %257, %256 ], [ %253, %252 ], [ %249, %248 ], [ %245, %244 ], [ %241, %240 ], [ %235, %234 ], [ %229, %228 ], [ %223, %222 ], [ %217, %216 ], [ %211, %210 ], [ %205, %204 ], [ %289, %288 ], [ %303, %302 ], [ %314, %313 ], [ %.pn79, %192 ], [ %.pn77, %167 ], [ %147, %146 ], [ %143, %142 ], [ %139, %138 ], [ %131, %130 ], [ %114, %113 ], [ %.pn75, %98 ]
  resume { ptr, i32 } %.pn81
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK11spirv_cross10VectorViewIbE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRKjRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA3_KcRKjRA2_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA6_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(6), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA7_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA4_KcRKjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA7_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA4_KcRKjRA2_S1_S5_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !22, i64 16}
!18 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !19, i64 0, !21, i64 12, !22, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !23, i64 32, !28, i64 88, !6, i64 120, !12, i64 124, !12, i64 125, !31, i64 128, !32, i64 136, !23, i64 192, !35, i64 248, !36, i64 272, !36, i64 276, !40, i64 280}
!19 = !{!"_ZTSN11spirv_cross8IVariantE", !20, i64 8}
!20 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!21 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!22 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!23 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !24, i64 0, !26, i64 16, !27, i64 24}
!24 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !25, i64 0, !26, i64 8}
!25 = !{!"any pointer", !7, i64 0}
!26 = !{!"long", !7, i64 0}
!27 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !29, i64 0, !26, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !25, i64 0, !26, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!31 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !33, i64 0, !26, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !25, i64 0, !26, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !36, i64 0, !37, i64 4, !12, i64 8, !12, i64 9, !12, i64 10, !6, i64 12, !38, i64 16, !39, i64 20}
!36 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!37 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!38 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!39 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!40 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !41, i64 0}
!41 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!42 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !25, i64 0}
!43 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !44, i64 0, !26, i64 8}
!44 = !{!"float", !7, i64 0}
!45 = !{!46, !12, i64 8383}
!46 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !47, i64 0, !25, i64 3176, !104, i64 3184, !12, i64 3272, !107, i64 3280, !25, i64 7616, !25, i64 7624, !12, i64 7632, !12, i64 7633, !112, i64 7636, !40, i64 7680, !40, i64 7736, !40, i64 7792, !40, i64 7848, !40, i64 7904, !40, i64 7960, !40, i64 8016, !116, i64 8072, !102, i64 8128, !12, i64 8184, !118, i64 8192, !6, i64 8416, !89, i64 8424, !89, i64 8480, !89, i64 8536, !119, i64 8592, !121, i64 8648, !122, i64 8656, !72, i64 8712, !72, i64 8992, !122, i64 9272, !32, i64 9328, !6, i64 9384, !6, i64 9388, !6, i64 9392, !12, i64 9396, !12, i64 9397, !124, i64 9400, !124, i64 9424, !128, i64 9448, !132, i64 9472, !122, i64 9496, !89, i64 9552, !89, i64 9608, !7, i64 9664, !136, i64 9672, !89, i64 9728, !25, i64 9784, !138, i64 9792}
!47 = !{!"_ZTSN11spirv_cross8CompilerE", !48, i64 8, !23, i64 1928, !23, i64 1984, !25, i64 2040, !25, i64 2048, !6, i64 2056, !91, i64 2064, !12, i64 2120, !89, i64 2128, !12, i64 2184, !12, i64 2185, !93, i64 2192, !23, i64 2312, !96, i64 2368, !89, i64 2400, !89, i64 2456, !89, i64 2512, !89, i64 2568, !89, i64 2624, !88, i64 2680, !88, i64 2744, !6, i64 2808, !6, i64 2812, !12, i64 2816, !89, i64 2824, !12, i64 2880, !12, i64 2881, !6, i64 2884, !98, i64 2888, !23, i64 2944, !100, i64 3000, !89, i64 3056, !12, i64 3112, !102, i64 3120}
!48 = !{!"_ZTSN11spirv_cross8ParsedIRE", !49, i64 0, !55, i64 8, !59, i64 32, !62, i64 248, !7, i64 304, !64, i64 1088, !64, i64 1144, !67, i64 1200, !69, i64 1256, !72, i64 1312, !75, i64 1592, !78, i64 1624, !80, i64 1680, !82, i64 1736, !83, i64 1740, !84, i64 1748, !85, i64 1752, !6, i64 1756, !6, i64 1760, !86, i64 1768, !88, i64 1800, !89, i64 1864}
!49 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !50, i64 0}
!50 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !51, i64 0}
!51 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !52, i64 0}
!52 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !53, i64 0}
!53 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !54, i64 0}
!54 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !25, i64 0}
!55 = !{!"_ZTSSt6vectorIjSaIjEE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !25, i64 0, !25, i64 8, !25, i64 16}
!59 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !60, i64 0, !26, i64 16, !61, i64 24}
!60 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !25, i64 0, !26, i64 8}
!61 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!62 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !63, i64 0}
!63 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!64 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !65, i64 0, !26, i64 16, !66, i64 24}
!65 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !25, i64 0, !26, i64 8}
!66 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!67 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !68, i64 0}
!68 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!69 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !70, i64 0, !26, i64 16, !71, i64 24}
!70 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !25, i64 0, !26, i64 8}
!71 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!72 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !73, i64 0, !26, i64 16, !74, i64 24}
!73 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !25, i64 0, !26, i64 8}
!74 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!75 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !76, i64 0, !26, i64 16, !77, i64 24}
!76 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !25, i64 0, !26, i64 8}
!77 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!78 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !79, i64 0}
!79 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!80 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !81, i64 0}
!81 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!82 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !6, i64 0}
!83 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !6, i64 0, !12, i64 4, !12, i64 5, !12, i64 6}
!84 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!85 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!86 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !87, i64 0, !26, i64 8, !7, i64 16}
!87 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !25, i64 0}
!88 = !{!"_ZTSN11spirv_cross6BitsetE", !26, i64 0, !89, i64 8}
!89 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !90, i64 0}
!90 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!91 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !92, i64 0}
!92 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!93 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !94, i64 0, !26, i64 16, !95, i64 24}
!94 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !25, i64 0, !26, i64 8}
!95 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!96 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !97, i64 0, !25, i64 24}
!97 = !{!"_ZTSSt14_Function_base", !7, i64 0, !25, i64 16}
!98 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !99, i64 0}
!99 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!100 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !101, i64 0}
!101 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!102 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !103, i64 0}
!103 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!104 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !105, i64 0, !26, i64 16, !106, i64 24}
!105 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !25, i64 0, !26, i64 8}
!106 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!107 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !108, i64 0, !7, i64 24, !109, i64 4120}
!108 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !25, i64 0, !26, i64 8, !26, i64 16}
!109 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !110, i64 0, !26, i64 16, !111, i64 24}
!110 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !25, i64 0, !26, i64 8}
!111 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!112 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !6, i64 0, !12, i64 4, !12, i64 5, !6, i64 8, !12, i64 12, !12, i64 13, !12, i64 14, !12, i64 15, !12, i64 16, !12, i64 17, !12, i64 18, !12, i64 19, !12, i64 20, !12, i64 21, !12, i64 22, !12, i64 23, !6, i64 24, !113, i64 28, !114, i64 32}
!113 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !12, i64 0, !12, i64 1, !12, i64 2}
!114 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !115, i64 0, !115, i64 4}
!115 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!116 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !117, i64 0}
!117 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!118 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !86, i64 0, !86, i64 32, !86, i64 64, !12, i64 96, !12, i64 97, !12, i64 98, !12, i64 99, !25, i64 104, !25, i64 112, !25, i64 120, !25, i64 128, !25, i64 136, !25, i64 144, !25, i64 152, !25, i64 160, !25, i64 168, !25, i64 176, !22, i64 184, !12, i64 188, !12, i64 189, !12, i64 190, !12, i64 191, !12, i64 192, !12, i64 193, !12, i64 194, !12, i64 195, !12, i64 196, !12, i64 197, !12, i64 198, !12, i64 199, !12, i64 200, !12, i64 201, !12, i64 202, !12, i64 203, !12, i64 204, !12, i64 205, !12, i64 206, !12, i64 207, !12, i64 208, !12, i64 209, !12, i64 210, !12, i64 211, !12, i64 212, !12, i64 213, !12, i64 214, !12, i64 215, !12, i64 216, !12, i64 217, !12, i64 218, !12, i64 219}
!119 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !120, i64 0}
!120 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!121 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !6, i64 0}
!122 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !123, i64 0}
!123 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!124 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !125, i64 0}
!125 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !126, i64 0}
!126 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !127, i64 0}
!127 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !25, i64 0, !25, i64 8, !25, i64 16}
!128 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !129, i64 0}
!129 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !130, i64 0}
!130 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !131, i64 0}
!131 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !25, i64 0, !25, i64 8, !25, i64 16}
!132 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !133, i64 0}
!133 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !134, i64 0}
!134 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !135, i64 0}
!135 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !25, i64 0, !25, i64 8, !25, i64 16}
!136 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !137, i64 0}
!137 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!138 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !139, i64 0}
!139 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !25, i64 0, !26, i64 8, !42, i64 16, !26, i64 24, !43, i64 32, !25, i64 48}
!140 = !{!46, !12, i64 9396}
!141 = !{!46, !12, i64 7640}
!142 = !{!46, !25, i64 8296}
!143 = !{!18, !6, i64 24}
!144 = !{!46, !25, i64 8312}
!145 = !{!46, !25, i64 8320}
!146 = !{!46, !25, i64 8328}
!147 = !{!46, !25, i64 8336}
!148 = !{!46, !25, i64 8304}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopSimplifyPass,SROAPass,SimplifyCFGPass,TailCallElimPass