; 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] }
%"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::TypedID.280" = type { i32 }
%"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.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"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] }>
%"class.spirv_cross::TypedID.309" = type { i32 }

@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.946 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.947 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.982 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.983 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.984 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.985 = external hidden unnamed_addr constant [4 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 i32 @__gxx_personality_v0(...)

; 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)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #2 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 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_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #3

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(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(360) %2, i1 noundef zeroext %3, i1 noundef zeroext %4) #1 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i1, align 1
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i8, align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"struct.spirv_cross::SPIRType", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.spirv_cross::TypedID.281", align 4
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator.71", align 1
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.71", align 1
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca i1, align 1
  %43 = alloca %"struct.spirv_cross::SPIRType", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca i1, align 1
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca i32, align 4
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"struct.spirv_cross::SPIRType", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %6, align 8
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  %54 = zext i1 %3 to i8
  store i8 %54, ptr %9, align 1, !tbaa !9
  %55 = zext i1 %4 to i8
  store i8 %55, ptr %10, align 1, !tbaa !9
  %56 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %57 = load ptr, ptr %8, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %57, i32 0, i32 1
  %59 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %60 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %59)
  store ptr %60, ptr %11, align 8, !tbaa !5
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %61)
  br i1 %62, label %63, label %66

63:                                               ; preds = %5
  %64 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %65 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %64, i32 0, i32 2
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %65)
  store i32 1, ptr %12, align 4
  br label %660

66:                                               ; preds = %5
  %67 = load ptr, ptr %8, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %67, i32 0, i32 6
  %69 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %68) #6
  br i1 %69, label %420, label %70

70:                                               ; preds = %66
  store i1 false, ptr %13, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #6
  %71 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %72 = trunc i8 %71 to i1
  br i1 %72, label %73, label %83

73:                                               ; preds = %70
  %74 = load ptr, ptr %11, align 8, !tbaa !5
  %75 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %74)
          to label %76 unwind label %109

76:                                               ; preds = %73
  br i1 %75, label %77, label %83

77:                                               ; preds = %76
  %78 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %79 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %78, i32 0, i32 38
  %80 = load i8, ptr %79, align 1, !tbaa !13, !range !11, !noundef !12
  %81 = trunc i8 %80 to i1
  %82 = xor i1 %81, true
  br label %83

83:                                               ; preds = %77, %76, %70
  %84 = phi i1 [ false, %76 ], [ false, %70 ], [ %82, %77 ]
  %85 = zext i1 %84 to i8
  store i8 %85, ptr %14, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #6
  store i8 0, ptr %17, align 1, !tbaa !9
  %86 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %87 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %86, i32 0, i32 23
  %88 = load i8, ptr %87, align 8, !tbaa !122, !range !11, !noundef !12
  %89 = trunc i8 %88 to i1
  br i1 %89, label %90, label %126

90:                                               ; preds = %83
  %91 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %92 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %91, i32 0, i32 24
  %93 = load i8, ptr %92, align 1, !tbaa !123, !range !11, !noundef !12
  %94 = trunc i8 %93 to i1
  br i1 %94, label %95, label %126

95:                                               ; preds = %90
  %96 = load ptr, ptr %11, align 8, !tbaa !5
  %97 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %96, i32 0, i32 2
  %98 = load i32, ptr %97, align 8, !tbaa !124
  %99 = icmp eq i32 %98, 15
  br i1 %99, label %100, label %126

100:                                              ; preds = %95
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %101)
          to label %103 unwind label %113

103:                                              ; preds = %100
  br i1 %102, label %126, label %104

104:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #6
  %105 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %105)
          to label %106 unwind label %117

106:                                              ; preds = %104
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef @.str.946)
          to label %107 unwind label %121

107:                                              ; preds = %106
  %108 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #6
  br label %219

109:                                              ; preds = %73
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %15, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %16, align 4
  br label %417

113:                                              ; preds = %200, %141, %100
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %15, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %16, align 4
  br label %416

117:                                              ; preds = %104
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %15, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %16, align 4
  br label %125

121:                                              ; preds = %106
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %15, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %125

125:                                              ; preds = %121, %117
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #6
  br label %416

126:                                              ; preds = %103, %95, %90, %83
  %127 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %128 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %127, i32 0, i32 23
  %129 = load i8, ptr %128, align 8, !tbaa !122, !range !11, !noundef !12
  %130 = trunc i8 %129 to i1
  br i1 %130, label %131, label %195

131:                                              ; preds = %126
  %132 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %133 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %132, i32 0, i32 24
  %134 = load i8, ptr %133, align 1, !tbaa !123, !range !11, !noundef !12
  %135 = trunc i8 %134 to i1
  br i1 %135, label %136, label %195

136:                                              ; preds = %131
  %137 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %138 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %137, i32 0, i32 37
  %139 = load i8, ptr %138, align 2, !tbaa !138, !range !11, !noundef !12
  %140 = trunc i8 %139 to i1
  br i1 %140, label %141, label %195

141:                                              ; preds = %136
  %142 = load ptr, ptr %11, align 8, !tbaa !5
  %143 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %142)
          to label %144 unwind label %113

144:                                              ; preds = %141
  br i1 %143, label %145, label %195

145:                                              ; preds = %144
  %146 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %147 = trunc i8 %146 to i1
  br i1 %147, label %195, label %148

148:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %149 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %149, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %21) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %21, i32 noundef 0)
          to label %150 unwind label %171

150:                                              ; preds = %148
  %151 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %152 = trunc i8 %151 to i1
  br i1 %152, label %153, label %179

153:                                              ; preds = %150
  %154 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %155 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %154, i32 0, i32 18
  %156 = load i32, ptr %155, align 8, !tbaa !139
  %157 = icmp ne i32 %156, 2
  br i1 %157, label %158, label %179

158:                                              ; preds = %153
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  %160 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %159, i32 0, i32 2
  %161 = load i32, ptr %160, align 8, !tbaa !124
  %162 = icmp eq i32 %161, 2
  br i1 %162, label %163, label %179

163:                                              ; preds = %158
  %164 = load ptr, ptr %11, align 8, !tbaa !5
  %165 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %21, ptr noundef nonnull align 8 dereferenceable(336) %164)
          to label %166 unwind label %175

166:                                              ; preds = %163
  %167 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %168 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %167, i32 0, i32 18
  %169 = load i32, ptr %168, align 8, !tbaa !139
  %170 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %21, i32 0, i32 2
  store i32 %169, ptr %170, align 8, !tbaa !124
  store ptr %21, ptr %20, align 8, !tbaa !5
  br label %179

171:                                              ; preds = %148
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %15, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %16, align 4
  br label %194

175:                                              ; preds = %163
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %15, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %16, align 4
  br label %193

179:                                              ; preds = %166, %158, %153, %150
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #6
  %180 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %180)
          to label %181 unwind label %184

181:                                              ; preds = %179
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.982)
          to label %182 unwind label %188

182:                                              ; preds = %181
  %183 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  store i8 1, ptr %17, align 1, !tbaa !9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %218

184:                                              ; preds = %179
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %15, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %16, align 4
  br label %192

188:                                              ; preds = %181
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %15, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  br label %192

