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

; 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"

%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.520", i32 }
%"class.spirv_cross::TypedID.520" = type { i32 }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.anon.544 = type { ptr }
%class.anon.545 = type { ptr, ptr }
%"class.spirv_cross::ParsedIR::LoopLock" = type { ptr }
%class.anon.546 = type { ptr, ptr, ptr }
%"class.std::unordered_map.547" = type { %"class.std::_Hashtable.548" }
%"class.std::_Hashtable.548" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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.std::pair.566" = type { i32, %"class.spirv_cross::TypedID.413" }
%"struct.std::pair.561" = type <{ %"struct.std::__detail::_Node_iterator.563", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator.563" = type { %"struct.std::__detail::_Node_iterator_base.564" }
%"struct.std::__detail::_Node_iterator_base.564" = type { ptr }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"struct.std::pair.444" = type <{ %"struct.std::__detail::_Node_iterator.446", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator.446" = type { %"struct.std::__detail::_Node_iterator_base.447" }
%"struct.std::__detail::_Node_iterator_base.447" = type { ptr }
%"class.std::allocator.71" = type { i8 }
%"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.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.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.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] }
%"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.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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.517", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.413"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.413"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.517" = type { %"class.spirv_cross::VectorView.518", i64, %"class.spirv_cross::AlignedBuffer.519" }
%"class.spirv_cross::VectorView.518" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.519" = type { [32 x i8] }
%"class.spirv_cross::CompilerMSL" = type <{ %"class.spirv_cross::CompilerGLSL", %"class.std::unordered_map.277", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [2 x i8], %"struct.spirv_cross::CompilerMSL::Options", %"class.std::set", %"class.std::map", %"class.std::unordered_map.299", %"class.std::map", %"class.std::unordered_map.299", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::set.313", %"class.std::set.313", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.319", %"class.std::unordered_map.336", i32, i32, i32, [8 x i32], %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8], %"class.std::map.351", %"class.std::unordered_map.357", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.374", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.377", %"class.std::map.380", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set.386", [8 x i32], i32, i32, i8, i8, [6 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::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_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 }
%"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 }
%"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.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.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_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_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 }
%"class.std::unordered_map.277" = type { %"class.std::_Hashtable.278" }
%"class.std::_Hashtable.278" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerMSL::Options" = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8] }>
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree.294" }
%"class.std::_Rb_tree.294" = type { %"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.299" = type { %"class.std::_Hashtable.300" }
%"class.std::_Hashtable.300" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", 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::set.313" = type { %"class.std::_Rb_tree.314" }
%"class.std::_Rb_tree.314" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.319" = type { %"class.std::_Hashtable.320" }
%"class.std::_Hashtable.320" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.336" = type { %"class.std::_Hashtable.337" }
%"class.std::_Hashtable.337" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.std::map.351" = type { %"class.std::_Rb_tree.352" }
%"class.std::_Rb_tree.352" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>, std::_Select1st<std::pair<const unsigned int, spirv_cross::MSLConstexprSampler>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.357" = type { %"class.std::_Hashtable.358" }
%"class.std::_Hashtable.358" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.374" = type { %"class.spirv_cross::VectorView.375", i64, %"class.spirv_cross::AlignedBuffer.376" }
%"class.spirv_cross::VectorView.375" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.376" = type { [64 x i8] }
%"class.spirv_cross::SmallVector.377" = type { %"class.spirv_cross::VectorView.378", i64, %"class.spirv_cross::AlignedBuffer.379" }
%"class.spirv_cross::VectorView.378" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.379" = type { [64 x i8] }
%"class.std::map.380" = type { %"class.std::_Rb_tree.381" }
%"class.std::_Rb_tree.381" = type { %"struct.std::_Rb_tree<spirv_cross::SetBindingPair, std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>, std::_Select1st<std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>>, std::less<spirv_cross::SetBindingPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::SetBindingPair, std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>, std::_Select1st<std::pair<const spirv_cross::SetBindingPair, std::pair<unsigned int, unsigned int>>>, std::less<spirv_cross::SetBindingPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_set.386" = type { %"class.std::_Hashtable.387" }
%"class.std::_Hashtable.387" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"struct.spirv_cross::SPIRConstantOp" = type <{ %"struct.spirv_cross::IVariant.base", i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::TypedID.414", [4 x i8] }>
%"struct.spirv_cross::SPIRUndef" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414" }

@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.305 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.914 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.915 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.916 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.917 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.918 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.919 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.920 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.922 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.923 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.924 = external hidden unnamed_addr constant [7 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #0 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL30get_patch_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL31get_patch_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) #2 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #5

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEv(ptr noundef nonnull align 8 dereferenceable(12482) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %4 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %5 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %6 = alloca %"class.spirv_cross::TypedID.413", align 4
  %7 = alloca i8, align 1
  %8 = alloca %"class.std::unordered_set", align 8
  %9 = alloca %"class.std::unordered_set", align 8
  %10 = alloca %class.anon.544, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i8, align 1
  %14 = alloca %class.anon.545, align 8
  %15 = alloca %"class.spirv_cross::ParsedIR::LoopLock", align 8
  %16 = alloca %class.anon.546, align 8
  %17 = alloca %"class.std::unordered_map.547", align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.spirv_cross::TypedID.413", align 4
  %31 = alloca i32, align 4
  %32 = alloca %"class.spirv_cross::TypedID.413", align 4
  %33 = alloca %"struct.std::pair.566", align 4
  %34 = alloca %"struct.std::pair.561", align 8
  %35 = alloca i32, align 4
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.spirv_cross::TypedID.413", align 4
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.spirv_cross::TypedID.413", align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca ptr, align 8
  %51 = alloca %"class.spirv_cross::TypedID.414", align 4
  %52 = alloca i8, align 1
  %53 = alloca i8, align 1
  %54 = alloca %"class.spirv_cross::TypedID.413", align 4
  %55 = alloca %"class.spirv_cross::TypedID.413", align 4
  %56 = alloca i8, align 1
  %57 = alloca i8, align 1
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca %"struct.std::pair.444", align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::allocator.71", align 1
  store ptr %0, ptr %2, align 8, !tbaa !5
  %68 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %3) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %4) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %5) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  %69 = call noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %68, ptr noundef nonnull align 4 dereferenceable(8) %3, ptr noundef nonnull align 4 dereferenceable(8) %4, ptr noundef nonnull align 4 dereferenceable(8) %5)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef %69)
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #8
  store i8 0, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 56, ptr %8) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  call void @llvm.lifetime.start.p0(i64 56, ptr %9) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #8
  %70 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %68, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %71 = getelementptr inbounds %class.anon.544, ptr %10, i32 0, i32 0
  store ptr %68, ptr %71, align 8, !tbaa !11
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %70, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %72 unwind label %91

72:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #8
  %73 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %68)
          to label %74 unwind label %95

74:                                               ; preds = %72
  %75 = zext i1 %73 to i8
  store i8 %75, ptr %13, align 1, !tbaa !9
  %76 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %68, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #8
  %77 = getelementptr inbounds %class.anon.545, ptr %14, i32 0, i32 0
  store ptr %68, ptr %77, align 8, !tbaa !13
  %78 = getelementptr inbounds %class.anon.545, ptr %14, i32 0, i32 1
  store ptr %13, ptr %78, align 8, !tbaa !5
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRConstantEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %76, ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %79 unwind label %99

79:                                               ; preds = %74
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %80 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %68, i32 0, i32 1
  invoke void @_ZNK11spirv_cross8ParsedIR21create_loop_soft_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8 %15, ptr noundef nonnull align 8 dereferenceable(1920) %80)
          to label %81 unwind label %103

81:                                               ; preds = %79
  %82 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %68, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #8
  %83 = getelementptr inbounds %class.anon.546, ptr %16, i32 0, i32 0
  store ptr %8, ptr %83, align 8, !tbaa !5
  %84 = getelementptr inbounds %class.anon.546, ptr %16, i32 0, i32 1
  store ptr %68, ptr %84, align 8, !tbaa !15
  %85 = getelementptr inbounds %class.anon.546, ptr %16, i32 0, i32 2
  store ptr %7, ptr %85, align 8, !tbaa !5
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %82, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %86 unwind label %107

86:                                               ; preds = %81
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #8
  %87 = load i8, ptr %7, align 1, !tbaa !9, !range !17, !noundef !18
  %88 = trunc i8 %87 to i1
  br i1 %88, label %89, label %115

89:                                               ; preds = %86
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(1) @.str.35)
          to label %90 unwind label %111

90:                                               ; preds = %89
  br label %115

91:                                               ; preds = %1
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %11, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %802

95:                                               ; preds = %72
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %11, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %12, align 4
  br label %801

99:                                               ; preds = %74
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %11, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #8
  br label %801

103:                                              ; preds = %79
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %11, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %12, align 4
  br label %800

107:                                              ; preds = %81
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %11, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #8
  br label %799

111:                                              ; preds = %89
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %11, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %12, align 4
  br label %799

115:                                              ; preds = %90, %86
  store i8 0, ptr %7, align 1, !tbaa !9
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  call void @llvm.lifetime.start.p0(i64 56, ptr %17) #8
  call void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %116 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %68, i32 0, i32 1
  %117 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %116, i32 0, i32 5
  store ptr %117, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %118 = load ptr, ptr %18, align 8, !tbaa !5
  %119 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %118) #8
  store ptr %119, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %120) #8
  store ptr %121, ptr %20, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %779, %115
  %123 = load ptr, ptr %19, align 8, !tbaa !5
  %124 = load ptr, ptr %20, align 8, !tbaa !5
  %125 = icmp ne ptr %123, %124
  br i1 %125, label %127, label %126

126:                                              ; preds = %122
  store i32 2, ptr %21, align 4
  br label %783

127:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %128 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %128, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %129 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %68, i32 0, i32 1
  %130 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %129, i32 0, i32 2
  %131 = load ptr, ptr %22, align 8, !tbaa !5
  %132 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %131)
          to label %133 unwind label %162

133:                                              ; preds = %127
  %134 = zext i32 %132 to i64
  %135 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %130, i64 noundef %134) #8
  store ptr %135, ptr %23, align 8, !tbaa !5
  %136 = load ptr, ptr %23, align 8, !tbaa !5
  %137 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %136)
          to label %138 unwind label %162

138:                                              ; preds = %133
  %139 = icmp eq i32 %137, 3
  br i1 %139, label %140, label %415

140:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %141 = load ptr, ptr %23, align 8, !tbaa !5
  %142 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %141)
          to label %143 unwind label %166

143:                                              ; preds = %140
  store ptr %142, ptr %24, align 8, !tbaa !5
  %144 = load ptr, ptr %24, align 8, !tbaa !5
  %145 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %144, i32 0, i32 1
  %146 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %147 unwind label %166