192:                                              ; preds = %188, %184
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %193

193:                                              ; preds = %192, %175
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #6
  br label %194

194:                                              ; preds = %193, %171
  call void @llvm.lifetime.end.p0(i64 336, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %416

195:                                              ; preds = %145, %144, %136, %131, %126
  %196 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %197 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %196, i32 0, i32 23
  %198 = load i8, ptr %197, align 8, !tbaa !122, !range !11, !noundef !12
  %199 = trunc i8 %198 to i1
  br i1 %199, label %200, label %203

200:                                              ; preds = %195
  %201 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.946)
          to label %202 unwind label %113

202:                                              ; preds = %200
  br label %217

203:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #6
  %204 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %204)
          to label %205 unwind label %208

205:                                              ; preds = %203
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.718)
          to label %206 unwind label %212

206:                                              ; preds = %205
  %207 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  br label %217

208:                                              ; preds = %203
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %15, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %16, align 4
  br label %216

212:                                              ; preds = %205
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %15, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %216

216:                                              ; preds = %212, %208
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  br label %416

217:                                              ; preds = %206, %202
  br label %218

218:                                              ; preds = %217, %182
  br label %219

219:                                              ; preds = %218, %107
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 0, ptr %26, align 4, !tbaa !140
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %220, i32 0, i32 6
  store ptr %221, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %222 = load ptr, ptr %27, align 8, !tbaa !5
  %223 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %222) #6
  store ptr %223, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %224 = load ptr, ptr %27, align 8, !tbaa !5
  %225 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %224) #6
  store ptr %225, ptr %29, align 8, !tbaa !5
  br label %226

226:                                              ; preds = %391, %219
  %227 = load ptr, ptr %28, align 8, !tbaa !5
  %228 = load ptr, ptr %29, align 8, !tbaa !5
  %229 = icmp ne ptr %227, %228
  br i1 %229, label %231, label %230

230:                                              ; preds = %226
  store i32 2, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %395

231:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %232 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %232, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %233 = load ptr, ptr %30, align 8, !tbaa !5
  %234 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %233)
          to label %235 unwind label %248

235:                                              ; preds = %231
  %236 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRConstantOpEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %234)
          to label %237 unwind label %248

237:                                              ; preds = %235
  store ptr %236, ptr %31, align 8, !tbaa !5
  %238 = load ptr, ptr %31, align 8, !tbaa !5
  %239 = icmp ne ptr %238, null
  br i1 %239, label %240, label %261

240:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #6
  %241 = load ptr, ptr %31, align 8, !tbaa !5
  %242 = load ptr, ptr %56, align 8, !tbaa !141
  %243 = getelementptr inbounds ptr, ptr %242, i64 24
  %244 = load ptr, ptr %243, align 8
  invoke void %244(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(76) %241)
          to label %245 unwind label %252

245:                                              ; preds = %240
  %246 = 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) %32)
          to label %247 unwind label %256

247:                                              ; preds = %245
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #6
  br label %374

248:                                              ; preds = %264, %261, %235, %231
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %15, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %16, align 4
  br label %383

252:                                              ; preds = %240
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %15, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %16, align 4
  br label %260

256:                                              ; preds = %245
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %15, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  br label %260

260:                                              ; preds = %256, %252
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #6
  br label %383

261:                                              ; preds = %237
  %262 = load ptr, ptr %30, align 8, !tbaa !5
  %263 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %262)
          to label %264 unwind label %248

264:                                              ; preds = %261
  %265 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_9SPIRUndefEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %263)
          to label %266 unwind label %248

266:                                              ; preds = %264
  %267 = icmp ne ptr %265, null
  br i1 %267, label %268, label %287

268:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #6
  %269 = load ptr, ptr %30, align 8, !tbaa !5
  %270 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %269)
          to label %271 unwind label %278

271:                                              ; preds = %268
  %272 = load ptr, ptr %56, align 8, !tbaa !141
  %273 = getelementptr inbounds ptr, ptr %272, i64 6
  %274 = load ptr, ptr %273, align 8
  invoke void %274(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %270, i1 noundef zeroext true)
          to label %275 unwind label %278

275:                                              ; preds = %271
  %276 = 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) %33)
          to label %277 unwind label %282

277:                                              ; preds = %275
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  br label %373

278:                                              ; preds = %271, %268
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %15, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %16, align 4
  br label %286

282:                                              ; preds = %275
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %15, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  br label %286

286:                                              ; preds = %282, %278
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  br label %383

287:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %288 = load ptr, ptr %30, align 8, !tbaa !5
  %289 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %288)
          to label %290 unwind label %313

290:                                              ; preds = %287
  %291 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %289)
          to label %292 unwind label %313

292:                                              ; preds = %290
  store ptr %291, ptr %34, align 8, !tbaa !5
  %293 = load ptr, ptr %34, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %293, i32 0, i32 3
  %295 = load i8, ptr %294, align 8, !tbaa !143, !range !11, !noundef !12
  %296 = trunc i8 %295 to i1
  br i1 %296, label %297, label %326

297:                                              ; preds = %292
  %298 = load ptr, ptr %30, align 8, !tbaa !5
  %299 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %298)
          to label %300 unwind label %313

300:                                              ; preds = %297
  %301 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL23expression_is_forwardedEj(ptr noundef nonnull align 8 dereferenceable(9848) %56, i32 noundef %299)
          to label %302 unwind label %313

302:                                              ; preds = %300
  br i1 %301, label %326, label %303

303:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #6
  %304 = load ptr, ptr %30, align 8, !tbaa !5
  %305 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %304)
          to label %306 unwind label %317

306:                                              ; preds = %303
  %307 = load ptr, ptr %56, align 8, !tbaa !141
  %308 = getelementptr inbounds ptr, ptr %307, i64 6
  %309 = load ptr, ptr %308, align 8
  invoke void %309(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %305, i1 noundef zeroext true)
          to label %310 unwind label %317

310:                                              ; preds = %306
  %311 = 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) %35)
          to label %312 unwind label %321

312:                                              ; preds = %310
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #6
  br label %371

313:                                              ; preds = %339, %335, %326, %300, %297, %290, %287
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %15, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %16, align 4
  br label %372

317:                                              ; preds = %306, %303
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %15, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %16, align 4
  br label %325

321:                                              ; preds = %310
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %15, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  br label %325

325:                                              ; preds = %321, %317
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #6
  br label %372

326:                                              ; preds = %302, %292
  %327 = load ptr, ptr %11, align 8, !tbaa !5
  %328 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %327)
          to label %329 unwind label %313

329:                                              ; preds = %326
  br i1 %328, label %347, label %330

330:                                              ; preds = %329
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %331, i32 0, i32 2
  %333 = load i32, ptr %332, align 8, !tbaa !124
  %334 = icmp eq i32 %333, 15
  br i1 %334, label %335, label %347

335:                                              ; preds = %330
  %336 = load ptr, ptr %11, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %336, i32 0, i32 1
  %338 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %337)
          to label %339 unwind label %313

339:                                              ; preds = %335
  %340 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %36, i32 0, i32 0
  store i32 %338, ptr %340, align 4
  %341 = load i32, ptr %26, align 4, !tbaa !140
  %342 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %36, i32 0, i32 0
  %343 = load i32, ptr %342, align 4
  %344 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 %343, i32 noundef %341, i32 noundef 35)
          to label %345 unwind label %313

345:                                              ; preds = %339
  %346 = zext i1 %344 to i8
  store i8 %346, ptr %9, align 1, !tbaa !9
  br label %347

347:                                              ; preds = %345, %330, %329
  %348 = load ptr, ptr %11, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %348, i32 0, i32 2
  %350 = load i32, ptr %349, align 8, !tbaa !124
  %351 = icmp eq i32 %350, 15
  br i1 %351, label %352, label %353

352:                                              ; preds = %347
  store i8 1, ptr %10, align 1, !tbaa !9
  br label %353

353:                                              ; preds = %352, %347
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #6
  %354 = load ptr, ptr %34, align 8, !tbaa !5
  %355 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %356 = trunc i8 %355 to i1
  %357 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %358 = trunc i8 %357 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(360) %354, i1 noundef zeroext %356, i1 noundef zeroext %358)
          to label %359 unwind label %362

359:                                              ; preds = %353
  %360 = 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) %37)
          to label %361 unwind label %366

361:                                              ; preds = %359
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #6
  br label %371

362:                                              ; preds = %353
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %15, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %16, align 4
  br label %370

366:                                              ; preds = %359
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %15, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  br label %370

370:                                              ; preds = %366, %362
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #6
  br label %372

371:                                              ; preds = %361, %312
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %373

372:                                              ; preds = %370, %325, %313
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %383

373:                                              ; preds = %371, %277
  br label %374

374:                                              ; preds = %373, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  %375 = load ptr, ptr %30, align 8, !tbaa !5
  %376 = load ptr, ptr %8, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %376, i32 0, i32 6
  %378 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %377) #6
  %379 = icmp ne ptr %375, %378
  br i1 %379, label %380, label %388

380:                                              ; preds = %374
  %381 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %382 unwind label %384

382:                                              ; preds = %380
  br label %388

383:                                              ; preds = %372, %286, %260, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  br label %394

384:                                              ; preds = %380
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %15, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %16, align 4
  br label %394

388:                                              ; preds = %382, %374
  %389 = load i32, ptr %26, align 4, !tbaa !140
  %390 = add i32 %389, 1
  store i32 %390, ptr %26, align 4, !tbaa !140
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %391

391:                                              ; preds = %388
  %392 = load ptr, ptr %28, align 8, !tbaa !5
  %393 = getelementptr inbounds %"class.spirv_cross::TypedID.309", ptr %392, i32 1
  store ptr %393, ptr %28, align 8, !tbaa !5
  br label %226

394:                                              ; preds = %384, %383
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %415

395:                                              ; preds = %230
  %396 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %397 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %396, i32 0, i32 23
  %398 = load i8, ptr %397, align 8, !tbaa !122, !range !11, !noundef !12
  %399 = trunc i8 %398 to i1
  %400 = zext i1 %399 to i64
  %401 = select i1 %399, ptr @.str.947, ptr @.str.135
  %402 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %401)
          to label %403 unwind label %409

403:                                              ; preds = %395
  %404 = load i8, ptr %17, align 1, !tbaa !9, !range !11, !noundef !12
  %405 = trunc i8 %404 to i1
  br i1 %405, label %406, label %413

406:                                              ; preds = %403
  %407 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.135)
          to label %408 unwind label %409

408:                                              ; preds = %406
  br label %413

409:                                              ; preds = %406, %395
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %15, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %16, align 4
  br label %415

413:                                              ; preds = %408, %403
  store i1 true, ptr %13, align 1
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  %414 = load i1, ptr %13, align 1
  br i1 %414, label %419, label %418

415:                                              ; preds = %409, %394
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %416

416:                                              ; preds = %415, %216, %194, %125, %113
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #6
  br label %417

417:                                              ; preds = %416, %109
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %661

418:                                              ; preds = %413
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %419

419:                                              ; preds = %418, %413
  br label %660

420:                                              ; preds = %66
  %421 = load ptr, ptr %11, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %421, i32 0, i32 2
  %423 = load i32, ptr %422, align 8, !tbaa !124
  %424 = icmp eq i32 %423, 15
  br i1 %424, label %425, label %477

425:                                              ; preds = %420
  %426 = load ptr, ptr %11, align 8, !tbaa !5
  %427 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %426, i32 0, i32 12
  %428 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %427) #6
  %429 = icmp eq i64 %428, 0
  br i1 %429, label %430, label %477

430:                                              ; preds = %425
  %431 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %432 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %431, i32 0, i32 36
  %433 = load i8, ptr %432, align 1, !tbaa !149, !range !11, !noundef !12
  %434 = trunc i8 %433 to i1
  br i1 %434, label %435, label %441

435:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.983, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %436 unwind label %437

436:                                              ; preds = %435
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #6
  store i32 1, ptr %12, align 4
  br label %660

437:                                              ; preds = %435
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %15, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %16, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #6
  br label %661

441:                                              ; preds = %430
  %442 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %443 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %442, i32 0, i32 24
  %444 = load i8, ptr %443, align 1, !tbaa !123, !range !11, !noundef !12
  %445 = trunc i8 %444 to i1
  br i1 %445, label %446, label %456

446:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #6
  %447 = load ptr, ptr %11, align 8, !tbaa !5
  %448 = load ptr, ptr %56, align 8, !tbaa !141
  %449 = getelementptr inbounds ptr, ptr %448, i64 19
  %450 = load ptr, ptr %449, align 8
  call void %450(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %447, i32 noundef 0)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(6) @.str.984)
          to label %451 unwind label %452

451:                                              ; preds = %446
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #6
  store i32 1, ptr %12, align 4
  br label %660

452:                                              ; preds = %446
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %15, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #6
  br label %661

456:                                              ; preds = %441
  %457 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %458 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %457, i32 0, i32 23
  %459 = load i8, ptr %458, align 8, !tbaa !122, !range !11, !noundef !12
  %460 = trunc i8 %459 to i1
  br i1 %460, label %461, label %467

461:                                              ; preds = %456
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.984, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %462 unwind label %463

462:                                              ; preds = %461
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  store i32 1, ptr %12, align 4
  br label %660

463:                                              ; preds = %461
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %15, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %16, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  br label %661

467:                                              ; preds = %456
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #6
  %468 = load ptr, ptr %11, align 8, !tbaa !5
  %469 = load ptr, ptr %56, align 8, !tbaa !141
  %470 = getelementptr inbounds ptr, ptr %469, i64 19
  %471 = load ptr, ptr %470, align 8
  call void %471(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %468, i32 noundef 0)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 1 dereferenceable(4) @.str.985)
          to label %472 unwind label %473

472:                                              ; preds = %467
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #6
  store i32 1, ptr %12, align 4
  br label %660

473:                                              ; preds = %467
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %15, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #6
  br label %661

477:                                              ; preds = %425, %420
  %478 = load ptr, ptr %8, align 8, !tbaa !5
  %479 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %478)
  %480 = icmp eq i32 %479, 1
  br i1 %480, label %481, label %529