147:                                              ; preds = %143
  %148 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %149 unwind label %166

149:                                              ; preds = %147
  %150 = icmp eq i32 %146, %148
  br i1 %150, label %151, label %184

151:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #8
  %152 = load ptr, ptr %68, align 8, !tbaa !19
  %153 = getelementptr inbounds ptr, ptr %152, i64 20
  %154 = load ptr, ptr %153, align 8
  invoke void %154(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(12482) %68, i32 noundef 25, i32 noundef 4)
          to label %155 unwind label %170

155:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #8
  %156 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %157 unwind label %174

157:                                              ; preds = %155
  %158 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %156)
          to label %159 unwind label %174

159:                                              ; preds = %157
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(360) %158, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %160 unwind label %174

160:                                              ; preds = %159
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA21_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(16) @.str.914, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(21) @.str.915, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %161 unwind label %178

161:                                              ; preds = %160
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  store i8 1, ptr %7, align 1, !tbaa !9
  br label %413

162:                                              ; preds = %691, %483, %415, %133, %127
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %11, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %12, align 4
  br label %782

166:                                              ; preds = %147, %143, %140
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %11, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %12, align 4
  br label %414

170:                                              ; preds = %151
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %11, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %12, align 4
  br label %183

174:                                              ; preds = %159, %157, %155
  %175 = landingpad { ptr, i32 }
          cleanup
  %176 = extractvalue { ptr, i32 } %175, 0
  store ptr %176, ptr %11, align 8
  %177 = extractvalue { ptr, i32 } %175, 1
  store i32 %177, ptr %12, align 4
  br label %182

178:                                              ; preds = %160
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %11, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %182

182:                                              ; preds = %178, %174
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %183

183:                                              ; preds = %182, %170
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  br label %414

184:                                              ; preds = %149
  %185 = load ptr, ptr %24, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %185, i32 0, i32 3
  %187 = load i8, ptr %186, align 8, !tbaa !21, !range !17, !noundef !18
  %188 = trunc i8 %187 to i1
  br i1 %188, label %189, label %412

189:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %190 = load ptr, ptr %24, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %190, i32 0, i32 1
  %192 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %191)
          to label %193 unwind label %250

193:                                              ; preds = %189
  %194 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %192)
          to label %195 unwind label %250

195:                                              ; preds = %193
  store ptr %194, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #8
  %196 = load ptr, ptr %27, align 8, !tbaa !5
  %197 = load ptr, ptr %68, align 8, !tbaa !19
  %198 = getelementptr inbounds ptr, ptr %197, i64 19
  %199 = load ptr, ptr %198, align 8
  invoke void %199(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(12482) %68, ptr noundef nonnull align 8 dereferenceable(336) %196, i32 noundef 0)
          to label %200 unwind label %254

200:                                              ; preds = %195
  %201 = load ptr, ptr %24, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %201, i32 0, i32 1
  %203 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %202)
          to label %204 unwind label %258

204:                                              ; preds = %200
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %68, i32 noundef %203)
          to label %205 unwind label %258

205:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %206 = load ptr, ptr %24, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %206, i32 0, i32 1
  %208 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %207)
          to label %209 unwind label %262

209:                                              ; preds = %205
  %210 = load ptr, ptr %68, align 8, !tbaa !19
  %211 = getelementptr inbounds ptr, ptr %210, i64 6
  %212 = load ptr, ptr %211, align 8
  invoke void %212(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(12482) %68, i32 noundef %208, i1 noundef zeroext true)
          to label %213 unwind label %262

213:                                              ; preds = %209
  %214 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %68, i32 0, i32 37
  %215 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %214, i32 noundef 1, i32 noundef 2, i32 noundef 0)
          to label %216 unwind label %266

216:                                              ; preds = %213
  br i1 %215, label %217, label %349

217:                                              ; preds = %216
  %218 = load ptr, ptr %24, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %218, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 8 %219, i64 4, i1 false), !tbaa.struct !34
  %220 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %30, i32 0, i32 0
  %221 = load i32, ptr %220, align 4
  %222 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 %221, i32 noundef 1)
          to label %223 unwind label %266

223:                                              ; preds = %217
  br i1 %222, label %224, label %349

224:                                              ; preds = %223
  %225 = load ptr, ptr %24, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %225, i32 0, i32 4
  %227 = load i8, ptr %226, align 1, !tbaa !36, !range !17, !noundef !18
  %228 = trunc i8 %227 to i1
  br i1 %228, label %349, label %229

229:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %230 = load ptr, ptr %24, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %230, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 8 %231, i64 4, i1 false), !tbaa.struct !34
  %232 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %32, i32 0, i32 0
  %233 = load i32, ptr %232, align 4
  %234 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 %233, i32 noundef 1)
          to label %235 unwind label %270

235:                                              ; preds = %229
  store i32 %234, ptr %31, align 4, !tbaa !35
  %236 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE5countERS9_(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %237 unwind label %270

237:                                              ; preds = %235
  %238 = icmp ne i64 %236, 0
  br i1 %238, label %278, label %239

239:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %240 = load ptr, ptr %24, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %240, i32 0, i32 1
  %242 = invoke i64 @_ZSt9make_pairIRjRN11spirv_cross7TypedIDILNS1_5TypesE0EEEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS7_INS8_IT0_E4typeEE6__typeEEOS9_OSE_(ptr noundef nonnull align 4 dereferenceable(4) %31, ptr noundef nonnull align 4 dereferenceable(4) %241)
          to label %243 unwind label %274

243:                                              ; preds = %239
  store i64 %242, ptr %33, align 4
  %244 = invoke { ptr, i8 } @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE6insertIS8_IjNS1_ILS2_0EEEEEENSt9enable_ifIXsr16is_constructibleISA_OT_EE5valueES8_INSt8__detail14_Node_iteratorISA_Lb0ELb0EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 4 dereferenceable(8) %33)
          to label %245 unwind label %274

245:                                              ; preds = %243
  %246 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 0
  %247 = extractvalue { ptr, i8 } %244, 0
  store ptr %247, ptr %246, align 8
  %248 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 1
  %249 = extractvalue { ptr, i8 } %244, 1
  store i8 %249, ptr %248, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %278

250:                                              ; preds = %193, %189
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %11, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %12, align 4
  br label %411

254:                                              ; preds = %195
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %11, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %12, align 4
  br label %410

258:                                              ; preds = %204, %200
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %11, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %12, align 4
  br label %409

262:                                              ; preds = %209, %205
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %11, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %12, align 4
  br label %408

266:                                              ; preds = %375, %374, %363, %349, %217, %213
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %11, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %12, align 4
  br label %407

270:                                              ; preds = %235, %229
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %11, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %12, align 4
  br label %348

274:                                              ; preds = %243, %239
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %11, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %348

278:                                              ; preds = %245, %237
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %279 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %280 unwind label %307

280:                                              ; preds = %278
  %281 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %279)
          to label %282 unwind label %307

282:                                              ; preds = %280
  %283 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %281)
          to label %284 unwind label %307

284:                                              ; preds = %282
  %285 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %283, i32 0, i32 2
  %286 = load i32, ptr %285, align 8, !tbaa !37
  store i32 %286, ptr %35, align 4, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #8
  %287 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %288 unwind label %311

288:                                              ; preds = %284
  %289 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %287)
          to label %290 unwind label %311

290:                                              ; preds = %288
  %291 = load ptr, ptr %68, align 8, !tbaa !19
  %292 = getelementptr inbounds ptr, ptr %291, i64 6
  %293 = load ptr, ptr %292, align 8
  invoke void %293(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(12482) %68, i32 noundef %289, i1 noundef zeroext true)
          to label %294 unwind label %311

294:                                              ; preds = %290
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef @.str.916)
          to label %295 unwind label %315

295:                                              ; preds = %294
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  %296 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %297 unwind label %320

297:                                              ; preds = %295
  %298 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %296)
          to label %299 unwind label %320

299:                                              ; preds = %297
  %300 = load ptr, ptr %24, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %300, i32 0, i32 1
  %302 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %301)
          to label %303 unwind label %320

303:                                              ; preds = %299
  %304 = icmp eq i32 %298, %302
  br i1 %304, label %305, label %324

305:                                              ; preds = %303
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA22_S2_RjRA5_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(22) @.str.918, ptr noundef nonnull align 4 dereferenceable(4) %31, ptr noundef nonnull align 1 dereferenceable(5) @.str.305)
          to label %306 unwind label %320

306:                                              ; preds = %305
  br label %324

307:                                              ; preds = %282, %280, %278
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %11, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %12, align 4
  br label %347

311:                                              ; preds = %290, %288, %284
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %11, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %12, align 4
  br label %319

315:                                              ; preds = %294
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %11, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %319

319:                                              ; preds = %315, %311
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  br label %346

320:                                              ; preds = %305, %299, %297, %295
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  store ptr %322, ptr %11, align 8
  %323 = extractvalue { ptr, i32 } %321, 1
  store i32 %323, ptr %12, align 4
  br label %345

324:                                              ; preds = %306, %303
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %325 = load ptr, ptr %27, align 8, !tbaa !5
  %326 = load i32, ptr %35, align 4, !tbaa !60
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(336) %325, i32 noundef %326, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %327 unwind label %331

327:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #8
  %328 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(360) %328, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %329 unwind label %335

329:                                              ; preds = %327
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA33_S2_SB_RA5_S2_SA_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(33) @.str.919, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(5) @.str.920, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(4) @.str.921, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %330 unwind label %339

330:                                              ; preds = %329
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %406

331:                                              ; preds = %324
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %11, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %12, align 4
  br label %344

335:                                              ; preds = %327
  %336 = landingpad { ptr, i32 }
          cleanup
  %337 = extractvalue { ptr, i32 } %336, 0
  store ptr %337, ptr %11, align 8
  %338 = extractvalue { ptr, i32 } %336, 1
  store i32 %338, ptr %12, align 4
  br label %343

339:                                              ; preds = %329
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %11, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %343

343:                                              ; preds = %339, %335
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %344

344:                                              ; preds = %343, %331
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  br label %345

345:                                              ; preds = %344, %320
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %346

346:                                              ; preds = %345, %319
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  br label %347

347:                                              ; preds = %346, %307
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %348

348:                                              ; preds = %347, %274, %270
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %407

349:                                              ; preds = %224, %223, %216
  %350 = load ptr, ptr %24, align 8, !tbaa !5
  %351 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %350, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 8 %351, i64 4, i1 false), !tbaa.struct !34
  %352 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %40, i32 0, i32 0
  %353 = load i32, ptr %352, align 4
  %354 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 %353, i32 noundef 1)
          to label %355 unwind label %266