481:                                              ; preds = %477
  store i1 false, ptr %42, align 1
  %482 = load ptr, ptr %8, align 8, !tbaa !5
  %483 = load ptr, ptr %56, align 8, !tbaa !141
  %484 = getelementptr inbounds ptr, ptr %483, i64 25
  %485 = load ptr, ptr %484, align 8
  call void %485(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(360) %482, i32 noundef 0)
  %486 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %487 = trunc i8 %486 to i1
  br i1 %487, label %488, label %525

488:                                              ; preds = %481
  %489 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %490 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %489, i32 0, i32 18
  %491 = load i32, ptr %490, align 8, !tbaa !139
  %492 = icmp ne i32 %491, 2
  br i1 %492, label %493, label %525

493:                                              ; preds = %488
  %494 = load ptr, ptr %11, align 8, !tbaa !5
  %495 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %494, i32 0, i32 2
  %496 = load i32, ptr %495, align 8, !tbaa !124
  %497 = icmp eq i32 %496, 2
  br i1 %497, label %498, label %525

498:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 336, ptr %43) #6
  %499 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %43, ptr noundef nonnull align 8 dereferenceable(336) %499)
          to label %500 unwind label %511

500:                                              ; preds = %498
  %501 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %502 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %501, i32 0, i32 18
  %503 = load i32, ptr %502, align 8, !tbaa !139
  %504 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %43, i32 0, i32 2
  store i32 %503, ptr %504, align 8, !tbaa !124
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #6
  %505 = load ptr, ptr %56, align 8, !tbaa !141
  %506 = getelementptr inbounds ptr, ptr %505, i64 19
  %507 = load ptr, ptr %506, align 8
  invoke void %507(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %43, i32 noundef 0)
          to label %508 unwind label %515

508:                                              ; preds = %500
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %509 unwind label %519

509:                                              ; preds = %508
  %510 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %43) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %43) #6
  br label %525

511:                                              ; preds = %498
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %15, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %16, align 4
  br label %524

515:                                              ; preds = %500
  %516 = landingpad { ptr, i32 }
          cleanup
  %517 = extractvalue { ptr, i32 } %516, 0
  store ptr %517, ptr %15, align 8
  %518 = extractvalue { ptr, i32 } %516, 1
  store i32 %518, ptr %16, align 4
  br label %523

519:                                              ; preds = %508
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %15, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %523

523:                                              ; preds = %519, %515
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %43) #6
  br label %524

524:                                              ; preds = %523, %511
  call void @llvm.lifetime.end.p0(i64 336, ptr %43) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %661

525:                                              ; preds = %509, %493, %488, %481
  store i1 true, ptr %42, align 1
  store i32 1, ptr %12, align 4
  %526 = load i1, ptr %42, align 1
  br i1 %526, label %528, label %527

527:                                              ; preds = %525
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %528

528:                                              ; preds = %527, %525
  br label %660

529:                                              ; preds = %477
  store i1 false, ptr %46, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #6
  %530 = load ptr, ptr %11, align 8, !tbaa !5
  %531 = load ptr, ptr %56, align 8, !tbaa !141
  %532 = getelementptr inbounds ptr, ptr %531, i64 19
  %533 = load ptr, ptr %532, align 8
  call void %533(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %530, i32 noundef 0)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.718)
          to label %534 unwind label %542

534:                                              ; preds = %529
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  store i32 0, ptr %48, align 4, !tbaa !140
  br label %535

535:                                              ; preds = %605, %534
  %536 = load i32, ptr %48, align 4, !tbaa !140
  %537 = load ptr, ptr %8, align 8, !tbaa !5
  %538 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %537)
          to label %539 unwind label %546

539:                                              ; preds = %535
  %540 = icmp ult i32 %536, %538
  br i1 %540, label %550, label %541

541:                                              ; preds = %539
  store i32 4, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %609

542:                                              ; preds = %529
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %15, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #6
  br label %661

546:                                              ; preds = %601, %594, %550, %535
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %15, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %16, align 4
  br label %608

550:                                              ; preds = %539
  %551 = load ptr, ptr %8, align 8, !tbaa !5
  %552 = load i32, ptr %48, align 4, !tbaa !140
  %553 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEj(ptr noundef nonnull align 8 dereferenceable(360) %551, i32 noundef %552)
          to label %554 unwind label %546

554:                                              ; preds = %550
  %555 = icmp ne i32 %553, 0
  br i1 %555, label %556, label %576

556:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #6
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = load i32, ptr %48, align 4, !tbaa !140
  %559 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEj(ptr noundef nonnull align 8 dereferenceable(360) %557, i32 noundef %558)
          to label %560 unwind label %567

560:                                              ; preds = %556
  %561 = load ptr, ptr %56, align 8, !tbaa !141
  %562 = getelementptr inbounds ptr, ptr %561, i64 6
  %563 = load ptr, ptr %562, align 8
  invoke void %563(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %559, i1 noundef zeroext true)
          to label %564 unwind label %567

564:                                              ; preds = %560
  %565 = 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) %49)
          to label %566 unwind label %571

566:                                              ; preds = %564
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  br label %594

567:                                              ; preds = %560, %556
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %15, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %16, align 4
  br label %575

571:                                              ; preds = %564
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %15, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  br label %575

575:                                              ; preds = %571, %567
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  br label %608

576:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #6
  %577 = load ptr, ptr %8, align 8, !tbaa !5
  %578 = load i32, ptr %48, align 4, !tbaa !140
  %579 = load ptr, ptr %56, align 8, !tbaa !141
  %580 = getelementptr inbounds ptr, ptr %579, i64 25
  %581 = load ptr, ptr %580, align 8
  invoke void %581(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(360) %577, i32 noundef %578)
          to label %582 unwind label %585

582:                                              ; preds = %576
  %583 = 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) %50)
          to label %584 unwind label %589

584:                                              ; preds = %582
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #6
  br label %594

585:                                              ; preds = %576
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %15, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %16, align 4
  br label %593

589:                                              ; preds = %582
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %15, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #6
  br label %593

593:                                              ; preds = %589, %585
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #6
  br label %608

594:                                              ; preds = %584, %566
  %595 = load i32, ptr %48, align 4, !tbaa !140
  %596 = add i32 %595, 1
  %597 = load ptr, ptr %8, align 8, !tbaa !5
  %598 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %597)
          to label %599 unwind label %546

599:                                              ; preds = %594
  %600 = icmp ult i32 %596, %598
  br i1 %600, label %601, label %604

601:                                              ; preds = %599
  %602 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %603 unwind label %546

603:                                              ; preds = %601
  br label %604

604:                                              ; preds = %603, %599
  br label %605

605:                                              ; preds = %604
  %606 = load i32, ptr %48, align 4, !tbaa !140
  %607 = add i32 %606, 1
  store i32 %607, ptr %48, align 4, !tbaa !140
  br label %535, !llvm.loop !150

608:                                              ; preds = %593, %575, %546
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %659

609:                                              ; preds = %541
  %610 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.135)
          to label %611 unwind label %637

611:                                              ; preds = %609
  %612 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %613 = trunc i8 %612 to i1
  br i1 %613, label %614, label %655