355:                                              ; preds = %349
  br i1 %354, label %356, label %392

356:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #8
  %357 = load ptr, ptr %24, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %357, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 8 %358, i64 4, i1 false), !tbaa.struct !34
  %359 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %42, i32 0, i32 0
  %360 = load i32, ptr %359, align 4
  %361 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 %360, i32 noundef 1)
          to label %362 unwind label %379

362:                                              ; preds = %356
  invoke void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %68, i32 noundef %361)
          to label %363 unwind label %379

363:                                              ; preds = %362
  %364 = load ptr, ptr %24, align 8, !tbaa !5
  %365 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %364, i32 0, i32 7
  %366 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %365, ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  %367 = load ptr, ptr %24, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %367, i32 0, i32 7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(9) @.str.922, ptr noundef nonnull align 8 dereferenceable(32) %368)
          to label %369 unwind label %266

369:                                              ; preds = %363
  %370 = load ptr, ptr %24, align 8, !tbaa !5
  %371 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %370, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  %372 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(360) %372, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %373 unwind label %383

373:                                              ; preds = %369
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(9) @.str.923, ptr noundef nonnull align 8 dereferenceable(32) %371, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %374 unwind label %387

374:                                              ; preds = %373
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(7) @.str.114)
          to label %375 unwind label %266

375:                                              ; preds = %374
  %376 = load ptr, ptr %24, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %376, i32 0, i32 7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SB_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %377, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %378 unwind label %266

378:                                              ; preds = %375
  br label %405

379:                                              ; preds = %362, %356
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %11, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  br label %407

383:                                              ; preds = %369
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %11, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %12, align 4
  br label %391

387:                                              ; preds = %373
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %11, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br label %391

391:                                              ; preds = %387, %383
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  br label %407

392:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  %393 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(360) %393, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %394 unwind label %396

394:                                              ; preds = %392
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %395 unwind label %400

395:                                              ; preds = %394
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  br label %405

396:                                              ; preds = %392
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %11, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %12, align 4
  br label %404

400:                                              ; preds = %394
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %11, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %404

404:                                              ; preds = %400, %396
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  br label %407

405:                                              ; preds = %395, %378
  br label %406

406:                                              ; preds = %405, %330
  store i8 1, ptr %7, align 1, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %412

407:                                              ; preds = %404, %391, %379, %348, %266
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %408

408:                                              ; preds = %407, %262
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %409

409:                                              ; preds = %408, %258
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  br label %410

410:                                              ; preds = %409, %254
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  br label %411

411:                                              ; preds = %410, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %414

412:                                              ; preds = %406, %184
  br label %413

413:                                              ; preds = %412, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %772

414:                                              ; preds = %411, %183, %166
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %782

415:                                              ; preds = %138
  %416 = load ptr, ptr %23, align 8, !tbaa !5
  %417 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %416)
          to label %418 unwind label %162

418:                                              ; preds = %415
  %419 = icmp eq i32 %417, 9
  br i1 %419, label %420, label %483

420:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %421 = load ptr, ptr %23, align 8, !tbaa !5
  %422 = invoke noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %421)
          to label %423 unwind label %454

423:                                              ; preds = %420
  store ptr %422, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %424 = load ptr, ptr %45, align 8, !tbaa !5
  %425 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %424, i32 0, i32 3
  %426 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %425)
          to label %427 unwind label %458

427:                                              ; preds = %423
  %428 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %426)
          to label %429 unwind label %458

429:                                              ; preds = %427
  store ptr %428, ptr %46, align 8, !tbaa !5
  %430 = load ptr, ptr %45, align 8, !tbaa !5
  %431 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %430, i32 0, i32 1
  %432 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %431)
          to label %433 unwind label %458

433:                                              ; preds = %429
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %68, i32 noundef %432)
          to label %434 unwind label %458

434:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %435 = load ptr, ptr %45, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %435, i32 0, i32 1
  %437 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %436)
          to label %438 unwind label %462

438:                                              ; preds = %434
  %439 = load ptr, ptr %68, align 8, !tbaa !19
  %440 = getelementptr inbounds ptr, ptr %439, i64 6
  %441 = load ptr, ptr %440, align 8
  invoke void %441(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(12482) %68, i32 noundef %437, i1 noundef zeroext true)
          to label %442 unwind label %462

442:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  %443 = load ptr, ptr %46, align 8, !tbaa !5
  %444 = load ptr, ptr %68, align 8, !tbaa !19
  %445 = getelementptr inbounds ptr, ptr %444, i64 27
  %446 = load ptr, ptr %445, align 8
  invoke void %446(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(12482) %68, ptr noundef nonnull align 8 dereferenceable(336) %443, ptr noundef nonnull align 8 dereferenceable(32) %47, i32 noundef 0)
          to label %447 unwind label %466

447:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #8
  %448 = load ptr, ptr %45, align 8, !tbaa !5
  %449 = load ptr, ptr %68, align 8, !tbaa !19
  %450 = getelementptr inbounds ptr, ptr %449, i64 24
  %451 = load ptr, ptr %450, align 8
  invoke void %451(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(12482) %68, ptr noundef nonnull align 8 dereferenceable(76) %448)
          to label %452 unwind label %470

452:                                              ; preds = %447
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %453 unwind label %474

453:                                              ; preds = %452
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  store i8 1, ptr %7, align 1, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %771

454:                                              ; preds = %420
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %11, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %12, align 4
  br label %482

458:                                              ; preds = %433, %429, %427, %423
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %11, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %12, align 4
  br label %481

462:                                              ; preds = %438, %434
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %11, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %12, align 4
  br label %480

466:                                              ; preds = %442
  %467 = landingpad { ptr, i32 }
          cleanup
  %468 = extractvalue { ptr, i32 } %467, 0
  store ptr %468, ptr %11, align 8
  %469 = extractvalue { ptr, i32 } %467, 1
  store i32 %469, ptr %12, align 4
  br label %479

470:                                              ; preds = %447
  %471 = landingpad { ptr, i32 }
          cleanup
  %472 = extractvalue { ptr, i32 } %471, 0
  store ptr %472, ptr %11, align 8
  %473 = extractvalue { ptr, i32 } %471, 1
  store i32 %473, ptr %12, align 4
  br label %478

474:                                              ; preds = %452
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %11, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  br label %478

478:                                              ; preds = %474, %470
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %479

479:                                              ; preds = %478, %466
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %480

480:                                              ; preds = %479, %462
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  br label %481

481:                                              ; preds = %480, %458
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  br label %482

482:                                              ; preds = %481, %454
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %782

483:                                              ; preds = %418
  %484 = load ptr, ptr %23, align 8, !tbaa !5
  %485 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %484)
          to label %486 unwind label %162

486:                                              ; preds = %483
  %487 = icmp eq i32 %485, 1
  br i1 %487, label %488, label %691

488:                                              ; preds = %486
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %489 = load ptr, ptr %23, align 8, !tbaa !5
  %490 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %489)
          to label %491 unwind label %566

491:                                              ; preds = %488
  store ptr %490, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %492 = load ptr, ptr %50, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %492, i32 0, i32 1
  %494 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %493)
          to label %495 unwind label %570

495:                                              ; preds = %491
  %496 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %51, i32 0, i32 0
  store i32 %494, ptr %496, align 4
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #8
  %497 = load ptr, ptr %50, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %497, i32 0, i32 2
  %499 = load i32, ptr %498, align 8, !tbaa !37
  %500 = icmp eq i32 %499, 15
  br i1 %500, label %501, label %511

501:                                              ; preds = %495
  %502 = load ptr, ptr %50, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %502, i32 0, i32 6
  %504 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %503) #8
  br i1 %504, label %505, label %511

505:                                              ; preds = %501
  %506 = load ptr, ptr %50, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %506, i32 0, i32 9
  %508 = load i8, ptr %507, align 4, !tbaa !61, !range !17, !noundef !18
  %509 = trunc i8 %508 to i1
  %510 = xor i1 %509, true
  br label %511

511:                                              ; preds = %505, %501, %495
  %512 = phi i1 [ false, %501 ], [ false, %495 ], [ %510, %505 ]
  %513 = zext i1 %512 to i8
  store i8 %513, ptr %52, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #8
  %514 = load ptr, ptr %50, align 8, !tbaa !5
  %515 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %514, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %54, ptr align 8 %515, i64 4, i1 false), !tbaa.struct !34
  %516 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %54, i32 0, i32 0
  %517 = load i32, ptr %516, align 4
  %518 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 %517, i32 noundef 2)
          to label %519 unwind label %574

519:                                              ; preds = %511
  br i1 %518, label %527, label %520

520:                                              ; preds = %519
  %521 = load ptr, ptr %50, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %521, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 8 %522, i64 4, i1 false), !tbaa.struct !34
  %523 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %55, i32 0, i32 0
  %524 = load i32, ptr %523, align 4
  %525 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 %524, i32 noundef 3)
          to label %526 unwind label %574

526:                                              ; preds = %520
  br label %527

527:                                              ; preds = %526, %519
  %528 = phi i1 [ true, %519 ], [ %525, %526 ]
  %529 = zext i1 %528 to i8
  store i8 %529, ptr %53, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #8
  %530 = load i8, ptr %53, align 1, !tbaa !9, !range !17, !noundef !18
  %531 = trunc i8 %530 to i1
  br i1 %531, label %532, label %536

532:                                              ; preds = %527
  %533 = load ptr, ptr %50, align 8, !tbaa !5
  %534 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler15is_builtin_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %68, ptr noundef nonnull align 8 dereferenceable(336) %533)
          to label %535 unwind label %578

535:                                              ; preds = %532
  br label %536

536:                                              ; preds = %535, %527
  %537 = phi i1 [ false, %527 ], [ %534, %535 ]
  %538 = zext i1 %537 to i8
  store i8 %538, ptr %56, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #8
  %539 = load i8, ptr %52, align 1, !tbaa !9, !range !17, !noundef !18
  %540 = trunc i8 %539 to i1
  br i1 %540, label %541, label %549

541:                                              ; preds = %536
  %542 = load i8, ptr %56, align 1, !tbaa !9, !range !17, !noundef !18
  %543 = trunc i8 %542 to i1
  br i1 %543, label %544, label %547

544:                                              ; preds = %541
  %545 = load i8, ptr %13, align 1, !tbaa !9, !range !17, !noundef !18
  %546 = trunc i8 %545 to i1
  br label %547

547:                                              ; preds = %544, %541
  %548 = phi i1 [ true, %541 ], [ %546, %544 ]
  br label %549