614:                                              ; preds = %611
  %615 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %616 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %615, i32 0, i32 18
  %617 = load i32, ptr %616, align 8, !tbaa !139
  %618 = icmp ne i32 %617, 2
  br i1 %618, label %619, label %655

619:                                              ; preds = %614
  %620 = load ptr, ptr %11, align 8, !tbaa !5
  %621 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %620, i32 0, i32 2
  %622 = load i32, ptr %621, align 8, !tbaa !124
  %623 = icmp eq i32 %622, 2
  br i1 %623, label %624, label %655

624:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 336, ptr %51) #6
  %625 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %51, ptr noundef nonnull align 8 dereferenceable(336) %625)
          to label %626 unwind label %641

626:                                              ; preds = %624
  %627 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %56, i32 0, i32 21
  %628 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %627, i32 0, i32 18
  %629 = load i32, ptr %628, align 8, !tbaa !139
  %630 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %51, i32 0, i32 2
  store i32 %629, ptr %630, align 8, !tbaa !124
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #6
  %631 = load ptr, ptr %56, align 8, !tbaa !141
  %632 = getelementptr inbounds ptr, ptr %631, i64 19
  %633 = load ptr, ptr %632, align 8
  invoke void %633(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %56, ptr noundef nonnull align 8 dereferenceable(336) %51, i32 noundef 0)
          to label %634 unwind label %645

634:                                              ; preds = %626
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %635 unwind label %649

635:                                              ; preds = %634
  %636 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %51) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %51) #6
  br label %655

637:                                              ; preds = %609
  %638 = landingpad { ptr, i32 }
          cleanup
  %639 = extractvalue { ptr, i32 } %638, 0
  store ptr %639, ptr %15, align 8
  %640 = extractvalue { ptr, i32 } %638, 1
  store i32 %640, ptr %16, align 4
  br label %659

641:                                              ; preds = %624
  %642 = landingpad { ptr, i32 }
          cleanup
  %643 = extractvalue { ptr, i32 } %642, 0
  store ptr %643, ptr %15, align 8
  %644 = extractvalue { ptr, i32 } %642, 1
  store i32 %644, ptr %16, align 4
  br label %654

645:                                              ; preds = %626
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %15, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %16, align 4
  br label %653

649:                                              ; preds = %634
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %15, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  br label %653

653:                                              ; preds = %649, %645
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %51) #6
  br label %654

654:                                              ; preds = %653, %641
  call void @llvm.lifetime.end.p0(i64 336, ptr %51) #6
  br label %659

655:                                              ; preds = %635, %619, %614, %611
  store i1 true, ptr %46, align 1
  store i32 1, ptr %12, align 4
  %656 = load i1, ptr %46, align 1
  br i1 %656, label %658, label %657

657:                                              ; preds = %655
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %658

658:                                              ; preds = %657, %655
  br label %660

659:                                              ; preds = %654, %637, %608
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %661

660:                                              ; preds = %658, %528, %472, %462, %451, %436, %419, %63
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  ret void

661:                                              ; preds = %659, %542, %524, %473, %463, %452, %437, %417
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %662

662:                                              ; preds = %661
  %663 = load ptr, ptr %15, align 8
  %664 = load i32, ptr %16, align 4
  %665 = insertvalue { ptr, i32 } poison, ptr %663, 0
  %666 = insertvalue { ptr, i32 } %665, i32 %664, 1
  resume { ptr, i32 } %666
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL23expression_is_forwardedEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEj(ptr noundef nonnull align 8 dereferenceable(360), i32 noundef) #5 align 2

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 = { 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 #3 = { "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 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 = { 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 #6 = { nounwind }

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


; 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] }
%"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::TypedID.280" = type { i32 }
%"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.std::allocator.71" = type { i8 }

@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.946 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.947 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.982 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.983 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.984 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.985 = external hidden unnamed_addr constant [4 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 i32 @__gxx_personality_v0(...)

; 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 #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #2 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 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_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #3

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(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(360) %2, i1 noundef zeroext %3, i1 noundef zeroext %4) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"struct.spirv_cross::SPIRType", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"struct.spirv_cross::SPIRType", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"struct.spirv_cross::SPIRType", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = getelementptr inbounds i8, ptr %2, i64 12
  %31 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
  %32 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %31)
  %33 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler10is_pointerERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
  br i1 %33, label %34, label %36

34:                                               ; preds = %5
  %35 = getelementptr inbounds i8, ptr %1, i64 8256
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %35)
  br label %380

36:                                               ; preds = %5
  %37 = getelementptr inbounds i8, ptr %2, i64 272
  %38 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %37) #6
  br i1 %38, label %235, label %39

39:                                               ; preds = %36
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br i1 %3, label %40, label %47

40:                                               ; preds = %39
  %41 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %42 unwind label %65

42:                                               ; preds = %40
  br i1 %41, label %43, label %47

43:                                               ; preds = %42
  %44 = getelementptr inbounds i8, ptr %1, i64 8399
  %45 = load i8, ptr %44, align 1, !tbaa !5, !range !118, !noundef !119
  %46 = trunc nuw i8 %45 to i1
  br label %47

47:                                               ; preds = %43, %42, %39
  %.not169 = phi i1 [ true, %42 ], [ true, %39 ], [ %46, %43 ]
  %48 = getelementptr inbounds i8, ptr %1, i64 8384
  %49 = load i8, ptr %48, align 8, !tbaa !120, !range !118, !noundef !119
  %50 = trunc nuw i8 %49 to i1
  br i1 %50, label %51, label %74

51:                                               ; preds = %47
  %52 = getelementptr inbounds i8, ptr %1, i64 8385
  %53 = load i8, ptr %52, align 1, !tbaa !121, !range !118, !noundef !119
  %54 = trunc nuw i8 %53 to i1
  %55 = getelementptr inbounds i8, ptr %32, i64 16
  %56 = load i32, ptr %55, align 8
  %57 = icmp eq i32 %56, 15
  %or.cond = select i1 %54, i1 %57, i1 false
  br i1 %or.cond, label %58, label %74

58:                                               ; preds = %51
  %59 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %60 unwind label %67

60:                                               ; preds = %58
  br i1 %59, label %._crit_edge182, label %61

._crit_edge182:                                   ; preds = %60
  %.pre = load i8, ptr %48, align 8, !tbaa !120, !range !118
  br label %74

61:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %62 unwind label %69

62:                                               ; preds = %61
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.946)
          to label %63 unwind label %71

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

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

67:                                               ; preds = %119, %85, %58
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %234

69:                                               ; preds = %61
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %73

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

73:                                               ; preds = %71, %69
  %.pn = phi { ptr, i32 } [ %72, %71 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  br label %234

74:                                               ; preds = %._crit_edge182, %51, %47
  %75 = phi i8 [ %.pre, %._crit_edge182 ], [ %49, %51 ], [ %49, %47 ]
  %76 = trunc nuw i8 %75 to i1
  br i1 %76, label %77, label %116

77:                                               ; preds = %74
  %78 = getelementptr inbounds i8, ptr %1, i64 8385
  %79 = load i8, ptr %78, align 1, !tbaa !121, !range !118, !noundef !119
  %80 = trunc nuw i8 %79 to i1
  br i1 %80, label %81, label %116

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %1, i64 8398
  %83 = load i8, ptr %82, align 2, !tbaa !122, !range !118, !noundef !119
  %84 = trunc nuw i8 %83 to i1
  br i1 %84, label %85, label %116

85:                                               ; preds = %81
  %86 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %87 unwind label %67

87:                                               ; preds = %85
  %brmerge.not = select i1 %86, i1 %.not169, i1 false
  br i1 %brmerge.not, label %88, label %._crit_edge183

._crit_edge183:                                   ; preds = %87
  %.pre184 = load i8, ptr %48, align 8, !tbaa !120, !range !118
  br label %116

88:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %8) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %8, i32 noundef 0)
          to label %89 unwind label %101