549:                                              ; preds = %547, %536
  %550 = phi i1 [ false, %536 ], [ %548, %547 ]
  %551 = zext i1 %550 to i8
  store i8 %551, ptr %57, align 1, !tbaa !9
  %552 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %68, i32 0, i32 60
  %553 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %552)
          to label %554 unwind label %582

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

556:                                              ; preds = %554
  %557 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %68)
          to label %558 unwind label %582

558:                                              ; preds = %556
  %559 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %557, i32 0, i32 1
  %560 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %559)
          to label %561 unwind label %582

561:                                              ; preds = %558
  %562 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %563 unwind label %582

563:                                              ; preds = %561
  %564 = icmp eq i32 %560, %562
  br i1 %564, label %565, label %586

565:                                              ; preds = %563
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %586

566:                                              ; preds = %488
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %11, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %12, align 4
  br label %690

570:                                              ; preds = %491
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %11, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %12, align 4
  br label %689

574:                                              ; preds = %520, %511
  %575 = landingpad { ptr, i32 }
          cleanup
  %576 = extractvalue { ptr, i32 } %575, 0
  store ptr %576, ptr %11, align 8
  %577 = extractvalue { ptr, i32 } %575, 1
  store i32 %577, ptr %12, align 4
  br label %688

578:                                              ; preds = %532
  %579 = landingpad { ptr, i32 }
          cleanup
  %580 = extractvalue { ptr, i32 } %579, 0
  store ptr %580, ptr %11, align 8
  %581 = extractvalue { ptr, i32 } %579, 1
  store i32 %581, ptr %12, align 4
  br label %687

582:                                              ; preds = %683, %681, %679, %672, %669, %663, %653, %634, %631, %626, %623, %621, %616, %611, %608, %606, %601, %596, %593, %591, %586, %561, %558, %556, %549
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %11, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %12, align 4
  br label %686

586:                                              ; preds = %565, %563, %554
  %587 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %68, i32 0, i32 62
  %588 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %587)
          to label %589 unwind label %582

589:                                              ; preds = %586
  %590 = icmp ne i32 %588, 0
  br i1 %590, label %591, label %601

591:                                              ; preds = %589
  %592 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL31get_patch_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %68)
          to label %593 unwind label %582

593:                                              ; preds = %591
  %594 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %592, i32 0, i32 1
  %595 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %594)
          to label %596 unwind label %582

596:                                              ; preds = %593
  %597 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %598 unwind label %582

598:                                              ; preds = %596
  %599 = icmp eq i32 %595, %597
  br i1 %599, label %600, label %601

600:                                              ; preds = %598
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %601

601:                                              ; preds = %600, %598, %589
  %602 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %68, i32 0, i32 59
  %603 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %602)
          to label %604 unwind label %582

604:                                              ; preds = %601
  %605 = icmp ne i32 %603, 0
  br i1 %605, label %606, label %616

606:                                              ; preds = %604
  %607 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %68)
          to label %608 unwind label %582

608:                                              ; preds = %606
  %609 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %607, i32 0, i32 1
  %610 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %609)
          to label %611 unwind label %582

611:                                              ; preds = %608
  %612 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %613 unwind label %582

613:                                              ; preds = %611
  %614 = icmp eq i32 %610, %612
  br i1 %614, label %615, label %616

615:                                              ; preds = %613
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %616

616:                                              ; preds = %615, %613, %604
  %617 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %68, i32 0, i32 61
  %618 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %617)
          to label %619 unwind label %582

619:                                              ; preds = %616
  %620 = icmp ne i32 %618, 0
  br i1 %620, label %621, label %631

621:                                              ; preds = %619
  %622 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL30get_patch_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %68)
          to label %623 unwind label %582

623:                                              ; preds = %621
  %624 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %622, i32 0, i32 1
  %625 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %624)
          to label %626 unwind label %582

626:                                              ; preds = %623
  %627 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %628 unwind label %582

628:                                              ; preds = %626
  %629 = icmp eq i32 %625, %627
  br i1 %629, label %630, label %631

630:                                              ; preds = %628
  store i8 0, ptr %57, align 1, !tbaa !9
  br label %631

631:                                              ; preds = %630, %628, %619
  %632 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %68, i32 0, i32 69
  %633 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %632)
          to label %634 unwind label %582

634:                                              ; preds = %631
  %635 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %636 unwind label %582

636:                                              ; preds = %634
  %637 = icmp eq i32 %633, %635
  br i1 %637, label %638, label %639

638:                                              ; preds = %636
  store i8 1, ptr %57, align 1, !tbaa !9
  br label %639

639:                                              ; preds = %638, %636
  %640 = load i8, ptr %57, align 1, !tbaa !9, !range !17, !noundef !18
  %641 = trunc i8 %640 to i1
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  br i1 %641, label %642, label %648

642:                                              ; preds = %639
  %643 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %644 unwind label %655

644:                                              ; preds = %642
  store i32 %643, ptr %58, align 4, !tbaa !35
  %645 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %8, ptr noundef nonnull align 4 dereferenceable(4) %58)
          to label %646 unwind label %655

646:                                              ; preds = %644
  %647 = icmp eq i64 %645, 0
  br label %648

648:                                              ; preds = %646, %639
  %649 = phi i1 [ false, %639 ], [ %647, %646 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br i1 %649, label %650, label %685

650:                                              ; preds = %648
  %651 = load i8, ptr %7, align 1, !tbaa !9, !range !17, !noundef !18
  %652 = trunc i8 %651 to i1
  br i1 %652, label %653, label %659

653:                                              ; preds = %650
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(1) @.str.35)
          to label %654 unwind label %582

654:                                              ; preds = %653
  br label %659

655:                                              ; preds = %644, %642
  %656 = landingpad { ptr, i32 }
          cleanup
  %657 = extractvalue { ptr, i32 } %656, 0
  store ptr %657, ptr %11, align 8
  %658 = extractvalue { ptr, i32 } %656, 1
  store i32 %658, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %686

659:                                              ; preds = %654, %650
  store i8 0, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #8
  %660 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %661 unwind label %675

661:                                              ; preds = %659
  store i32 %660, ptr %59, align 4, !tbaa !35
  %662 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %8, ptr noundef nonnull align 4 dereferenceable(4) %59)
          to label %663 unwind label %675

663:                                              ; preds = %661
  %664 = getelementptr inbounds { ptr, i8 }, ptr %60, i32 0, i32 0
  %665 = extractvalue { ptr, i8 } %662, 0
  store ptr %665, ptr %664, align 8
  %666 = getelementptr inbounds { ptr, i8 }, ptr %60, i32 0, i32 1
  %667 = extractvalue { ptr, i8 } %662, 1
  store i8 %667, ptr %666, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #8
  %668 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %669 unwind label %582

669:                                              ; preds = %663
  %670 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %668, i32 noundef 0)
          to label %671 unwind label %582

671:                                              ; preds = %669
  br i1 %670, label %672, label %679

672:                                              ; preds = %671
  %673 = load ptr, ptr %50, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL12align_structERNS_8SPIRTypeERSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE(ptr noundef nonnull align 8 dereferenceable(12482) %68, ptr noundef nonnull align 8 dereferenceable(336) %673, ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %674 unwind label %582

674:                                              ; preds = %672
  br label %679

675:                                              ; preds = %661, %659
  %676 = landingpad { ptr, i32 }
          cleanup
  %677 = extractvalue { ptr, i32 } %676, 0
  store ptr %677, ptr %11, align 8
  %678 = extractvalue { ptr, i32 } %676, 1
  store i32 %678, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #8
  br label %686

679:                                              ; preds = %674, %671
  %680 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %681 unwind label %582

681:                                              ; preds = %679
  %682 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %680)
          to label %683 unwind label %582

683:                                              ; preds = %681
  invoke void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(336) %682)
          to label %684 unwind label %582

684:                                              ; preds = %683
  br label %685

685:                                              ; preds = %684, %648
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %770

686:                                              ; preds = %675, %655, %582
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #8
  br label %687

687:                                              ; preds = %686, %578
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #8
  br label %688

688:                                              ; preds = %687, %574
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #8
  br label %689

689:                                              ; preds = %688, %570
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %690

690:                                              ; preds = %689, %566
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %782

691:                                              ; preds = %486
  %692 = load ptr, ptr %23, align 8, !tbaa !5
  %693 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %692)
          to label %694 unwind label %162

694:                                              ; preds = %691
  %695 = icmp eq i32 %693, 12
  br i1 %695, label %696, label %769

696:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %697 = load ptr, ptr %23, align 8, !tbaa !5
  %698 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %697)
          to label %699 unwind label %711

699:                                              ; preds = %696
  store ptr %698, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #8
  %700 = load ptr, ptr %61, align 8, !tbaa !5
  %701 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %700, i32 0, i32 1
  %702 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %701)
          to label %703 unwind label %715

703:                                              ; preds = %699
  %704 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %68, i32 noundef %702)
          to label %705 unwind label %715

705:                                              ; preds = %703
  store ptr %704, ptr %62, align 8, !tbaa !5
  %706 = load ptr, ptr %62, align 8, !tbaa !5
  %707 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %706, i32 0, i32 2
  %708 = load i32, ptr %707, align 8, !tbaa !37
  %709 = icmp eq i32 %708, 1
  br i1 %709, label %710, label %719

710:                                              ; preds = %705
  store i32 1, ptr %21, align 4
  br label %740

711:                                              ; preds = %696
  %712 = landingpad { ptr, i32 }
          cleanup
  %713 = extractvalue { ptr, i32 } %712, 0
  store ptr %713, ptr %11, align 8
  %714 = extractvalue { ptr, i32 } %712, 1
  store i32 %714, ptr %12, align 4
  br label %768

715:                                              ; preds = %703, %699
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %11, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %12, align 4
  br label %767

719:                                              ; preds = %705
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  %720 = load ptr, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  %721 = load ptr, ptr %61, align 8, !tbaa !5
  %722 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %721, i32 0, i32 1
  %723 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %722)
          to label %724 unwind label %743

724:                                              ; preds = %719
  %725 = load ptr, ptr %68, align 8, !tbaa !19
  %726 = getelementptr inbounds ptr, ptr %725, i64 6
  %727 = load ptr, ptr %726, align 8
  invoke void %727(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(12482) %68, i32 noundef %723, i1 noundef zeroext true)
          to label %728 unwind label %743

728:                                              ; preds = %724
  %729 = load ptr, ptr %61, align 8, !tbaa !5
  %730 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %729, i32 0, i32 1
  %731 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %730)
          to label %732 unwind label %747

732:                                              ; preds = %728
  %733 = load ptr, ptr %68, align 8, !tbaa !19
  %734 = getelementptr inbounds ptr, ptr %733, i64 27
  %735 = load ptr, ptr %734, align 8
  invoke void %735(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(12482) %68, ptr noundef nonnull align 8 dereferenceable(336) %720, ptr noundef nonnull align 8 dereferenceable(32) %65, i32 noundef %731)
          to label %736 unwind label %747

736:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %67) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef @.str.177, ptr noundef nonnull align 1 dereferenceable(1) %67)
          to label %737 unwind label %751

737:                                              ; preds = %736
  invoke void @_ZL34inject_top_level_storage_qualifierRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %738 unwind label %755

738:                                              ; preds = %737
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(7) @.str.924)
          to label %739 unwind label %759

739:                                              ; preds = %738
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  store i8 1, ptr %7, align 1, !tbaa !9
  store i32 0, ptr %21, align 4
  br label %740

740:                                              ; preds = %739, %710
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  %741 = load i32, ptr %21, align 4
  switch i32 %741, label %773 [
    i32 0, label %742
  ]

742:                                              ; preds = %740
  br label %769

743:                                              ; preds = %724, %719
  %744 = landingpad { ptr, i32 }
          cleanup
  %745 = extractvalue { ptr, i32 } %744, 0
  store ptr %745, ptr %11, align 8
  %746 = extractvalue { ptr, i32 } %744, 1
  store i32 %746, ptr %12, align 4
  br label %766

747:                                              ; preds = %732, %728
  %748 = landingpad { ptr, i32 }
          cleanup
  %749 = extractvalue { ptr, i32 } %748, 0
  store ptr %749, ptr %11, align 8
  %750 = extractvalue { ptr, i32 } %748, 1
  store i32 %750, ptr %12, align 4
  br label %765

751:                                              ; preds = %736
  %752 = landingpad { ptr, i32 }
          cleanup
  %753 = extractvalue { ptr, i32 } %752, 0
  store ptr %753, ptr %11, align 8
  %754 = extractvalue { ptr, i32 } %752, 1
  store i32 %754, ptr %12, align 4
  br label %764

755:                                              ; preds = %737
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %11, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %12, align 4
  br label %763

759:                                              ; preds = %738
  %760 = landingpad { ptr, i32 }
          cleanup
  %761 = extractvalue { ptr, i32 } %760, 0
  store ptr %761, ptr %11, align 8
  %762 = extractvalue { ptr, i32 } %760, 1
  store i32 %762, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %763

763:                                              ; preds = %759, %755
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %764

764:                                              ; preds = %763, %751
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %765

765:                                              ; preds = %764, %747
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %766

766:                                              ; preds = %765, %743
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  br label %767

767:                                              ; preds = %766, %715
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  br label %768

768:                                              ; preds = %767, %711
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  br label %782

769:                                              ; preds = %742, %694
  br label %770

770:                                              ; preds = %769, %685
  br label %771

771:                                              ; preds = %770, %453
  br label %772

772:                                              ; preds = %771, %413
  store i32 0, ptr %21, align 4
  br label %773

773:                                              ; preds = %772, %740
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  %774 = load i32, ptr %21, align 4
  switch i32 %774, label %776 [
    i32 0, label %775
  ]

775:                                              ; preds = %773
  store i32 0, ptr %21, align 4
  br label %776

776:                                              ; preds = %775, %773
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  %777 = load i32, ptr %21, align 4
  switch i32 %777, label %783 [
    i32 0, label %778
  ]

778:                                              ; preds = %776
  br label %779

779:                                              ; preds = %778
  %780 = load ptr, ptr %19, align 8, !tbaa !5
  %781 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %780, i32 1
  store ptr %781, ptr %19, align 8, !tbaa !5
  br label %122

782:                                              ; preds = %768, %690, %482, %414, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %798

783:                                              ; preds = %776, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  %784 = load i32, ptr %21, align 4
  switch i32 %784, label %795 [
    i32 2, label %785
  ]

785:                                              ; preds = %783
  %786 = load i8, ptr %7, align 1, !tbaa !9, !range !17, !noundef !18
  %787 = trunc i8 %786 to i1
  br i1 %787, label %788, label %794

788:                                              ; preds = %785
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %68, ptr noundef nonnull align 1 dereferenceable(1) @.str.35)
          to label %789 unwind label %790

789:                                              ; preds = %788
  br label %794

790:                                              ; preds = %788
  %791 = landingpad { ptr, i32 }
          cleanup
  %792 = extractvalue { ptr, i32 } %791, 0
  store ptr %792, ptr %11, align 8
  %793 = extractvalue { ptr, i32 } %791, 1
  store i32 %793, ptr %12, align 4
  br label %798

794:                                              ; preds = %789, %785
  store i32 0, ptr %21, align 4
  br label %795

795:                                              ; preds = %794, %783
  call void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %17) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %17) #8
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %9) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  %796 = load i32, ptr %21, align 4
  switch i32 %796, label %808 [
    i32 0, label %797
    i32 1, label %797
  ]

797:                                              ; preds = %795, %795
  ret void

798:                                              ; preds = %790, %782
  call void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %17) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %17) #8
  br label %799

799:                                              ; preds = %798, %111, %107
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  br label %800

800:                                              ; preds = %799, %103
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %801

801:                                              ; preds = %800, %99, %95
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #8
  br label %802

802:                                              ; preds = %801, %91
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %9) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  br label %803

803:                                              ; preds = %802
  %804 = load ptr, ptr %11, align 8
  %805 = load i32, ptr %12, align 4
  %806 = insertvalue { ptr, i32 } poison, ptr %804, 0
  %807 = insertvalue { ptr, i32 } %806, i32 %805, 1
  resume { ptr, i32 } %807

808:                                              ; preds = %795
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #0 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) #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL12align_structERNS_8SPIRTypeERSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(56)) #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(7)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRConstantEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

declare void @_ZNK11spirv_cross8ParsedIR21create_loop_soft_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8, ptr noundef nonnull align 8 dereferenceable(1920)) #5

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #2 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360), i1 noundef zeroext, i1 noundef zeroext) #5

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE6insertIS8_IjNS1_ILS2_0EEEEEENSt9enable_ifIXsr16is_constructibleISA_OT_EE5valueES8_INSt8__detail14_Node_iteratorISA_Lb0ELb0EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(8)) #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA22_S2_RjRA5_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(22), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(5)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA33_S2_SB_RA5_S2_SA_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(33), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #6 align 2

declare void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #5

declare void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #5

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SB_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #2 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL34inject_top_level_storage_qualifierRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(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 8 dereferenceable(32)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3 align 2

; Function Attrs: nounwind
declare void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "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 #8 = { 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 = !{!12, !6, i64 0}
!12 = !{!"_ZTSZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEvE3$_0", !6, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEvE3$_1", !6, i64 0, !6, i64 8}
!15 = !{!16, !6, i64 8}
!16 = !{!"_ZTSZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEvE3$_2", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !8, i64 0}
!21 = !{!22, !10, i64 264}
!22 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !23, i64 0, !26, i64 12, !27, i64 16, !10, i64 264, !10, i64 265, !10, i64 266, !28, i64 272, !32, i64 328}
!23 = !{!"_ZTSN11spirv_cross8IVariantE", !24, i64 8}
!24 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !25, i64 0}
!25 = !{!"int", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !25, i64 0}
!27 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !25, i64 240}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !29, i64 0, !30, i64 16, !31, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !30, i64 8}
!30 = !{!"long", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!32 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !33, i64 0, !30, i64 8, !7, i64 16}
!33 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!34 = !{i64 0, i64 4, !35}
!35 = !{!25, !25, i64 0}
!36 = !{!22, !10, i64 265}
!37 = !{!38, !40, i64 16}
!38 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !23, i64 0, !39, i64 12, !40, i64 16, !25, i64 20, !25, i64 24, !25, i64 28, !41, i64 32, !44, i64 88, !25, i64 120, !10, i64 124, !10, i64 125, !47, i64 128, !48, i64 136, !41, i64 192, !51, i64 248, !26, i64 272, !26, i64 276, !55, i64 280}
!39 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!41 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !42, i64 0, !30, i64 16, !43, i64 24}
!42 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !30, i64 8}
!43 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!44 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !45, i64 0, !30, i64 16, !46, i64 24}
!45 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !30, i64 8}
!46 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!47 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!48 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !49, i64 0, !30, i64 16, !50, i64 24}
!49 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !30, i64 8}
!50 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!51 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !26, i64 0, !52, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !25, i64 12, !53, i64 16, !54, i64 20}
!52 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!53 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!54 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!55 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !56, i64 0}
!56 = !{!"_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, !30, i64 8, !57, i64 16, !30, i64 24, !58, i64 32, !6, i64 48}
!57 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!58 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !59, i64 0, !30, i64 8}
!59 = !{!"float", !7, i64 0}
!60 = !{!40, !40, i64 0}
!61 = !{!38, !10, i64 124}


; 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"

%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.520", i32 }
%"class.spirv_cross::TypedID.520" = type { i32 }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.anon.544 = type { ptr }
%class.anon.545 = type { ptr, ptr }
%"class.spirv_cross::ParsedIR::LoopLock" = type { ptr }
%class.anon.546 = type { ptr, ptr, ptr }
%"class.std::unordered_map.547" = type { %"class.std::_Hashtable.548" }
%"class.std::_Hashtable.548" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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.std::pair.566" = type { i32, %"class.spirv_cross::TypedID.413" }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::allocator.71" = type { i8 }

@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.305 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.914 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.915 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.916 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.917 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.918 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.919 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.920 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.922 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.923 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.924 = external hidden unnamed_addr constant [7 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #0 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL30get_patch_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL31get_patch_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482)) local_unnamed_addr #2 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 #0 align 2

declare void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEv(ptr noundef nonnull align 8 dereferenceable(12482) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %3 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %4 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %5 = alloca %"class.spirv_cross::TypedID.413", align 4
  %6 = alloca i8, align 1
  %7 = alloca %"class.std::unordered_set", align 8
  %8 = alloca %"class.std::unordered_set", align 8
  %9 = alloca %class.anon.544, align 8
  %10 = alloca i8, align 1
  %11 = alloca %class.anon.545, align 8
  %12 = alloca %"class.spirv_cross::ParsedIR::LoopLock", align 8
  %13 = alloca %class.anon.546, align 8
  %14 = alloca %"class.std::unordered_map.547", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca i32, align 4
  %20 = alloca %"struct.std::pair.566", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", 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 %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.spirv_cross::TypedID.414", align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator.71", align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %2) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %3) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %4) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %39 = call noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(8) %2, ptr noundef nonnull align 4 dereferenceable(8) %3, ptr noundef nonnull align 4 dereferenceable(8) %4)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %39)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #7
  store i8 0, ptr %6, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %7) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %7) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %8) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #7
  %40 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  store ptr %0, ptr %9, align 8, !tbaa !9
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %40, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %41 unwind label %54

41:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #7
  %42 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %43 unwind label %56

43:                                               ; preds = %41
  %44 = zext i1 %42 to i8
  store i8 %44, ptr %10, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  store ptr %0, ptr %11, align 8, !tbaa !12
  %45 = getelementptr inbounds i8, ptr %11, i64 8
  store ptr %10, ptr %45, align 8, !tbaa !14
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRConstantEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %40, ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %46 unwind label %58

46:                                               ; preds = %43
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  invoke void @_ZNK11spirv_cross8ParsedIR21create_loop_soft_lockEv(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8 %12, ptr noundef nonnull align 8 dereferenceable(1920) %40)
          to label %47 unwind label %60

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #7
  store ptr %7, ptr %13, align 8, !tbaa !14
  %48 = getelementptr inbounds i8, ptr %13, i64 8
  store ptr %0, ptr %48, align 8, !tbaa !15
  %49 = getelementptr inbounds i8, ptr %13, i64 16
  store ptr %6, ptr %49, align 8, !tbaa !14
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %40, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %50 unwind label %62

50:                                               ; preds = %47
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #7
  %51 = load i8, ptr %6, align 1, !tbaa !5, !range !17, !noundef !18
  %52 = trunc nuw i8 %51 to i1
  br i1 %52, label %53, label %66

53:                                               ; preds = %50
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.35)
          to label %66 unwind label %64

54:                                               ; preds = %1
  %55 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  br label %448

56:                                               ; preds = %41
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %447

58:                                               ; preds = %43
  %59 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  br label %447

60:                                               ; preds = %46
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %446

62:                                               ; preds = %47
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #7
  br label %445

64:                                               ; preds = %53
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %445

66:                                               ; preds = %53, %50
  store i8 0, ptr %6, align 1, !tbaa !5
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %7) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %14) #7
  call void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #7
  %67 = getelementptr inbounds i8, ptr %0, i64 1096
  %68 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %67) #7
  %69 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %67) #7
  %.not189 = icmp eq ptr %68, %69
  br i1 %.not189, label %.critedge187, label %.lr.ph

.lr.ph:                                           ; preds = %66
  %70 = getelementptr inbounds i8, ptr %0, i64 40
  %71 = getelementptr inbounds i8, ptr %0, i64 11136
  %72 = getelementptr inbounds i8, ptr %0, i64 11144
  %73 = getelementptr inbounds i8, ptr %0, i64 11132
  %74 = getelementptr inbounds i8, ptr %0, i64 11140
  %75 = getelementptr inbounds i8, ptr %0, i64 11172
  %76 = getelementptr inbounds i8, ptr %0, i64 10036
  br label %77

77:                                               ; preds = %.lr.ph, %.critedge186
  %.0115190 = phi ptr [ %68, %.lr.ph ], [ %438, %.critedge186 ]
  %78 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0115190)
  %79 = zext i32 %78 to i64
  %80 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %70, i64 noundef %79) #7
  %81 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %80)
  %82 = icmp eq i32 %81, 3
  br i1 %82, label %83, label %241

83:                                               ; preds = %77
  %84 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %80)
          to label %85 unwind label %100

85:                                               ; preds = %83
  %86 = getelementptr inbounds i8, ptr %84, i64 8
  %87 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
  %88 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %89 = icmp eq i32 %87, %88
  br i1 %89, label %90, label %110

90:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  %91 = load ptr, ptr %0, align 8, !tbaa !19
  %92 = getelementptr inbounds i8, ptr %91, i64 160
  %93 = load ptr, ptr %92, align 8
  invoke void %93(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 25, i32 noundef 4)
          to label %94 unwind label %102

94:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  %95 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %96 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %95)
          to label %97 unwind label %104

97:                                               ; preds = %94
  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) %0, ptr noundef nonnull align 8 dereferenceable(360) %96, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %98 unwind label %104

98:                                               ; preds = %97
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA21_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(16) @.str.914, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(21) @.str.915, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %99 unwind label %106

99:                                               ; preds = %98
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  store i8 1, ptr %6, align 1, !tbaa !5
  br label %.critedge186

100:                                              ; preds = %83
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %444

102:                                              ; preds = %90
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %109

104:                                              ; preds = %97, %94
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %108

106:                                              ; preds = %98
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %108

108:                                              ; preds = %106, %104
  %.pn167 = phi { ptr, i32 } [ %107, %106 ], [ %105, %104 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %109

109:                                              ; preds = %108, %102
  %.pn167.pn = phi { ptr, i32 } [ %.pn167, %108 ], [ %103, %102 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %444

110:                                              ; preds = %85
  %111 = getelementptr inbounds i8, ptr %84, i64 264
  %112 = load i8, ptr %111, align 8, !tbaa !21, !range !17, !noundef !18
  %113 = trunc nuw i8 %112 to i1
  br i1 %113, label %114, label %.critedge186

114:                                              ; preds = %110
  %115 = getelementptr inbounds i8, ptr %84, i64 12
  %116 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %115)
  %117 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %116)
          to label %118 unwind label %148

118:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  %119 = load ptr, ptr %0, align 8, !tbaa !19
  %120 = getelementptr inbounds i8, ptr %119, i64 152
  %121 = load ptr, ptr %120, align 8
  invoke void %121(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %117, i32 noundef 0)
          to label %122 unwind label %150

122:                                              ; preds = %118
  %123 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %123)
          to label %124 unwind label %152

124:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  %125 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
  %126 = load ptr, ptr %0, align 8, !tbaa !19
  %127 = getelementptr inbounds i8, ptr %126, i64 48
  %128 = load ptr, ptr %127, align 8
  invoke void %128(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %125, i1 noundef zeroext true)
          to label %129 unwind label %154

129:                                              ; preds = %124
  %130 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %76, i32 noundef 1, i32 noundef 2, i32 noundef 0)
  br i1 %130, label %131, label %208

131:                                              ; preds = %129
  %.sroa.032.0.copyload = load i32, ptr %86, align 8, !tbaa !34
  %132 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.032.0.copyload, i32 noundef 1)
          to label %133 unwind label %156

133:                                              ; preds = %131
  br i1 %132, label %134, label %208

134:                                              ; preds = %133
  %135 = getelementptr inbounds i8, ptr %84, i64 265
  %136 = load i8, ptr %135, align 1, !tbaa !35, !range !17, !noundef !18
  %137 = trunc nuw i8 %136 to i1
  br i1 %137, label %208, label %138

138:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %.sroa.031.0.copyload = load i32, ptr %86, align 8, !tbaa !34
  %139 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.031.0.copyload, i32 noundef 1)
          to label %140 unwind label %158

140:                                              ; preds = %138
  store i32 %139, ptr %19, align 4, !tbaa !34
  %141 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE5countERS9_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %142 unwind label %158

142:                                              ; preds = %140
  %.not147 = icmp eq i64 %141, 0
  br i1 %.not147, label %143, label %162

143:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  %144 = invoke i64 @_ZSt9make_pairIRjRN11spirv_cross7TypedIDILNS1_5TypesE0EEEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS7_INS8_IT0_E4typeEE6__typeEEOS9_OSE_(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 4 dereferenceable(4) %86)
          to label %145 unwind label %160

145:                                              ; preds = %143
  store i64 %144, ptr %20, align 8
  %146 = invoke { ptr, i8 } @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE6insertIS8_IjNS1_ILS2_0EEEEEENSt9enable_ifIXsr16is_constructibleISA_OT_EE5valueES8_INSt8__detail14_Node_iteratorISA_Lb0ELb0EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(8) %20)
          to label %147 unwind label %160

147:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  br label %162

148:                                              ; preds = %114
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %444

150:                                              ; preds = %118
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %240

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

154:                                              ; preds = %124
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %238

156:                                              ; preds = %220, %219, %214, %208, %131
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %237

158:                                              ; preds = %140, %138
  %159 = landingpad { ptr, i32 }
          cleanup
  br label %207

160:                                              ; preds = %145, %143
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  br label %207

162:                                              ; preds = %147, %142
  %163 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %164 unwind label %184

164:                                              ; preds = %162
  %165 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %163)
  %166 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %165)
          to label %167 unwind label %184

167:                                              ; preds = %164
  %168 = getelementptr inbounds i8, ptr %166, i64 16
  %169 = load i32, ptr %168, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  %170 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %171 unwind label %186

171:                                              ; preds = %167
  %172 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %170)
  %173 = load ptr, ptr %0, align 8, !tbaa !19
  %174 = getelementptr inbounds i8, ptr %173, i64 48
  %175 = load ptr, ptr %174, align 8
  invoke void %175(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %172, i1 noundef zeroext true)
          to label %176 unwind label %186

176:                                              ; preds = %171
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str.916)
          to label %177 unwind label %188

177:                                              ; preds = %176
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  %178 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %179 unwind label %191

179:                                              ; preds = %177
  %180 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %178)
  %181 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
  %182 = icmp eq i32 %180, %181
  br i1 %182, label %183, label %193

183:                                              ; preds = %179
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA22_S2_RjRA5_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(22) @.str.918, ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 1 dereferenceable(5) @.str.305)
          to label %193 unwind label %191

184:                                              ; preds = %164, %162
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %207

186:                                              ; preds = %171, %167
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %190

188:                                              ; preds = %176
  %189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br label %190

190:                                              ; preds = %188, %186
  %.pn148 = phi { ptr, i32 } [ %189, %188 ], [ %187, %186 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %206

191:                                              ; preds = %183, %177
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %205

193:                                              ; preds = %183, %179
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %117, i32 noundef %169, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %194 unwind label %197

194:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %84, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %195 unwind label %199

195:                                              ; preds = %194
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA33_S2_SB_RA5_S2_SA_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(33) @.str.919, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(5) @.str.920, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(4) @.str.921, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %196 unwind label %201

196:                                              ; preds = %195
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br label %236

197:                                              ; preds = %193
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %204

199:                                              ; preds = %194
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %203

201:                                              ; preds = %195
  %202 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %203

203:                                              ; preds = %201, %199
  %.pn150 = phi { ptr, i32 } [ %202, %201 ], [ %200, %199 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  br label %204

204:                                              ; preds = %203, %197
  %.pn150.pn = phi { ptr, i32 } [ %.pn150, %203 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  br label %205

205:                                              ; preds = %204, %191
  %.pn150.pn.pn = phi { ptr, i32 } [ %.pn150.pn, %204 ], [ %192, %191 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %206

206:                                              ; preds = %205, %190
  %.pn150.pn.pn.pn = phi { ptr, i32 } [ %.pn150.pn.pn, %205 ], [ %.pn148, %190 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %207

207:                                              ; preds = %184, %206, %160, %158
  %.pn150.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %161, %160 ], [ %159, %158 ], [ %.pn150.pn.pn.pn, %206 ], [ %185, %184 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br label %237

208:                                              ; preds = %134, %133, %129
  %.sroa.027.0.copyload = load i32, ptr %86, align 8, !tbaa !34
  %209 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.027.0.copyload, i32 noundef 1)
          to label %210 unwind label %156

210:                                              ; preds = %208
  br i1 %209, label %211, label %228

211:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #7
  %.sroa.026.0.copyload = load i32, ptr %86, align 8, !tbaa !34
  %212 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.026.0.copyload, i32 noundef 1)
          to label %213 unwind label %221

213:                                              ; preds = %211
  invoke void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %212)
          to label %214 unwind label %221

214:                                              ; preds = %213
  %215 = getelementptr inbounds i8, ptr %84, i64 328
  %216 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.922, ptr noundef nonnull align 8 dereferenceable(32) %215)
          to label %217 unwind label %156

217:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %84, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %218 unwind label %223

218:                                              ; preds = %217
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.923, ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %219 unwind label %225

219:                                              ; preds = %218
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.114)
          to label %220 unwind label %156