89:                                               ; preds = %88
  br i1 %4, label %90, label %105

90:                                               ; preds = %89
  %91 = getelementptr inbounds i8, ptr %1, i64 8376
  %92 = load i32, ptr %91, align 8, !tbaa !123
  %.not = icmp ne i32 %92, 2
  %93 = getelementptr inbounds i8, ptr %32, i64 16
  %94 = load i32, ptr %93, align 8
  %95 = icmp eq i32 %94, 2
  %or.cond160 = select i1 %.not, i1 %95, i1 false
  br i1 %or.cond160, label %96, label %105

96:                                               ; preds = %90
  %97 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %8, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %98 unwind label %103

98:                                               ; preds = %96
  %99 = load i32, ptr %91, align 8, !tbaa !123
  %100 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 %99, ptr %100, align 8, !tbaa !124
  br label %105

101:                                              ; preds = %88
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %115

103:                                              ; preds = %96
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %114

105:                                              ; preds = %98, %90, %89
  %.0108 = phi ptr [ %8, %98 ], [ %32, %90 ], [ %32, %89 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0108)
          to label %106 unwind label %109

106:                                              ; preds = %105
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.982)
          to label %107 unwind label %111

107:                                              ; preds = %106
  %108 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %8) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %8) #6
  br label %130

109:                                              ; preds = %105
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %113

111:                                              ; preds = %106
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %113

113:                                              ; preds = %111, %109
  %.pn112 = phi { ptr, i32 } [ %112, %111 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %114

114:                                              ; preds = %113, %103
  %.pn112.pn = phi { ptr, i32 } [ %.pn112, %113 ], [ %104, %103 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %8) #6
  br label %115

115:                                              ; preds = %114, %101
  %.pn112.pn.pn = phi { ptr, i32 } [ %.pn112.pn, %114 ], [ %102, %101 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %8) #6
  br label %234

116:                                              ; preds = %._crit_edge183, %81, %77, %74
  %117 = phi i8 [ %.pre184, %._crit_edge183 ], [ %75, %81 ], [ %75, %77 ], [ %75, %74 ]
  %118 = trunc nuw i8 %117 to i1
  br i1 %118, label %119, label %121

119:                                              ; preds = %116
  %120 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.946)
          to label %130 unwind label %67

121:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %122 unwind label %125

122:                                              ; preds = %121
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.718)
          to label %123 unwind label %127

123:                                              ; preds = %122
  %124 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %130

125:                                              ; preds = %121
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %129

127:                                              ; preds = %122
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %129

129:                                              ; preds = %127, %125
  %.pn116 = phi { ptr, i32 } [ %128, %127 ], [ %126, %125 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %234

130:                                              ; preds = %107, %119, %123, %63
  %.0109 = phi i1 [ false, %119 ], [ false, %123 ], [ true, %107 ], [ false, %63 ]
  %131 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %37) #6
  %132 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %37) #6
  %.not118171 = icmp eq ptr %131, %132
  br i1 %.not118171, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %130
  %133 = getelementptr inbounds i8, ptr %32, i64 16
  %134 = getelementptr inbounds i8, ptr %32, i64 8
  br label %139

._crit_edge:                                      ; preds = %226, %130
  %135 = load i8, ptr %48, align 8, !tbaa !120, !range !118, !noundef !119
  %136 = trunc nuw i8 %135 to i1
  %137 = select i1 %136, ptr @.str.947, ptr @.str.135
  %138 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %137)
          to label %229 unwind label %232

139:                                              ; preds = %.lr.ph, %226
  %.073176 = phi i1 [ %3, %.lr.ph ], [ %.3, %226 ]
  %.074175 = phi i1 [ %4, %.lr.ph ], [ %.377, %226 ]
  %.082174 = phi ptr [ %131, %.lr.ph ], [ %228, %226 ]
  %.0107172 = phi i32 [ 0, %.lr.ph ], [ %227, %226 ]
  %140 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.082174)
  %141 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRConstantOpEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %140)
          to label %142 unwind label %150

142:                                              ; preds = %139
  %.not119 = icmp eq ptr %141, null
  br i1 %.not119, label %157, label %143

143:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  %144 = load ptr, ptr %1, align 8, !tbaa !138
  %145 = getelementptr inbounds i8, ptr %144, i64 192
  %146 = load ptr, ptr %145, align 8
  invoke void %146(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(76) %141)
          to label %147 unwind label %152

147:                                              ; preds = %143
  %148 = 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) %13)
          to label %149 unwind label %154

149:                                              ; preds = %147
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %220

150:                                              ; preds = %157, %139
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %234

152:                                              ; preds = %143
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %156

154:                                              ; preds = %147
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %156

156:                                              ; preds = %154, %152
  %.pn128 = phi { ptr, i32 } [ %155, %154 ], [ %153, %152 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %234

157:                                              ; preds = %142
  %158 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.082174)
  %159 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_9SPIRUndefEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %158)
          to label %160 unwind label %150

160:                                              ; preds = %157
  %.not120 = icmp eq ptr %159, null
  br i1 %.not120, label %174, label %161

161:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  %162 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.082174)
  %163 = load ptr, ptr %1, align 8, !tbaa !138
  %164 = getelementptr inbounds i8, ptr %163, i64 48
  %165 = load ptr, ptr %164, align 8
  invoke void %165(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %162, i1 noundef zeroext true)
          to label %166 unwind label %169

166:                                              ; preds = %161
  %167 = 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) %14)
          to label %168 unwind label %171

168:                                              ; preds = %166
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %220

169:                                              ; preds = %161
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %173

171:                                              ; preds = %166
  %172 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %173

173:                                              ; preds = %171, %169
  %.pn126 = phi { ptr, i32 } [ %172, %171 ], [ %170, %169 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %234

174:                                              ; preds = %160
  %175 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.082174)
  %176 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %175)
          to label %177 unwind label %193

177:                                              ; preds = %174
  %178 = getelementptr inbounds i8, ptr %176, i64 264
  %179 = load i8, ptr %178, align 8, !tbaa !140, !range !118, !noundef !119
  %180 = trunc nuw i8 %179 to i1
  br i1 %180, label %181, label %200

181:                                              ; preds = %177
  %182 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.082174)
  %183 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL23expression_is_forwardedEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %182)
          to label %184 unwind label %193

184:                                              ; preds = %181
  br i1 %183, label %200, label %185

185:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  %186 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.082174)
  %187 = load ptr, ptr %1, align 8, !tbaa !138
  %188 = getelementptr inbounds i8, ptr %187, i64 48
  %189 = load ptr, ptr %188, align 8
  invoke void %189(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %186, i1 noundef zeroext true)
          to label %190 unwind label %195

190:                                              ; preds = %185
  %191 = 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 %192 unwind label %197

192:                                              ; preds = %190
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %220

193:                                              ; preds = %207, %205, %200, %181, %174
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %234

195:                                              ; preds = %185
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %199

197:                                              ; preds = %190
  %198 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %199

199:                                              ; preds = %197, %195
  %.pn121 = phi { ptr, i32 } [ %198, %197 ], [ %196, %195 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %234

200:                                              ; preds = %184, %177
  %201 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %202 unwind label %193

202:                                              ; preds = %200
  %203 = load i32, ptr %133, align 8
  %204 = icmp ne i32 %203, 15
  %or.cond164.not = select i1 %201, i1 true, i1 %204
  br i1 %or.cond164.not, label %209, label %205

205:                                              ; preds = %202
  %206 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %134)
          to label %207 unwind label %193

207:                                              ; preds = %205
  %208 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %206, i32 noundef %.0107172, i32 noundef 35)
          to label %._crit_edge185 unwind label %193

._crit_edge185:                                   ; preds = %207
  %.pre186 = load i32, ptr %133, align 8, !tbaa !124
  br label %209

209:                                              ; preds = %._crit_edge185, %202
  %210 = phi i32 [ %203, %202 ], [ %.pre186, %._crit_edge185 ]
  %.1 = phi i1 [ %.073176, %202 ], [ %208, %._crit_edge185 ]
  %211 = icmp eq i32 %210, 15
  %spec.select = select i1 %211, i1 true, i1 %.074175
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %176, i1 noundef zeroext %.1, i1 noundef zeroext %spec.select)
          to label %212 unwind label %215

212:                                              ; preds = %209
  %213 = 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 %214 unwind label %217

214:                                              ; preds = %212
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %220

215:                                              ; preds = %209
  %216 = landingpad { ptr, i32 }
          cleanup
  br label %219

217:                                              ; preds = %212
  %218 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %219

219:                                              ; preds = %217, %215
  %.pn123 = phi { ptr, i32 } [ %218, %217 ], [ %216, %215 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %234

220:                                              ; preds = %192, %214, %168, %149
  %.377 = phi i1 [ %.074175, %149 ], [ %.074175, %168 ], [ %spec.select, %214 ], [ %.074175, %192 ]
  %.3 = phi i1 [ %.073176, %149 ], [ %.073176, %168 ], [ %.1, %214 ], [ %.073176, %192 ]
  %221 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %37) #6
  %.not131 = icmp eq ptr %.082174, %221
  br i1 %.not131, label %226, label %222

222:                                              ; preds = %220
  %223 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %226 unwind label %224

224:                                              ; preds = %222
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %234

226:                                              ; preds = %222, %220
  %227 = add i32 %.0107172, 1
  %228 = getelementptr inbounds i8, ptr %.082174, i64 4
  %.not118 = icmp eq ptr %228, %132
  br i1 %.not118, label %._crit_edge, label %139

229:                                              ; preds = %._crit_edge
  br i1 %.0109, label %230, label %380

230:                                              ; preds = %229
  %231 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.135)
          to label %380 unwind label %232

232:                                              ; preds = %230, %._crit_edge
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %234

234:                                              ; preds = %67, %73, %115, %129, %224, %193, %199, %219, %173, %156, %150, %232, %65
  %.pn132.pn.pn.pn = phi { ptr, i32 } [ %66, %65 ], [ %68, %67 ], [ %.pn116, %129 ], [ %.pn112.pn.pn, %115 ], [ %.pn, %73 ], [ %233, %232 ], [ %225, %224 ], [ %.pn128, %156 ], [ %.pn126, %173 ], [ %151, %150 ], [ %.pn123, %219 ], [ %194, %193 ], [ %.pn121, %199 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %381

235:                                              ; preds = %36
  %236 = getelementptr inbounds i8, ptr %32, i64 16
  %237 = load i32, ptr %236, align 8, !tbaa !124
  %238 = icmp eq i32 %237, 15
  br i1 %238, label %239, label %277

239:                                              ; preds = %235
  %240 = getelementptr inbounds i8, ptr %32, i64 136
  %241 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %240) #6
  %242 = icmp eq i64 %241, 0
  br i1 %242, label %243, label %277

243:                                              ; preds = %239
  %244 = getelementptr inbounds i8, ptr %1, i64 8397
  %245 = load i8, ptr %244, align 1, !tbaa !146, !range !118, !noundef !119
  %246 = trunc nuw i8 %245 to i1
  br i1 %246, label %247, label %251

247:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.983, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %248 unwind label %249

248:                                              ; preds = %247
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  br label %380

249:                                              ; preds = %247
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  br label %381

251:                                              ; preds = %243
  %252 = getelementptr inbounds i8, ptr %1, i64 8385
  %253 = load i8, ptr %252, align 1, !tbaa !121, !range !118, !noundef !119
  %254 = trunc nuw i8 %253 to i1
  br i1 %254, label %255, label %262

255:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  %256 = load ptr, ptr %1, align 8, !tbaa !138
  %257 = getelementptr inbounds i8, ptr %256, i64 152
  %258 = load ptr, ptr %257, align 8
  call void %258(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %32, i32 noundef 0)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(6) @.str.984)
          to label %259 unwind label %260

259:                                              ; preds = %255
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %380

260:                                              ; preds = %255
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %381

262:                                              ; preds = %251
  %263 = getelementptr inbounds i8, ptr %1, i64 8384
  %264 = load i8, ptr %263, align 8, !tbaa !120, !range !118, !noundef !119
  %265 = trunc nuw i8 %264 to i1
  br i1 %265, label %266, label %270

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

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

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

270:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #6
  %271 = load ptr, ptr %1, align 8, !tbaa !138
  %272 = getelementptr inbounds i8, ptr %271, i64 152
  %273 = load ptr, ptr %272, align 8
  call void %273(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %32, i32 noundef 0)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(4) @.str.985)
          to label %274 unwind label %275

274:                                              ; preds = %270
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  br label %380

275:                                              ; preds = %270
  %276 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  br label %381

277:                                              ; preds = %239, %235
  %278 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %279 = icmp eq i32 %278, 1
  br i1 %279, label %280, label %307

280:                                              ; preds = %277
  %281 = load ptr, ptr %1, align 8, !tbaa !138
  %282 = getelementptr inbounds i8, ptr %281, i64 200
  %283 = load ptr, ptr %282, align 8
  tail call void %283(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(360) %2, i32 noundef 0)
  br i1 %4, label %284, label %380

284:                                              ; preds = %280
  %285 = getelementptr inbounds i8, ptr %1, i64 8376
  %286 = load i32, ptr %285, align 8, !tbaa !123
  %.not149 = icmp ne i32 %286, 2
  %287 = load i32, ptr %236, align 8
  %288 = icmp eq i32 %287, 2
  %or.cond166 = select i1 %.not149, i1 %288, i1 false
  br i1 %or.cond166, label %289, label %380

289:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %21) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %21, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %290 unwind label %299