220:                                              ; preds = %219
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SB_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %236 unwind label %156

221:                                              ; preds = %213, %211
  %222 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  br label %237

223:                                              ; preds = %217
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %227

225:                                              ; preds = %218
  %226 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %227

227:                                              ; preds = %225, %223
  %.pn159 = phi { ptr, i32 } [ %226, %225 ], [ %224, %223 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  br label %237

228:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %84, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %229 unwind label %231

229:                                              ; preds = %228
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %230 unwind label %233

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

231:                                              ; preds = %228
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %235

233:                                              ; preds = %229
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %235

235:                                              ; preds = %233, %231
  %.pn157 = phi { ptr, i32 } [ %234, %233 ], [ %232, %231 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  br label %237

236:                                              ; preds = %230, %220, %196
  store i8 1, ptr %6, align 1, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %.critedge186

237:                                              ; preds = %235, %227, %221, %207, %156
  %.pn161 = phi { ptr, i32 } [ %157, %156 ], [ %.pn159, %227 ], [ %222, %221 ], [ %.pn157, %235 ], [ %.pn150.pn.pn.pn.pn.pn, %207 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %238

238:                                              ; preds = %237, %154
  %.pn161.pn = phi { ptr, i32 } [ %.pn161, %237 ], [ %155, %154 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %239

239:                                              ; preds = %238, %152
  %.pn161.pn.pn = phi { ptr, i32 } [ %.pn161.pn, %238 ], [ %153, %152 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %240

240:                                              ; preds = %239, %150
  %.pn161.pn.pn.pn = phi { ptr, i32 } [ %.pn161.pn.pn, %239 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %444

241:                                              ; preds = %77
  %242 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %80)
  %243 = icmp eq i32 %242, 9
  br i1 %243, label %244, label %283

244:                                              ; preds = %241
  %245 = invoke noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %80)
          to label %246 unwind label %268

246:                                              ; preds = %244
  %247 = getelementptr inbounds i8, ptr %245, i64 72
  %248 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %247)
  %249 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %248)
          to label %250 unwind label %270

250:                                              ; preds = %246
  %251 = getelementptr inbounds i8, ptr %245, i64 8
  %252 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %251)
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %252)
          to label %253 unwind label %270

253:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  %254 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %251)
  %255 = load ptr, ptr %0, align 8, !tbaa !19
  %256 = getelementptr inbounds i8, ptr %255, i64 48
  %257 = load ptr, ptr %256, align 8
  invoke void %257(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %254, i1 noundef zeroext true)
          to label %258 unwind label %272

258:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  %259 = load ptr, ptr %0, align 8, !tbaa !19
  %260 = getelementptr inbounds i8, ptr %259, i64 216
  %261 = load ptr, ptr %260, align 8
  invoke void %261(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %249, ptr noundef nonnull align 8 dereferenceable(32) %28, i32 noundef 0)
          to label %262 unwind label %274

262:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  %263 = load ptr, ptr %0, align 8, !tbaa !19
  %264 = getelementptr inbounds i8, ptr %263, i64 192
  %265 = load ptr, ptr %264, align 8
  invoke void %265(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(76) %245)
          to label %266 unwind label %276

266:                                              ; preds = %262
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(10) @.str.917, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %267 unwind label %278

267:                                              ; preds = %266
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  store i8 1, ptr %6, align 1, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %.critedge186

268:                                              ; preds = %244
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %444

270:                                              ; preds = %250, %246
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %444

272:                                              ; preds = %253
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %282

274:                                              ; preds = %258
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %281

276:                                              ; preds = %262
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %280

278:                                              ; preds = %266
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %280

280:                                              ; preds = %278, %276
  %.pn141 = phi { ptr, i32 } [ %279, %278 ], [ %277, %276 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %281

281:                                              ; preds = %280, %274
  %.pn141.pn = phi { ptr, i32 } [ %.pn141, %280 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br label %282

282:                                              ; preds = %281, %272
  %.pn141.pn.pn = phi { ptr, i32 } [ %.pn141.pn, %281 ], [ %273, %272 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %444

283:                                              ; preds = %241
  %284 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %80)
  %285 = icmp eq i32 %284, 1
  br i1 %285, label %286, label %393

286:                                              ; preds = %283
  %287 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %80)
          to label %288 unwind label %323

288:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #7
  %289 = getelementptr inbounds i8, ptr %287, i64 8
  %290 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %289)
          to label %291 unwind label %325

291:                                              ; preds = %288
  store i32 %290, ptr %31, align 4
  %292 = getelementptr inbounds i8, ptr %287, i64 16
  %293 = load i32, ptr %292, align 8, !tbaa !36
  %294 = icmp eq i32 %293, 15
  br i1 %294, label %295, label %303

295:                                              ; preds = %291
  %296 = getelementptr inbounds i8, ptr %287, i64 32
  %297 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %296) #7
  br i1 %297, label %298, label %303

298:                                              ; preds = %295
  %299 = getelementptr inbounds i8, ptr %287, i64 124
  %300 = load i8, ptr %299, align 4, !tbaa !59, !range !17, !noundef !18
  %301 = trunc nuw i8 %300 to i1
  %302 = xor i1 %301, true
  br label %303

303:                                              ; preds = %298, %295, %291
  %304 = phi i1 [ false, %295 ], [ false, %291 ], [ %302, %298 ]
  %.sroa.010.0.copyload = load i32, ptr %289, align 8, !tbaa !34
  %305 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.010.0.copyload, i32 noundef 2)
          to label %306 unwind label %327

306:                                              ; preds = %303
  br i1 %305, label %.critedge179, label %307

307:                                              ; preds = %306
  %.sroa.09.0.copyload = load i32, ptr %289, align 8, !tbaa !34
  %308 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.09.0.copyload, i32 noundef 3)
          to label %309 unwind label %327

309:                                              ; preds = %307
  br i1 %308, label %.critedge179, label %.thread

.critedge179:                                     ; preds = %306, %309
  %310 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler15is_builtin_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %287)
          to label %311 unwind label %329

311:                                              ; preds = %.critedge179
  %312 = load i8, ptr %10, align 1, !range !17
  %spec.select188 = select i1 %310, i8 %312, i8 1
  br label %.thread

.thread:                                          ; preds = %311, %309
  %313 = phi i8 [ 1, %309 ], [ %spec.select188, %311 ]
  %314 = select i1 %304, i8 %313, i8 0
  %315 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %71)
  %.not131 = icmp eq i32 %315, 0
  br i1 %.not131, label %333, label %316

316:                                              ; preds = %.thread
  %317 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL25get_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %318 unwind label %331

318:                                              ; preds = %316
  %319 = getelementptr inbounds i8, ptr %317, i64 8
  %320 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %319)
  %321 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %322 = icmp eq i32 %320, %321
  %spec.select = select i1 %322, i8 0, i8 %314
  br label %333

323:                                              ; preds = %286
  %324 = landingpad { ptr, i32 }
          cleanup
  br label %444

325:                                              ; preds = %288
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %392

327:                                              ; preds = %307, %303
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %392

329:                                              ; preds = %.critedge179
  %330 = landingpad { ptr, i32 }
          cleanup
  br label %392

331:                                              ; preds = %390, %387, %384, %380, %374, %353, %344, %335, %316
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %392

333:                                              ; preds = %318, %.thread
  %.0119 = phi i8 [ %314, %.thread ], [ %spec.select, %318 ]
  %334 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  %.not132 = icmp eq i32 %334, 0
  br i1 %.not132, label %342, label %335

335:                                              ; preds = %333
  %336 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL31get_patch_stage_out_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %337 unwind label %331

337:                                              ; preds = %335
  %338 = getelementptr inbounds i8, ptr %336, i64 8
  %339 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %338)
  %340 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %341 = icmp eq i32 %339, %340
  %spec.select180 = select i1 %341, i8 0, i8 %.0119
  br label %342

342:                                              ; preds = %337, %333
  %.1120 = phi i8 [ %.0119, %333 ], [ %spec.select180, %337 ]
  %343 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %73)
  %.not133 = icmp eq i32 %343, 0
  br i1 %.not133, label %351, label %344

344:                                              ; preds = %342
  %345 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL24get_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %346 unwind label %331

346:                                              ; preds = %344
  %347 = getelementptr inbounds i8, ptr %345, i64 8
  %348 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %347)
  %349 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %350 = icmp eq i32 %348, %349
  %spec.select181 = select i1 %350, i8 0, i8 %.1120
  br label %351

351:                                              ; preds = %346, %342
  %.2121 = phi i8 [ %.1120, %342 ], [ %spec.select181, %346 ]
  %352 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %74)
  %.not134 = icmp eq i32 %352, 0
  br i1 %.not134, label %360, label %353

353:                                              ; preds = %351
  %354 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL30get_patch_stage_in_struct_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %355 unwind label %331

355:                                              ; preds = %353
  %356 = getelementptr inbounds i8, ptr %354, i64 8
  %357 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %356)
  %358 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %359 = icmp eq i32 %357, %358
  %spec.select182 = select i1 %359, i8 0, i8 %.2121
  br label %360

360:                                              ; preds = %355, %351
  %.3122 = phi i8 [ %.2121, %351 ], [ %spec.select182, %355 ]
  %361 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %75)
  %362 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %363 = icmp eq i32 %361, %362
  %364 = trunc nuw i8 %.3122 to i1
  %365 = select i1 %363, i1 true, i1 %364
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #7
  br i1 %365, label %366, label %.critedge

366:                                              ; preds = %360
  %367 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  store i32 %367, ptr %32, align 4, !tbaa !34
  %368 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %369 unwind label %375

369:                                              ; preds = %366
  %370 = icmp eq i64 %368, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  br i1 %370, label %371, label %391

371:                                              ; preds = %369
  %372 = load i8, ptr %6, align 1, !tbaa !5, !range !17, !noundef !18
  %373 = trunc nuw i8 %372 to i1
  br i1 %373, label %374, label %377

374:                                              ; preds = %371
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.35)
          to label %377 unwind label %331

375:                                              ; preds = %366
  %376 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  br label %392

377:                                              ; preds = %374, %371
  store i8 0, ptr %6, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #7
  %378 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  store i32 %378, ptr %33, align 4, !tbaa !34
  %379 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %7, ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %380 unwind label %385

380:                                              ; preds = %377
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #7
  %381 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %382 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %381, i32 noundef 0)
          to label %383 unwind label %331

383:                                              ; preds = %380
  br i1 %382, label %384, label %387

384:                                              ; preds = %383
  invoke void @_ZN11spirv_cross11CompilerMSL12align_structERNS_8SPIRTypeERSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %287, ptr noundef nonnull align 8 dereferenceable(56) %8)
          to label %387 unwind label %331

385:                                              ; preds = %377
  %386 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #7
  br label %392

387:                                              ; preds = %384, %383
  %388 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %389 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %388)
          to label %390 unwind label %331

390:                                              ; preds = %387
  invoke void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %389)
          to label %391 unwind label %331

.critedge:                                        ; preds = %360
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  br label %391

391:                                              ; preds = %390, %.critedge, %369
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  br label %.critedge186

392:                                              ; preds = %327, %331, %375, %385, %329, %325
  %.pn135.pn.pn.pn = phi { ptr, i32 } [ %326, %325 ], [ %328, %327 ], [ %330, %329 ], [ %332, %331 ], [ %386, %385 ], [ %376, %375 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  br label %444

393:                                              ; preds = %283
  %394 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %80)
  %395 = icmp eq i32 %394, 12
  br i1 %395, label %396, label %.critedge186

396:                                              ; preds = %393
  %397 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %80)
          to label %398 unwind label %405

398:                                              ; preds = %396
  %399 = getelementptr inbounds i8, ptr %397, i64 12
  %400 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %399)
  %401 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %400)
          to label %402 unwind label %407

402:                                              ; preds = %398
  %403 = getelementptr inbounds i8, ptr %401, i64 16
  %404 = load i32, ptr %403, align 8, !tbaa !36
  %.not130 = icmp eq i32 %404, 1
  br i1 %.not130, label %.critedge185, label %409

405:                                              ; preds = %396
  %406 = landingpad { ptr, i32 }
          cleanup
  br label %444

407:                                              ; preds = %398
  %408 = landingpad { ptr, i32 }
          cleanup
  br label %444

409:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  %410 = getelementptr inbounds i8, ptr %397, i64 8
  %411 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %410)
  %412 = load ptr, ptr %0, align 8, !tbaa !19
  %413 = getelementptr inbounds i8, ptr %412, i64 48
  %414 = load ptr, ptr %413, align 8
  invoke void %414(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %411, i1 noundef zeroext true)
          to label %415 unwind label %424

415:                                              ; preds = %409
  %416 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %410)
  %417 = load ptr, ptr %0, align 8, !tbaa !19
  %418 = getelementptr inbounds i8, ptr %417, i64 216
  %419 = load ptr, ptr %418, align 8
  invoke void %419(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %401, ptr noundef nonnull align 8 dereferenceable(32) %36, i32 noundef %416)
          to label %420 unwind label %426

420:                                              ; preds = %415
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %38) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull @.str.177, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %421 unwind label %428

421:                                              ; preds = %420
  invoke void @_ZL34inject_top_level_storage_qualifierRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %422 unwind label %430

422:                                              ; preds = %421
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(7) @.str.924)
          to label %423 unwind label %432

423:                                              ; preds = %422
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  store i8 1, ptr %6, align 1, !tbaa !5
  br label %.critedge186

424:                                              ; preds = %409
  %425 = landingpad { ptr, i32 }
          cleanup
  br label %437

426:                                              ; preds = %415
  %427 = landingpad { ptr, i32 }
          cleanup
  br label %436

428:                                              ; preds = %420
  %429 = landingpad { ptr, i32 }
          cleanup
  br label %435

430:                                              ; preds = %421
  %431 = landingpad { ptr, i32 }
          cleanup
  br label %434

432:                                              ; preds = %422
  %433 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %434

434:                                              ; preds = %432, %430
  %.pn = phi { ptr, i32 } [ %433, %432 ], [ %431, %430 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %435

435:                                              ; preds = %434, %428
  %.pn.pn = phi { ptr, i32 } [ %.pn, %434 ], [ %429, %428 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %436

436:                                              ; preds = %435, %426
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %435 ], [ %427, %426 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %437

437:                                              ; preds = %436, %424
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %436 ], [ %425, %424 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  br label %444

.critedge186:                                     ; preds = %423, %99, %236, %110, %267, %393, %391
  %438 = getelementptr inbounds i8, ptr %.0115190, i64 4
  %.not = icmp eq ptr %438, %69
  br i1 %.not, label %.critedge187, label %77

.critedge187:                                     ; preds = %.critedge186, %66
  %439 = load i8, ptr %6, align 1, !tbaa !5, !range !17, !noundef !18
  %440 = trunc nuw i8 %439 to i1
  br i1 %440, label %441, label %.critedge185

441:                                              ; preds = %.critedge187
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.35)
          to label %.critedge185 unwind label %442

442:                                              ; preds = %441
  %443 = landingpad { ptr, i32 }
          cleanup
  br label %444

.critedge185:                                     ; preds = %402, %.critedge187, %441
  call void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #7
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %7) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  ret void

444:                                              ; preds = %148, %240, %109, %100, %270, %282, %268, %392, %323, %407, %437, %405, %442
  %.pn172 = phi { ptr, i32 } [ %443, %442 ], [ %.pn167.pn, %109 ], [ %101, %100 ], [ %.pn161.pn.pn.pn, %240 ], [ %149, %148 ], [ %269, %268 ], [ %.pn141.pn.pn, %282 ], [ %271, %270 ], [ %.pn135.pn.pn.pn, %392 ], [ %324, %323 ], [ %406, %405 ], [ %.pn.pn.pn.pn, %437 ], [ %408, %407 ]
  call void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #7
  br label %445

445:                                              ; preds = %444, %64, %62
  %.pn172.pn = phi { ptr, i32 } [ %.pn172, %444 ], [ %65, %64 ], [ %63, %62 ]
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  br label %446

446:                                              ; preds = %445, %60
  %.pn172.pn.pn = phi { ptr, i32 } [ %.pn172.pn, %445 ], [ %61, %60 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br label %447

447:                                              ; preds = %446, %58, %56
  %.pn172.pn.pn.pn = phi { ptr, i32 } [ %.pn172.pn.pn, %446 ], [ %59, %58 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  br label %448

448:                                              ; preds = %447, %54
  %.pn172.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn172.pn.pn.pn, %447 ], [ %55, %54 ]
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %7) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  resume { ptr, i32 } %.pn172.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 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 #0 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 #5

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL12align_structERNS_8SPIRTypeERSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #3 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRConstantEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

declare void @_ZNK11spirv_cross8ParsedIR21create_loop_soft_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8, ptr noundef nonnull align 8 dereferenceable(1920)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_11CompilerMSL41emit_specialization_constants_and_structsEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #2 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE6insertIS8_IjNS1_ILS2_0EEEEEENSt9enable_ifIXsr16is_constructibleISA_OT_EE5valueES8_INSt8__detail14_Node_iteratorISA_Lb0ELb0EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA22_S2_RjRA5_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(22), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(5)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA33_S2_SB_RA5_S2_SA_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(33), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #5 align 2

declare void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

declare void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SB_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA10_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SB_RA4_S2_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(10), 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(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #2 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL34inject_top_level_storage_qualifierRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(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 8 dereferenceable(32)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_mapIjN11spirv_cross7TypedIDILNS0_5TypesE3EEESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3 align 2

; Function Attrs: nounwind
declare void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { "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 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }

!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 = !{!"bool", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTSZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEvE3$_0", !11, i64 0}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!13, !11, i64 0}
!13 = !{!"_ZTSZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEvE3$_1", !11, i64 0, !11, i64 8}
!14 = !{!11, !11, i64 0}
!15 = !{!16, !11, i64 8}
!16 = !{!"_ZTSZN11spirv_cross11CompilerMSL41emit_specialization_constants_and_structsEvE3$_2", !11, i64 0, !11, i64 8, !11, i64 16}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !8, i64 0}
!21 = !{!22, !6, i64 264}
!22 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !23, i64 0, !26, i64 12, !27, i64 16, !6, i64 264, !6, i64 265, !6, i64 266, !28, i64 272, !32, i64 328}
!23 = !{!"_ZTSN11spirv_cross8IVariantE", !24, i64 8}
!24 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !25, i64 0}
!25 = !{!"int", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !25, i64 0}
!27 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !25, i64 240}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !29, i64 0, !30, i64 16, !31, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !11, i64 0, !30, i64 8}
!30 = !{!"long", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!32 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !33, i64 0, !30, i64 8, !7, i64 16}
!33 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!34 = !{!25, !25, i64 0}
!35 = !{!22, !6, i64 265}
!36 = !{!37, !39, i64 16}
!37 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !23, i64 0, !38, i64 12, !39, i64 16, !25, i64 20, !25, i64 24, !25, i64 28, !40, i64 32, !43, i64 88, !25, i64 120, !6, i64 124, !6, i64 125, !46, i64 128, !47, i64 136, !40, i64 192, !50, i64 248, !26, i64 272, !26, i64 276, !54, i64 280}
!38 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!39 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !41, i64 0, !30, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !11, i64 0, !30, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !44, i64 0, !30, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !11, i64 0, !30, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!46 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!47 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !48, i64 0, !30, i64 16, !49, i64 24}
!48 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !11, i64 0, !30, i64 8}
!49 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!50 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !26, i64 0, !51, i64 4, !6, i64 8, !6, i64 9, !6, i64 10, !25, i64 12, !52, i64 16, !53, i64 20}
!51 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!52 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!53 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!54 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !55, i64 0}
!55 = !{!"_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", !11, i64 0, !30, i64 8, !56, i64 16, !30, i64 24, !57, i64 32, !11, i64 48}
!56 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !11, i64 0}
!57 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !58, i64 0, !30, i64 8}
!58 = !{!"float", !7, i64 0}
!59 = !{!37, !6, i64 124}


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