290:                                              ; preds = %289
  %291 = load i32, ptr %285, align 8, !tbaa !123
  %292 = getelementptr inbounds i8, ptr %21, i64 16
  store i32 %291, ptr %292, align 8, !tbaa !124
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  %293 = load ptr, ptr %1, align 8, !tbaa !138
  %294 = getelementptr inbounds i8, ptr %293, i64 152
  %295 = load ptr, ptr %294, align 8
  invoke void %295(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %21, i32 noundef 0)
          to label %296 unwind label %301

296:                                              ; preds = %290
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %297 unwind label %303

297:                                              ; preds = %296
  %298 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %21) #6
  br label %380

299:                                              ; preds = %289
  %300 = landingpad { ptr, i32 }
          cleanup
  br label %306

301:                                              ; preds = %290
  %302 = landingpad { ptr, i32 }
          cleanup
  br label %305

303:                                              ; preds = %296
  %304 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  br label %305

305:                                              ; preds = %303, %301
  %.pn150 = phi { ptr, i32 } [ %304, %303 ], [ %302, %301 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #6
  br label %306

306:                                              ; preds = %305, %299
  %.pn150.pn = phi { ptr, i32 } [ %.pn150, %305 ], [ %300, %299 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %21) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %381

307:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  %308 = load ptr, ptr %1, align 8, !tbaa !138
  %309 = getelementptr inbounds i8, ptr %308, i64 152
  %310 = load ptr, ptr %309, align 8
  call void %310(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %32, i32 noundef 0)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull @.str.718)
          to label %311 unwind label %314

311:                                              ; preds = %307
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  %312 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not181 = icmp eq i32 %312, 0
  br i1 %.not181, label %._crit_edge180, label %.lr.ph179

._crit_edge180:                                   ; preds = %350, %311
  %313 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.135)
          to label %353 unwind label %369

314:                                              ; preds = %307
  %315 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %381

316:                                              ; preds = %348
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %379

.lr.ph179:                                        ; preds = %311, %350
  %.0177 = phi i32 [ %345, %350 ], [ 0, %311 ]
  %318 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %.0177)
  %.not141 = icmp eq i32 %318, 0
  br i1 %.not141, label %332, label %319

319:                                              ; preds = %.lr.ph179
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  %320 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %.0177)
  %321 = load ptr, ptr %1, align 8, !tbaa !138
  %322 = getelementptr inbounds i8, ptr %321, i64 48
  %323 = load ptr, ptr %322, align 8
  invoke void %323(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %320, i1 noundef zeroext true)
          to label %324 unwind label %327

324:                                              ; preds = %319
  %325 = 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) %25)
          to label %326 unwind label %329

326:                                              ; preds = %324
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %344

327:                                              ; preds = %319
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %331

329:                                              ; preds = %324
  %330 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %331

331:                                              ; preds = %329, %327
  %.pn144 = phi { ptr, i32 } [ %330, %329 ], [ %328, %327 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %379

332:                                              ; preds = %.lr.ph179
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  %333 = load ptr, ptr %1, align 8, !tbaa !138
  %334 = getelementptr inbounds i8, ptr %333, i64 200
  %335 = load ptr, ptr %334, align 8
  invoke void %335(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %.0177)
          to label %336 unwind label %339

336:                                              ; preds = %332
  %337 = 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) %26)
          to label %338 unwind label %341

338:                                              ; preds = %336
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %344

339:                                              ; preds = %332
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %343

341:                                              ; preds = %336
  %342 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %343

343:                                              ; preds = %341, %339
  %.pn142 = phi { ptr, i32 } [ %342, %341 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %379

344:                                              ; preds = %338, %326
  %345 = add nuw i32 %.0177, 1
  %346 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %347 = icmp ult i32 %345, %346
  br i1 %347, label %348, label %350

348:                                              ; preds = %344
  %349 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %350 unwind label %316

350:                                              ; preds = %344, %348
  %351 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %352 = icmp ult i32 %345, %351
  br i1 %352, label %.lr.ph179, label %._crit_edge180, !llvm.loop !147

353:                                              ; preds = %._crit_edge180
  br i1 %4, label %354, label %380

354:                                              ; preds = %353
  %355 = getelementptr inbounds i8, ptr %1, i64 8376
  %356 = load i32, ptr %355, align 8, !tbaa !123
  %.not137 = icmp ne i32 %356, 2
  %357 = load i32, ptr %236, align 8
  %358 = icmp eq i32 %357, 2
  %or.cond168 = select i1 %.not137, i1 %358, i1 false
  br i1 %or.cond168, label %359, label %380

359:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %27) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %27, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %360 unwind label %371

360:                                              ; preds = %359
  %361 = load i32, ptr %355, align 8, !tbaa !123
  %362 = getelementptr inbounds i8, ptr %27, i64 16
  store i32 %361, ptr %362, align 8, !tbaa !124
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  %363 = load ptr, ptr %1, align 8, !tbaa !138
  %364 = getelementptr inbounds i8, ptr %363, i64 152
  %365 = load ptr, ptr %364, align 8
  invoke void %365(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %27, i32 noundef 0)
          to label %366 unwind label %373

366:                                              ; preds = %360
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %367 unwind label %375

367:                                              ; preds = %366
  %368 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %27) #6
  br label %380

369:                                              ; preds = %._crit_edge180
  %370 = landingpad { ptr, i32 }
          cleanup
  br label %379

371:                                              ; preds = %359
  %372 = landingpad { ptr, i32 }
          cleanup
  br label %378

373:                                              ; preds = %360
  %374 = landingpad { ptr, i32 }
          cleanup
  br label %377

375:                                              ; preds = %366
  %376 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %377

377:                                              ; preds = %375, %373
  %.pn138 = phi { ptr, i32 } [ %376, %375 ], [ %374, %373 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #6
  br label %378

378:                                              ; preds = %377, %371
  %.pn138.pn = phi { ptr, i32 } [ %.pn138, %377 ], [ %372, %371 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %27) #6
  br label %379

379:                                              ; preds = %316, %331, %343, %378, %369
  %.pn146.pn = phi { ptr, i32 } [ %.pn138.pn, %378 ], [ %370, %369 ], [ %317, %316 ], [ %.pn144, %331 ], [ %.pn142, %343 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %381

380:                                              ; preds = %353, %354, %367, %280, %284, %297, %229, %230, %274, %267, %259, %248, %34
  ret void

381:                                              ; preds = %379, %314, %306, %275, %268, %260, %249, %234
  %.pn153 = phi { ptr, i32 } [ %250, %249 ], [ %261, %260 ], [ %269, %268 ], [ %276, %275 ], [ %.pn150.pn, %306 ], [ %.pn146.pn, %379 ], [ %315, %314 ], [ %.pn132.pn.pn.pn, %234 ]
  resume { ptr, i32 } %.pn153
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL23expression_is_forwardedEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRConstantOpEEEPT_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 zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_9SPIRUndefEEEPT_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 nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant7columnsEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEj(ptr noundef nonnull align 8 dereferenceable(360), i32 noundef) local_unnamed_addr #5 align 2

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 = { 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 #3 = { "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 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 = { 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 #6 = { nounwind }

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


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass