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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"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] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::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.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.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::CompilerMSL::InterfaceBlockMeta" = type <{ %"class.std::unordered_map.473", i8, i8, [6 x i8] }>
%"class.std::unordered_map.473" = type { %"class.std::_Hashtable.474" }
%"class.std::_Hashtable.474" = 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::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", i32, i32, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.415", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.415" = type { i32 }
%"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::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_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.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.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 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.132 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.134 = external hidden unnamed_addr constant [14 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

; 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_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

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

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) #5

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

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

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

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

declare void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, ptr noundef nonnull align 8 dereferenceable(32)) #5

; 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

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

; 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

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

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

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

; 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
declare dso_local noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2 align 2

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795), i32) #0 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_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #5

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) #5

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

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, i1 noundef zeroext) #5

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(58)) #2 align 2

declare void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #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 uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(58)) #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef nonnull align 8 dereferenceable(58), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(64)) #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL44add_plain_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef nonnull align 8 dereferenceable(58), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca %"class.spirv_cross::TypedID.413", align 4
  %18 = alloca i8, align 1
  %19 = alloca %"class.spirv_cross::TypedID.413", align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.spirv_cross::TypedID.413", align 4
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca %"struct.spirv_cross::SPIRType", align 8
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca %"class.spirv_cross::TypedID.350", align 4
  %41 = alloca %"class.spirv_cross::TypedID.413", align 4
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.spirv_cross::TypedID.413", align 4
  %44 = alloca i8, align 1
  %45 = alloca i8, align 1
  %46 = alloca i8, align 1
  %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 %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.spirv_cross::Bitset", align 8
  %53 = alloca i32, align 4
  %54 = alloca %"class.spirv_cross::TypedID.414", align 4
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.spirv_cross::TypedID.414", align 4
  %57 = alloca %"class.spirv_cross::TypedID.413", align 4
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::allocator.71", align 1
  %60 = alloca %"class.spirv_cross::TypedID.413", align 4
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::allocator.71", align 1
  %63 = alloca %"class.spirv_cross::TypedID.350", align 4
  %64 = alloca i8, align 1
  %65 = alloca i8, align 1
  %66 = alloca i8, align 1
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %67 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %68 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %67, i32 0, i32 1
  %69 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %68, i32 0, i32 13
  %70 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %69)
  %71 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %70)
  store ptr %71, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %72 = load ptr, ptr %12, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %72, i32 0, i32 1
  %74 = load i8, ptr %73, align 8, !tbaa !11, !range !20, !noundef !21
  %75 = trunc i8 %74 to i1
  br i1 %75, label %76, label %79

76:                                               ; preds = %6
  %77 = load ptr, ptr %11, align 8, !tbaa !5
  %78 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(176) %77)
  br label %82

79:                                               ; preds = %6
  %80 = load ptr, ptr %11, align 8, !tbaa !5
  %81 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(176) %80)
  br label %82

82:                                               ; preds = %79, %76
  %83 = phi ptr [ %78, %76 ], [ %81, %79 ]
  store ptr %83, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #9
  %84 = load ptr, ptr %11, align 8, !tbaa !5
  %85 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(176) %84)
  %86 = zext i1 %85 to i8
  store i8 %86, ptr %15, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  %87 = load ptr, ptr %11, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %87, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 8 %88, i64 4, i1 false), !tbaa.struct !23
  %89 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %17, i32 0, i32 0
  %90 = load i32, ptr %89, align 4
  %91 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %90, i32 noundef 11)
  store i32 %91, ptr %16, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #9
  %92 = load ptr, ptr %14, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %92, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %93, i64 4, i1 false), !tbaa.struct !23
  %94 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %19, i32 0, i32 0
  %95 = load i32, ptr %94, align 4
  %96 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %95, i32 noundef 2)
  %97 = zext i1 %96 to i8
  store i8 %97, ptr %18, align 1, !tbaa !22
  %98 = load i32, ptr %8, align 4, !tbaa !9
  %99 = icmp eq i32 %98, 3
  br i1 %99, label %100, label %109

100:                                              ; preds = %82
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %67, ptr noundef nonnull align 8 dereferenceable(176) %101)
  br i1 %102, label %103, label %109

103:                                              ; preds = %100
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = load ptr, ptr %12, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %105, i32 0, i32 1
  %107 = load i8, ptr %106, align 8, !tbaa !11, !range !20, !noundef !21
  %108 = trunc i8 %107 to i1
  call void @_ZN11spirv_cross11CompilerMSL26emit_local_masked_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(12482) %67, ptr noundef nonnull align 8 dereferenceable(176) %104, i1 noundef zeroext %108)
  store i32 1, ptr %20, align 4
  br label %690

109:                                              ; preds = %100, %82
  %110 = load i32, ptr %8, align 4, !tbaa !9
  %111 = icmp eq i32 %110, 1
  br i1 %111, label %112, label %125

112:                                              ; preds = %109
  %113 = load ptr, ptr %11, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %113, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 8 %114, i64 4, i1 false), !tbaa.struct !23
  %115 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %21, i32 0, i32 0
  %116 = load i32, ptr %115, align 4
  %117 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %116, i32 noundef 5285)
  br i1 %117, label %118, label %125

118:                                              ; preds = %112
  %119 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %119, ptr noundef @.str.132)
          to label %120 unwind label %121

120:                                              ; preds = %118
  call void @__cxa_throw(ptr %119, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

121:                                              ; preds = %118
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %22, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %23, align 4
  call void @__cxa_free_exception(ptr %119) #9
  br label %693

125:                                              ; preds = %112, %109
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %126, i32 0, i32 1
  %128 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %127)
  call void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %67, i32 noundef %128)
  %129 = load ptr, ptr %14, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %129, i32 0, i32 2
  %131 = load i32, ptr %130, align 8, !tbaa !28
  %132 = icmp eq i32 %131, 15
  br i1 %132, label %133, label %589

133:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #9
  %134 = load i32, ptr %8, align 4, !tbaa !9
  %135 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %134)
  br i1 %135, label %145, label %136

136:                                              ; preds = %133
  %137 = load i8, ptr %18, align 1, !tbaa !22, !range !20, !noundef !21
  %138 = trunc i8 %137 to i1
  br i1 %138, label %139, label %143

139:                                              ; preds = %136
  %140 = load ptr, ptr %14, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %140, i32 0, i32 6
  %142 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %141) #9
  br label %143

143:                                              ; preds = %139, %136
  %144 = phi i1 [ false, %136 ], [ %142, %139 ]
  br label %145

145:                                              ; preds = %143, %133
  %146 = phi i1 [ true, %133 ], [ %144, %143 ]
  %147 = zext i1 %146 to i8
  store i8 %147, ptr %24, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #9
  %148 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %149 = trunc i8 %148 to i1
  br i1 %149, label %158, label %150

150:                                              ; preds = %145
  %151 = load i8, ptr %24, align 1, !tbaa !22, !range !20, !noundef !21
  %152 = trunc i8 %151 to i1
  br i1 %152, label %153, label %158

153:                                              ; preds = %150
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %154, i32 0, i32 2
  %156 = load i8, ptr %155, align 1, !tbaa !50, !range !20, !noundef !21
  %157 = trunc i8 %156 to i1
  br label %158

158:                                              ; preds = %153, %150, %145
  %159 = phi i1 [ false, %150 ], [ false, %145 ], [ %157, %153 ]
  %160 = zext i1 %159 to i8
  store i8 %160, ptr %25, align 1, !tbaa !22
  %161 = load i8, ptr %25, align 1, !tbaa !22, !range !20, !noundef !21
  %162 = trunc i8 %161 to i1
  br i1 %162, label %163, label %169

163:                                              ; preds = %158
  %164 = load ptr, ptr %11, align 8, !tbaa !5
  %165 = load ptr, ptr %12, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %165, i32 0, i32 1
  %167 = load i8, ptr %166, align 8, !tbaa !11, !range !20, !noundef !21
  %168 = trunc i8 %167 to i1
  call void @_ZN11spirv_cross11CompilerMSL26emit_local_masked_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(12482) %67, ptr noundef nonnull align 8 dereferenceable(176) %164, i1 noundef zeroext %168)
  br label %169

169:                                              ; preds = %163, %158
  %170 = load i8, ptr %24, align 1, !tbaa !22, !range !20, !noundef !21
  %171 = trunc i8 %170 to i1
  br i1 %171, label %178, label %172

172:                                              ; preds = %169
  %173 = load i32, ptr %8, align 4, !tbaa !9
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %173, ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(336) %175, ptr noundef nonnull align 8 dereferenceable(176) %176, ptr noundef nonnull align 8 dereferenceable(58) %177)
  br label %588

178:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #9
  store i8 0, ptr %26, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  store i32 -1, ptr %27, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  store i32 0, ptr %28, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 1, ptr %29, align 4, !tbaa !24
  %179 = load ptr, ptr %14, align 8, !tbaa !5
  %180 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %179)
  br i1 %180, label %181, label %195

181:                                              ; preds = %178
  %182 = load ptr, ptr %14, align 8, !tbaa !5
  %183 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %182)
  br i1 %183, label %184, label %191

184:                                              ; preds = %181
  %185 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %185, ptr noundef @.str.127)
          to label %186 unwind label %187

186:                                              ; preds = %184
  call void @__cxa_throw(ptr %185, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

187:                                              ; preds = %184
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %22, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %23, align 4
  call void @__cxa_free_exception(ptr %185) #9
  br label %587

191:                                              ; preds = %181
  %192 = load ptr, ptr %14, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %192, i32 0, i32 5
  %194 = load i32, ptr %193, align 4, !tbaa !51
  store i32 %194, ptr %29, align 4, !tbaa !24
  br label %214

195:                                              ; preds = %178
  %196 = load ptr, ptr %14, align 8, !tbaa !5
  %197 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %196)
  br i1 %197, label %198, label %213

198:                                              ; preds = %195
  %199 = load ptr, ptr %14, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %199, i32 0, i32 6
  %201 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %200) #9
  %202 = icmp ne i64 %201, 1
  br i1 %202, label %203, label %210

203:                                              ; preds = %198
  %204 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %204, ptr noundef @.str.128)
          to label %205 unwind label %206

205:                                              ; preds = %203
  call void @__cxa_throw(ptr %204, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

206:                                              ; preds = %203
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %22, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %23, align 4
  call void @__cxa_free_exception(ptr %204) #9
  br label %587

210:                                              ; preds = %198
  %211 = load ptr, ptr %14, align 8, !tbaa !5
  %212 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %67, ptr noundef nonnull align 8 dereferenceable(336) %211)
  store i32 %212, ptr %29, align 4, !tbaa !24
  br label %213

213:                                              ; preds = %210, %195
  br label %214

214:                                              ; preds = %213, %191
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  store i32 0, ptr %30, align 4, !tbaa !24
  br label %215

215:                                              ; preds = %491, %214
  %216 = load i32, ptr %30, align 4, !tbaa !24
  %217 = load i32, ptr %29, align 4, !tbaa !24
  %218 = icmp ult i32 %216, %217
  br i1 %218, label %220, label %219

219:                                              ; preds = %215
  store i32 2, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %494

220:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  store i32 0, ptr %31, align 4, !tbaa !24
  br label %221

221:                                              ; preds = %486, %220
  %222 = load i32, ptr %31, align 4, !tbaa !24
  %223 = load ptr, ptr %14, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %223, i32 0, i32 12
  %225 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %224) #9
  %226 = trunc i64 %225 to i32
  %227 = icmp ult i32 %222, %226
  br i1 %227, label %229, label %228

228:                                              ; preds = %221
  store i32 5, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %490

229:                                              ; preds = %221
  store i32 2147483647, ptr %16, align 4, !tbaa !26
  %230 = load ptr, ptr %14, align 8, !tbaa !5
  %231 = load i32, ptr %31, align 4, !tbaa !24
  %232 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %230, i32 noundef %231, ptr noundef %16)
  %233 = zext i1 %232 to i8
  store i8 %233, ptr %15, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %234 = load ptr, ptr %14, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %234, i32 0, i32 12
  %236 = load i32, ptr %31, align 4, !tbaa !24
  %237 = zext i32 %236 to i64
  %238 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %235, i64 noundef %237) #9
  %239 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %238)
  %240 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %239)
  store ptr %240, ptr %32, align 8, !tbaa !5
  %241 = load i32, ptr %8, align 4, !tbaa !9
  %242 = icmp eq i32 %241, 3
  br i1 %242, label %243, label %358

243:                                              ; preds = %229
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = load i32, ptr %31, align 4, !tbaa !24
  %246 = load ptr, ptr %12, align 8, !tbaa !5
  %247 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %246, i32 0, i32 1
  %248 = load i8, ptr %247, align 8, !tbaa !11, !range !20, !noundef !21
  %249 = trunc i8 %248 to i1
  %250 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %67, ptr noundef nonnull align 8 dereferenceable(176) %244, i32 noundef %245, i1 noundef zeroext %249)
  br i1 %250, label %251, label %358

251:                                              ; preds = %243
  store i32 -1, ptr %27, align 4, !tbaa !24
  %252 = load i8, ptr %18, align 1, !tbaa !22, !range !20, !noundef !21
  %253 = trunc i8 %252 to i1
  br i1 %253, label %254, label %255

254:                                              ; preds = %251
  store i8 1, ptr %26, align 1, !tbaa !22
  br label %255

255:                                              ; preds = %254, %251
  %256 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %257 = trunc i8 %256 to i1
  br i1 %257, label %258, label %357

258:                                              ; preds = %255
  %259 = load ptr, ptr %12, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %259, i32 0, i32 1
  %261 = load i8, ptr %260, align 8, !tbaa !11, !range !20, !noundef !21
  %262 = trunc i8 %261 to i1
  br i1 %262, label %357, label %263

263:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %264 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %67, i32 0, i32 1
  %265 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %264, i32 noundef 2)
  store i32 %265, ptr %33, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %266 = load i32, ptr %33, align 4, !tbaa !24
  %267 = add i32 %266, 0
  store i32 %267, ptr %34, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %268 = load i32, ptr %33, align 4, !tbaa !24
  %269 = add i32 %268, 1
  store i32 %269, ptr %35, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 336, ptr %36) #9
  %270 = load ptr, ptr %32, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %36, ptr noundef nonnull align 8 dereferenceable(336) %270)
  %271 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %36, i32 0, i32 9
  store i8 1, ptr %271, align 4, !tbaa !52
  %272 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %36, i32 0, i32 8
  %273 = load i32, ptr %272, align 8, !tbaa !53
  %274 = add i32 %273, 1
  store i32 %274, ptr %272, align 8, !tbaa !53
  %275 = load ptr, ptr %14, align 8, !tbaa !5
  %276 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %275, i32 0, i32 12
  %277 = load i32, ptr %31, align 4, !tbaa !24
  %278 = zext i32 %277 to i64
  %279 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %276, i64 noundef %278) #9
  %280 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %36, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %280, ptr align 4 %279, i64 4, i1 false), !tbaa.struct !23
  %281 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %36, i32 0, i32 11
  store i32 3, ptr %281, align 8, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  store i32 0, ptr %37, align 4, !tbaa !24
  %282 = load ptr, ptr %11, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %282, i32 0, i32 4
  %284 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %283)
          to label %285 unwind label %304

285:                                              ; preds = %263
  %286 = icmp ne i32 %284, 0
  br i1 %286, label %287, label %313

287:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %288 = load ptr, ptr %11, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %288, i32 0, i32 4
  %290 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %289)
          to label %291 unwind label %308

291:                                              ; preds = %287
  %292 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %290)
          to label %293 unwind label %308

293:                                              ; preds = %291
  store ptr %292, ptr %38, align 8, !tbaa !5
  %294 = load ptr, ptr %38, align 8, !tbaa !5
  %295 = icmp ne ptr %294, null
  br i1 %295, label %296, label %312

296:                                              ; preds = %293
  %297 = load ptr, ptr %38, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %297, i32 0, i32 6
  %299 = load i32, ptr %31, align 4, !tbaa !24
  %300 = zext i32 %299 to i64
  %301 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %298, i64 noundef %300) #9
  %302 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %301)
          to label %303 unwind label %308

303:                                              ; preds = %296
  store i32 %302, ptr %37, align 4, !tbaa !24
  br label %312

304:                                              ; preds = %338, %336, %325, %322, %319, %313, %263
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %22, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %23, align 4
  br label %356

308:                                              ; preds = %296, %291, %287
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %22, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %356

312:                                              ; preds = %303, %293
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %313

313:                                              ; preds = %312, %285
  %314 = load i32, ptr %34, align 4, !tbaa !24
  %315 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %314, ptr noundef nonnull align 8 dereferenceable(336) %36)
          to label %316 unwind label %304

316:                                              ; preds = %313
  %317 = load i32, ptr %35, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  store i32 3, ptr %39, align 4, !tbaa !9
  %318 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %317, ptr noundef nonnull align 4 dereferenceable(4) %34, ptr noundef nonnull align 4 dereferenceable(4) %39, ptr noundef nonnull align 4 dereferenceable(4) %37)
          to label %319 unwind label %343

319:                                              ; preds = %316
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  %320 = load ptr, ptr %13, align 8, !tbaa !5
  %321 = load i32, ptr %35, align 4, !tbaa !24
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %321)
          to label %322 unwind label %304

322:                                              ; preds = %319
  %323 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %40, i32 0, i32 0
  %324 = load i32, ptr %323, align 4
  invoke void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %320, i32 %324)
          to label %325 unwind label %304

325:                                              ; preds = %322
  %326 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %67, i32 0, i32 52
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %326, ptr noundef nonnull align 4 dereferenceable(4) %35) #9
  %327 = load i32, ptr %35, align 4, !tbaa !24
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %327)
          to label %328 unwind label %304

328:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #9
  %329 = load i32, ptr %16, align 4, !tbaa !26
  %330 = load ptr, ptr %67, align 8, !tbaa !55
  %331 = getelementptr inbounds ptr, ptr %330, i64 20
  %332 = load ptr, ptr %331, align 8
  invoke void %332(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %329, i32 noundef 3)
          to label %333 unwind label %347

333:                                              ; preds = %328
  %334 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %41, i32 0, i32 0
  %335 = load i32, ptr %334, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %335, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %336 unwind label %351

336:                                              ; preds = %333
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  %337 = load i32, ptr %35, align 4, !tbaa !24
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %337)
          to label %338 unwind label %304

338:                                              ; preds = %336
  %339 = load i32, ptr %16, align 4, !tbaa !26
  %340 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %43, i32 0, i32 0
  %341 = load i32, ptr %340, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %341, i32 noundef 11, i32 noundef %339)
          to label %342 unwind label %304

342:                                              ; preds = %338
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %36) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %357

343:                                              ; preds = %316
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %22, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %356

347:                                              ; preds = %328
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %22, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %23, align 4
  br label %355

351:                                              ; preds = %333
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %22, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br label %355

355:                                              ; preds = %351, %347
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %356

356:                                              ; preds = %355, %343, %308, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %36) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %489

357:                                              ; preds = %342, %258, %255
  br label %483

358:                                              ; preds = %243, %229
  %359 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %360 = trunc i8 %359 to i1
  br i1 %360, label %361, label %365

361:                                              ; preds = %358
  %362 = load i32, ptr %16, align 4, !tbaa !26
  %363 = load i32, ptr %8, align 4, !tbaa !9
  %364 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18has_active_builtinEN3spv7BuiltInENS1_12StorageClassE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %362, i32 noundef %363)
  br i1 %364, label %365, label %482

365:                                              ; preds = %361, %358
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #9
  %366 = load ptr, ptr %32, align 8, !tbaa !5
  %367 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %366)
  br i1 %367, label %376, label %368

368:                                              ; preds = %365
  %369 = load ptr, ptr %32, align 8, !tbaa !5
  %370 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %369)
  br i1 %370, label %376, label %371

371:                                              ; preds = %368
  %372 = load ptr, ptr %32, align 8, !tbaa !5
  %373 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %372, i32 0, i32 2
  %374 = load i32, ptr %373, align 8, !tbaa !28
  %375 = icmp eq i32 %374, 15
  br label %376

376:                                              ; preds = %371, %368, %365
  %377 = phi i1 [ true, %368 ], [ true, %365 ], [ %375, %371 ]
  %378 = zext i1 %377 to i8
  store i8 %378, ptr %44, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #9
  %379 = load i32, ptr %8, align 4, !tbaa !9
  %380 = icmp eq i32 %379, 1
  br i1 %380, label %381, label %384

381:                                              ; preds = %376
  %382 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %67)
  %383 = icmp ne i32 %382, 4
  br label %384

384:                                              ; preds = %381, %376
  %385 = phi i1 [ false, %376 ], [ %383, %381 ]
  %386 = zext i1 %385 to i8
  store i8 %386, ptr %45, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #9
  %387 = load i32, ptr %8, align 4, !tbaa !9
  %388 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %387)
  %389 = zext i1 %388 to i8
  store i8 %389, ptr %46, align 1, !tbaa !22
  %390 = load i32, ptr %16, align 4, !tbaa !26
  %391 = icmp eq i32 %390, 3
  br i1 %391, label %395, label %392

392:                                              ; preds = %384
  %393 = load i32, ptr %16, align 4, !tbaa !26
  %394 = icmp eq i32 %393, 4
  br i1 %394, label %395, label %396

395:                                              ; preds = %392, %384
  store i8 0, ptr %15, align 1, !tbaa !22
  br label %396

396:                                              ; preds = %395, %392
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #9
  %397 = load ptr, ptr %11, align 8, !tbaa !5
  %398 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %397, i32 0, i32 1
  %399 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  %400 = load ptr, ptr %67, align 8, !tbaa !55
  %401 = getelementptr inbounds ptr, ptr %400, i64 6
  %402 = load ptr, ptr %401, align 8
  call void %402(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %399, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %403 unwind label %414

403:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %404 unwind label %418

404:                                              ; preds = %403
  %405 = load i32, ptr %29, align 4, !tbaa !24
  %406 = icmp ugt i32 %405, 1
  br i1 %406, label %407, label %440

407:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #9
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %408 unwind label %422

408:                                              ; preds = %407
  %409 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %410 unwind label %426

410:                                              ; preds = %408
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #9
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %411 unwind label %431

411:                                              ; preds = %410
  %412 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %413 unwind label %435

413:                                              ; preds = %411
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #9
  br label %440

414:                                              ; preds = %396
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %22, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %23, align 4
  br label %481

418:                                              ; preds = %403
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %22, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %23, align 4
  br label %480

422:                                              ; preds = %407
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %22, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %23, align 4
  br label %430

426:                                              ; preds = %408
  %427 = landingpad { ptr, i32 }
          cleanup
  %428 = extractvalue { ptr, i32 } %427, 0
  store ptr %428, ptr %22, align 8
  %429 = extractvalue { ptr, i32 } %427, 1
  store i32 %429, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  br label %430

430:                                              ; preds = %426, %422
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #9
  br label %479

431:                                              ; preds = %410
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %22, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %23, align 4
  br label %439

435:                                              ; preds = %411
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %22, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  br label %439

439:                                              ; preds = %435, %431
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #9
  br label %479

440:                                              ; preds = %413, %404
  %441 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %442 = trunc i8 %441 to i1
  br i1 %442, label %443, label %446

443:                                              ; preds = %440
  %444 = load i8, ptr %45, align 1, !tbaa !22, !range !20, !noundef !21
  %445 = trunc i8 %444 to i1
  br i1 %445, label %446, label %465

446:                                              ; preds = %443, %440
  %447 = load i8, ptr %46, align 1, !tbaa !22, !range !20, !noundef !21
  %448 = trunc i8 %447 to i1
  br i1 %448, label %449, label %465

449:                                              ; preds = %446
  %450 = load i8, ptr %44, align 1, !tbaa !22, !range !20, !noundef !21
  %451 = trunc i8 %450 to i1
  br i1 %451, label %452, label %465

452:                                              ; preds = %449
  %453 = load i32, ptr %8, align 4, !tbaa !9
  %454 = load ptr, ptr %9, align 8, !tbaa !5
  %455 = load ptr, ptr %10, align 8, !tbaa !5
  %456 = load ptr, ptr %11, align 8, !tbaa !5
  %457 = load ptr, ptr %14, align 8, !tbaa !5
  %458 = load i32, ptr %31, align 4, !tbaa !24
  %459 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %52) #9
  call void @llvm.memset.p0.i64(ptr align 8 %52, i8 0, i64 64, i1 false)
  call void @_ZN11spirv_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %52) #9
  invoke void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %453, ptr noundef nonnull align 8 dereferenceable(32) %454, ptr noundef nonnull align 8 dereferenceable(336) %455, ptr noundef nonnull align 8 dereferenceable(176) %456, ptr noundef nonnull align 8 dereferenceable(336) %457, i32 noundef %458, ptr noundef nonnull align 8 dereferenceable(58) %459, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 8 dereferenceable(64) %52)
          to label %460 unwind label %461

460:                                              ; preds = %452
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %52) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %52) #9
  br label %478

461:                                              ; preds = %452
  %462 = landingpad { ptr, i32 }
          cleanup
  %463 = extractvalue { ptr, i32 } %462, 0
  store ptr %463, ptr %22, align 8
  %464 = extractvalue { ptr, i32 } %462, 1
  store i32 %464, ptr %23, align 4
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %52) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %52) #9
  br label %479

465:                                              ; preds = %449, %446, %443
  %466 = load i32, ptr %8, align 4, !tbaa !9
  %467 = load ptr, ptr %9, align 8, !tbaa !5
  %468 = load ptr, ptr %10, align 8, !tbaa !5
  %469 = load ptr, ptr %11, align 8, !tbaa !5
  %470 = load ptr, ptr %14, align 8, !tbaa !5
  %471 = load i32, ptr %31, align 4, !tbaa !24
  %472 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross11CompilerMSL44add_plain_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %466, ptr noundef nonnull align 8 dereferenceable(32) %467, ptr noundef nonnull align 8 dereferenceable(336) %468, ptr noundef nonnull align 8 dereferenceable(176) %469, ptr noundef nonnull align 8 dereferenceable(336) %470, i32 noundef %471, ptr noundef nonnull align 8 dereferenceable(58) %472, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %473 unwind label %474

473:                                              ; preds = %465
  br label %478

474:                                              ; preds = %465
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %22, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %23, align 4
  br label %479

478:                                              ; preds = %473, %460
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #9
  br label %482

479:                                              ; preds = %474, %461, %439, %430
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  br label %480

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

481:                                              ; preds = %480, %414
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #9
  br label %489

482:                                              ; preds = %478, %361
  br label %483

483:                                              ; preds = %482, %357
  %484 = load i32, ptr %28, align 4, !tbaa !24
  %485 = add i32 %484, 1
  store i32 %485, ptr %28, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %486

486:                                              ; preds = %483
  %487 = load i32, ptr %31, align 4, !tbaa !24
  %488 = add i32 %487, 1
  store i32 %488, ptr %31, align 4, !tbaa !24
  br label %221, !llvm.loop !57

489:                                              ; preds = %481, %356
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %587

490:                                              ; preds = %228
  br label %491

491:                                              ; preds = %490
  %492 = load i32, ptr %30, align 4, !tbaa !24
  %493 = add i32 %492, 1
  store i32 %493, ptr %30, align 4, !tbaa !24
  br label %215, !llvm.loop !59

494:                                              ; preds = %219
  %495 = load i8, ptr %26, align 1, !tbaa !22, !range !20, !noundef !21
  %496 = trunc i8 %495 to i1
  br i1 %496, label %497, label %586

497:                                              ; preds = %494
  %498 = load i8, ptr %25, align 1, !tbaa !22, !range !20, !noundef !21
  %499 = trunc i8 %498 to i1
  br i1 %499, label %586, label %500

500:                                              ; preds = %497
  %501 = load ptr, ptr %11, align 8, !tbaa !5
  %502 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(176) %501)
  br i1 %502, label %503, label %505

503:                                              ; preds = %500
  %504 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %67)
  br i1 %504, label %505, label %586

505:                                              ; preds = %503, %500
  %506 = load ptr, ptr %11, align 8, !tbaa !5
  %507 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(176) %506)
  br i1 %507, label %508, label %580

508:                                              ; preds = %505
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 0, ptr %53, align 4, !tbaa !24
  br label %509

509:                                              ; preds = %537, %508
  %510 = load i32, ptr %53, align 4, !tbaa !24
  %511 = load ptr, ptr %14, align 8, !tbaa !5
  %512 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %511, i32 0, i32 12
  %513 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %512) #9
  %514 = trunc i64 %513 to i32
  %515 = icmp ult i32 %510, %514
  br i1 %515, label %517, label %516

516:                                              ; preds = %509
  store i32 8, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %544

517:                                              ; preds = %509
  %518 = load ptr, ptr %14, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %518, i32 0, i32 1
  %520 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %519)
  %521 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %54, i32 0, i32 0
  store i32 %520, ptr %521, align 4
  %522 = load i32, ptr %53, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #9
  %523 = load ptr, ptr %14, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %523, i32 0, i32 1
  %525 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %524)
  %526 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %56, i32 0, i32 0
  store i32 %525, ptr %526, align 4
  %527 = load i32, ptr %53, align 4, !tbaa !24
  %528 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %56, i32 0, i32 0
  %529 = load i32, ptr %528, align 4
  %530 = call noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %529, i32 noundef %527, i32 noundef 11)
  %531 = load ptr, ptr %67, align 8, !tbaa !55
  %532 = getelementptr inbounds ptr, ptr %531, i64 20
  %533 = load ptr, ptr %532, align 8
  call void %533(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %530, i32 noundef 3)
  %534 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %54, i32 0, i32 0
  %535 = load i32, ptr %534, align 4
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %535, i32 noundef %522, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %536 unwind label %540

536:                                              ; preds = %517
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  br label %537

537:                                              ; preds = %536
  %538 = load i32, ptr %53, align 4, !tbaa !24
  %539 = add i32 %538, 1
  store i32 %539, ptr %53, align 4, !tbaa !24
  br label %509, !llvm.loop !60

540:                                              ; preds = %517
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %22, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %587

544:                                              ; preds = %516
  %545 = load ptr, ptr %14, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %545, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 8 %546, i64 4, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef @.str.133, ptr noundef nonnull align 1 dereferenceable(1) %59)
          to label %547 unwind label %562

547:                                              ; preds = %544
  %548 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %57, i32 0, i32 0
  %549 = load i32, ptr %548, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %549, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %550 unwind label %566

550:                                              ; preds = %547
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  %551 = load ptr, ptr %11, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %551, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 8 %552, i64 4, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef @.str.134, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %553 unwind label %571

553:                                              ; preds = %550
  %554 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %60, i32 0, i32 0
  %555 = load i32, ptr %554, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 %555, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %556 unwind label %575

556:                                              ; preds = %553
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #9
  %557 = load ptr, ptr %14, align 8, !tbaa !5
  %558 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %557, i32 0, i32 1
  %559 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %558)
  %560 = getelementptr inbounds %"class.spirv_cross::TypedID.350", ptr %63, i32 0, i32 0
  store i32 %559, ptr %560, align 4
  %561 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %67, i32 0, i32 69
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %561, ptr align 4 %63, i64 4, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  br label %580

562:                                              ; preds = %544
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %22, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %23, align 4
  br label %570

566:                                              ; preds = %547
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %22, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  br label %570

570:                                              ; preds = %566, %562
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  br label %587

571:                                              ; preds = %550
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %22, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %23, align 4
  br label %579

575:                                              ; preds = %553
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %22, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  br label %579

579:                                              ; preds = %575, %571
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #9
  br label %587

580:                                              ; preds = %556, %505
  %581 = load ptr, ptr %11, align 8, !tbaa !5
  %582 = load ptr, ptr %12, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %582, i32 0, i32 1
  %584 = load i8, ptr %583, align 8, !tbaa !11, !range !20, !noundef !21
  %585 = trunc i8 %584 to i1
  call void @_ZN11spirv_cross11CompilerMSL26emit_local_masked_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(12482) %67, ptr noundef nonnull align 8 dereferenceable(176) %581, i1 noundef zeroext %585)
  br label %586

586:                                              ; preds = %580, %503, %497, %494
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  br label %588

587:                                              ; preds = %579, %570, %540, %489, %206, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  br label %693

588:                                              ; preds = %586, %172
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  br label %689

589:                                              ; preds = %125
  %590 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %67)
  br i1 %590, label %591, label %612

591:                                              ; preds = %589
  %592 = load i32, ptr %8, align 4, !tbaa !9
  %593 = icmp eq i32 %592, 1
  br i1 %593, label %594, label %612

594:                                              ; preds = %591
  %595 = load ptr, ptr %12, align 8, !tbaa !5
  %596 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::InterfaceBlockMeta", ptr %595, i32 0, i32 1
  %597 = load i8, ptr %596, align 8, !tbaa !11, !range !20, !noundef !21
  %598 = trunc i8 %597 to i1
  br i1 %598, label %612, label %599

599:                                              ; preds = %594
  %600 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %601 = trunc i8 %600 to i1
  br i1 %601, label %602, label %612

602:                                              ; preds = %599
  %603 = load i32, ptr %16, align 4, !tbaa !26
  %604 = icmp eq i32 %603, 11
  br i1 %604, label %608, label %605

605:                                              ; preds = %602
  %606 = load i32, ptr %16, align 4, !tbaa !26
  %607 = icmp eq i32 %606, 12
  br i1 %607, label %608, label %612

608:                                              ; preds = %605, %602
  %609 = load ptr, ptr %9, align 8, !tbaa !5
  %610 = load ptr, ptr %10, align 8, !tbaa !5
  %611 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZN11spirv_cross11CompilerMSL39add_tess_level_input_to_interface_blockERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %67, ptr noundef nonnull align 8 dereferenceable(32) %609, ptr noundef nonnull align 8 dereferenceable(336) %610, ptr noundef nonnull align 8 dereferenceable(176) %611)
  br label %688

612:                                              ; preds = %605, %599, %594, %591, %589
  %613 = load ptr, ptr %14, align 8, !tbaa !5
  %614 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %613, i32 0, i32 2
  %615 = load i32, ptr %614, align 8, !tbaa !28
  %616 = icmp eq i32 %615, 2
  br i1 %616, label %628, label %617

617:                                              ; preds = %612
  %618 = load ptr, ptr %14, align 8, !tbaa !5
  %619 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %618, i32 0, i32 2
  %620 = load i32, ptr %619, align 8, !tbaa !28
  %621 = icmp eq i32 %620, 23
  br i1 %621, label %628, label %622

622:                                              ; preds = %617
  %623 = load ptr, ptr %14, align 8, !tbaa !5
  %624 = call noundef zeroext i1 @_ZN11spirv_crossL16type_is_integralERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %623)
  br i1 %624, label %628, label %625

625:                                              ; preds = %622
  %626 = load ptr, ptr %14, align 8, !tbaa !5
  %627 = call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %626)
  br i1 %627, label %628, label %687

628:                                              ; preds = %625, %622, %617, %612
  %629 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %630 = trunc i8 %629 to i1
  br i1 %630, label %631, label %635

631:                                              ; preds = %628
  %632 = load i32, ptr %16, align 4, !tbaa !26
  %633 = load i32, ptr %8, align 4, !tbaa !9
  %634 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18has_active_builtinEN3spv7BuiltInENS1_12StorageClassE(ptr noundef nonnull align 8 dereferenceable(3176) %67, i32 noundef %632, i32 noundef %633)
  br i1 %634, label %635, label %686

635:                                              ; preds = %631, %628
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #9
  %636 = load ptr, ptr %14, align 8, !tbaa !5
  %637 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %636)
  br i1 %637, label %641, label %638

638:                                              ; preds = %635
  %639 = load ptr, ptr %14, align 8, !tbaa !5
  %640 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %67, ptr noundef nonnull align 8 dereferenceable(336) %639)
  br label %641

641:                                              ; preds = %638, %635
  %642 = phi i1 [ true, %635 ], [ %640, %638 ]
  %643 = zext i1 %642 to i8
  store i8 %643, ptr %64, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #9
  %644 = load i32, ptr %8, align 4, !tbaa !9
  %645 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %644)
  %646 = zext i1 %645 to i8
  store i8 %646, ptr %65, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #9
  %647 = load i32, ptr %8, align 4, !tbaa !9
  %648 = icmp eq i32 %647, 1
  br i1 %648, label %649, label %652

649:                                              ; preds = %641
  %650 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %67)
  %651 = icmp ne i32 %650, 4
  br label %652

652:                                              ; preds = %649, %641
  %653 = phi i1 [ false, %641 ], [ %651, %649 ]
  %654 = zext i1 %653 to i8
  store i8 %654, ptr %66, align 1, !tbaa !22
  %655 = load i32, ptr %16, align 4, !tbaa !26
  %656 = icmp eq i32 %655, 3
  br i1 %656, label %660, label %657

657:                                              ; preds = %652
  %658 = load i32, ptr %16, align 4, !tbaa !26
  %659 = icmp eq i32 %658, 4
  br i1 %659, label %660, label %661

660:                                              ; preds = %657, %652
  store i8 0, ptr %15, align 1, !tbaa !22
  br label %661

661:                                              ; preds = %660, %657
  %662 = load i8, ptr %15, align 1, !tbaa !22, !range !20, !noundef !21
  %663 = trunc i8 %662 to i1
  br i1 %663, label %664, label %667

664:                                              ; preds = %661
  %665 = load i8, ptr %66, align 1, !tbaa !22, !range !20, !noundef !21
  %666 = trunc i8 %665 to i1
  br i1 %666, label %667, label %679

667:                                              ; preds = %664, %661
  %668 = load i8, ptr %65, align 1, !tbaa !22, !range !20, !noundef !21
  %669 = trunc i8 %668 to i1
  br i1 %669, label %670, label %679

670:                                              ; preds = %667
  %671 = load i8, ptr %64, align 1, !tbaa !22, !range !20, !noundef !21
  %672 = trunc i8 %671 to i1
  br i1 %672, label %673, label %679

673:                                              ; preds = %670
  %674 = load i32, ptr %8, align 4, !tbaa !9
  %675 = load ptr, ptr %9, align 8, !tbaa !5
  %676 = load ptr, ptr %10, align 8, !tbaa !5
  %677 = load ptr, ptr %11, align 8, !tbaa !5
  %678 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %674, ptr noundef nonnull align 8 dereferenceable(32) %675, ptr noundef nonnull align 8 dereferenceable(336) %676, ptr noundef nonnull align 8 dereferenceable(176) %677, ptr noundef nonnull align 8 dereferenceable(58) %678)
  br label %685

679:                                              ; preds = %670, %667, %664
  %680 = load i32, ptr %8, align 4, !tbaa !9
  %681 = load ptr, ptr %9, align 8, !tbaa !5
  %682 = load ptr, ptr %10, align 8, !tbaa !5
  %683 = load ptr, ptr %11, align 8, !tbaa !5
  %684 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %67, i32 noundef %680, ptr noundef nonnull align 8 dereferenceable(32) %681, ptr noundef nonnull align 8 dereferenceable(336) %682, ptr noundef nonnull align 8 dereferenceable(176) %683, ptr noundef nonnull align 8 dereferenceable(58) %684)
  br label %685

685:                                              ; preds = %679, %673
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #9
  br label %686

686:                                              ; preds = %685, %631
  br label %687

687:                                              ; preds = %686, %625
  br label %688

688:                                              ; preds = %687, %608
  br label %689

689:                                              ; preds = %688, %588
  store i32 0, ptr %20, align 4
  br label %690

690:                                              ; preds = %689, %103
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  %691 = load i32, ptr %20, align 4
  switch i32 %691, label %699 [
    i32 0, label %692
    i32 1, label %692
  ]

692:                                              ; preds = %690, %690
  ret void

693:                                              ; preds = %587, %121
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %694

694:                                              ; preds = %693
  %695 = load ptr, ptr %22, align 8
  %696 = load i32, ptr %23, align 4
  %697 = insertvalue { ptr, i32 } poison, ptr %695, 0
  %698 = insertvalue { ptr, i32 } %697, i32 %696, 1
  resume { ptr, i32 } %698

699:                                              ; preds = %690
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0 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: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL16type_is_integralERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #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 = { 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 #8 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nounwind }
attributes #10 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!11 = !{!12, !19, i64 56}
!12 = !{!"_ZTSN11spirv_cross11CompilerMSL18InterfaceBlockMetaE", !13, i64 0, !19, i64 56, !19, i64 57}
!13 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE", !14, i64 0}
!14 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEESaIS6_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !6, i64 48}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!17 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !18, i64 0, !15, i64 8}
!18 = !{!"float", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!19, !19, i64 0}
!23 = !{i64 0, i64 4, !24}
!24 = !{!25, !25, i64 0}
!25 = !{!"int", !7, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"_ZTSN3spv7BuiltInE", !7, i64 0}
!28 = !{!29, !33, i64 16}
!29 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !30, i64 0, !32, i64 12, !33, i64 16, !25, i64 20, !25, i64 24, !25, i64 28, !34, i64 32, !37, i64 88, !25, i64 120, !19, i64 124, !19, i64 125, !10, i64 128, !40, i64 136, !34, i64 192, !43, i64 248, !44, i64 272, !44, i64 276, !48, i64 280}
!30 = !{!"_ZTSN11spirv_cross8IVariantE", !31, i64 8}
!31 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !25, i64 0}
!32 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!34 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !35, i64 0, !15, i64 16, !36, i64 24}
!35 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !15, i64 8}
!36 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !38, i64 0, !15, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !15, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !41, i64 0, !15, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !15, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !44, i64 0, !45, i64 4, !19, i64 8, !19, i64 9, !19, i64 10, !25, i64 12, !46, i64 16, !47, i64 20}
!44 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !25, i64 0}
!45 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!46 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!47 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!48 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !49, i64 0}
!49 = !{!"_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, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !6, i64 48}
!50 = !{!12, !19, i64 57}
!51 = !{!29, !25, i64 28}
!52 = !{!29, !19, i64 124}
!53 = !{!29, !25, i64 120}
!54 = !{!29, !10, i64 128}
!55 = !{!56, !56, i64 0}
!56 = !{!"vtable pointer", !8, i64 0}
!57 = distinct !{!57, !58}
!58 = !{!"llvm.loop.mustprogress"}
!59 = distinct !{!59, !58}
!60 = distinct !{!60, !58}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.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" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::allocator.71" = type { i8 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.132 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.134 = external hidden unnamed_addr constant [14 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) 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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

; 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_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) local_unnamed_addr #4

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

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

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

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

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

; 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

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

; 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

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

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

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

; 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
declare dso_local noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795), i32) local_unnamed_addr #0 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_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #4

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

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(58)) local_unnamed_addr #2 align 2

declare void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) 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 uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(58)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef nonnull align 8 dereferenceable(58), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL44add_plain_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef nonnull align 8 dereferenceable(58), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL31add_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %"struct.spirv_cross::SPIRType", align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"class.spirv_cross::TypedID.350", align 4
  %17 = alloca %"class.spirv_cross::TypedID.413", align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.spirv_cross::TypedID.413", align 4
  %20 = alloca %"class.std::__cxx11::basic_string", 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.spirv_cross::Bitset", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.71", align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator.71", align 1
  %31 = getelementptr inbounds i8, ptr %0, i64 8
  %32 = getelementptr inbounds i8, ptr %0, i64 1744
  %33 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
  %34 = tail call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %33)
  %35 = getelementptr inbounds i8, ptr %5, i64 56
  %36 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %37 = trunc nuw i8 %36 to i1
  br i1 %37, label %38, label %40

38:                                               ; preds = %6
  %39 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler25get_variable_element_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br label %42

40:                                               ; preds = %6
  %41 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br label %42

42:                                               ; preds = %40, %38
  %43 = phi ptr [ %39, %38 ], [ %41, %40 ]
  %44 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #8
  %45 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.050.0.copyload = load i32, ptr %45, align 8, !tbaa !19
  %46 = tail call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.050.0.copyload, i32 noundef 11)
  store i32 %46, ptr %7, align 4, !tbaa !21
  %47 = getelementptr inbounds i8, ptr %43, i64 8
  %.sroa.047.0.copyload = load i32, ptr %47, align 8, !tbaa !19
  %48 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.047.0.copyload, i32 noundef 2)
  %49 = icmp eq i32 %1, 3
  br i1 %49, label %50, label %55

50:                                               ; preds = %42
  %51 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL31is_stage_output_variable_maskedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br i1 %51, label %52, label %.thread

52:                                               ; preds = %50
  %53 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %54 = trunc nuw i8 %53 to i1
  tail call void @_ZN11spirv_cross11CompilerMSL26emit_local_masked_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(176) %4, i1 noundef zeroext %54)
  br label %326

55:                                               ; preds = %42
  %56 = icmp eq i32 %1, 1
  br i1 %56, label %57, label %.thread

57:                                               ; preds = %55
  %.sroa.046.0.copyload = load i32, ptr %45, align 8, !tbaa !19
  %58 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.046.0.copyload, i32 noundef 5285)
  br i1 %58, label %59, label %.thread

59:                                               ; preds = %57
  %60 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %60, ptr noundef nonnull @.str.132)
          to label %61 unwind label %62

61:                                               ; preds = %59
  tail call void @__cxa_throw(ptr nonnull %60, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

62:                                               ; preds = %59
  %63 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %60) #8
  br label %327

.thread:                                          ; preds = %50, %57, %55
  %64 = phi i1 [ true, %57 ], [ false, %55 ], [ false, %50 ]
  %65 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %45)
  tail call void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %65)
  %66 = getelementptr inbounds i8, ptr %43, i64 16
  %67 = load i32, ptr %66, align 8, !tbaa !23
  %68 = icmp eq i32 %67, 15
  br i1 %68, label %69, label %294

69:                                               ; preds = %.thread
  %70 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1)
  %.not195 = xor i1 %48, true
  %brmerge = or i1 %70, %.not195
  br i1 %brmerge, label %74, label %71

71:                                               ; preds = %69
  %72 = getelementptr inbounds i8, ptr %43, i64 32
  %73 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %72) #8
  br label %74

74:                                               ; preds = %69, %71
  %75 = phi i1 [ %70, %69 ], [ %73, %71 ]
  %.not196 = xor i1 %75, true
  %brmerge197 = or i1 %44, %.not196
  br i1 %brmerge197, label %.thread214, label %76

76:                                               ; preds = %74
  %77 = getelementptr inbounds i8, ptr %5, i64 57
  %78 = load i8, ptr %77, align 1, !tbaa !46, !range !17, !noundef !18
  %79 = trunc nuw i8 %78 to i1
  br i1 %79, label %80, label %.thread214

80:                                               ; preds = %76
  %81 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %82 = trunc nuw i8 %81 to i1
  tail call void @_ZN11spirv_cross11CompilerMSL26emit_local_masked_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(176) %4, i1 noundef zeroext %82)
  br label %.thread214

.thread214:                                       ; preds = %74, %80, %76
  %.not216 = phi i1 [ false, %80 ], [ true, %76 ], [ true, %74 ]
  br i1 %75, label %84, label %83

83:                                               ; preds = %.thread214
  tail call void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5)
  br label %326

84:                                               ; preds = %.thread214
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  store i32 -1, ptr %8, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  store i32 0, ptr %9, align 4, !tbaa !19
  %85 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %43)
  %86 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %43)
  br i1 %85, label %87, label %96

87:                                               ; preds = %84
  br i1 %86, label %88, label %93

88:                                               ; preds = %87
  %89 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %89, ptr noundef nonnull @.str.127)
          to label %90 unwind label %91

90:                                               ; preds = %88
  tail call void @__cxa_throw(ptr nonnull %89, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

91:                                               ; preds = %88
  %92 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %89) #8
  br label %293

93:                                               ; preds = %87
  %94 = getelementptr inbounds i8, ptr %43, i64 28
  %95 = load i32, ptr %94, align 4, !tbaa !47
  br label %107

96:                                               ; preds = %84
  br i1 %86, label %97, label %.thread258

.thread258:                                       ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  store i32 0, ptr %10, align 4, !tbaa !19
  br label %.preheader218.lr.ph

97:                                               ; preds = %96
  %98 = getelementptr inbounds i8, ptr %43, i64 32
  %99 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %98) #8
  %.not = icmp eq i64 %99, 1
  br i1 %.not, label %105, label %100

100:                                              ; preds = %97
  %101 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull @.str.128)
          to label %102 unwind label %103

102:                                              ; preds = %100
  tail call void @__cxa_throw(ptr nonnull %101, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

103:                                              ; preds = %100
  %104 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %101) #8
  br label %293

105:                                              ; preds = %97
  %106 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %43)
  br label %107

107:                                              ; preds = %105, %93
  %.0168 = phi i32 [ %95, %93 ], [ %106, %105 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  store i32 0, ptr %10, align 4, !tbaa !19
  %.not254 = icmp eq i32 %.0168, 0
  br i1 %.not254, label %._crit_edge249.thread, label %.preheader218.lr.ph

._crit_edge249.thread:                            ; preds = %107
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  br label %292

.preheader218.lr.ph:                              ; preds = %.thread258, %107
  %.0168261 = phi i32 [ 1, %.thread258 ], [ %.0168, %107 ]
  %108 = getelementptr inbounds i8, ptr %43, i64 136
  %.not255 = icmp eq i32 %.0168261, 1
  %109 = getelementptr inbounds i8, ptr %13, i64 124
  %110 = getelementptr inbounds i8, ptr %13, i64 120
  %111 = getelementptr inbounds i8, ptr %13, i64 276
  %112 = getelementptr inbounds i8, ptr %13, i64 128
  %113 = getelementptr inbounds i8, ptr %4, i64 24
  %114 = getelementptr inbounds i8, ptr %0, i64 10920
  br label %.preheader218

.preheader218:                                    ; preds = %.preheader218.lr.ph, %._crit_edge
  %.0164248 = phi i1 [ false, %.preheader218.lr.ph ], [ %.1165.lcssa, %._crit_edge ]
  %115 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %108) #8
  %116 = and i64 %115, 4294967295
  %.not256 = icmp eq i64 %116, 0
  br i1 %.not256, label %._crit_edge, label %.lr.ph

._crit_edge249:                                   ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  %brmerge205.not = and i1 %.not216, %.1165.lcssa
  br i1 %brmerge205.not, label %251, label %292

._crit_edge:                                      ; preds = %244, %.preheader218
  %.1165.lcssa = phi i1 [ %.0164248, %.preheader218 ], [ %.3167, %244 ]
  %117 = load i32, ptr %10, align 4, !tbaa !19
  %118 = add i32 %117, 1
  store i32 %118, ptr %10, align 4, !tbaa !19
  %119 = icmp ult i32 %118, %.0168261
  br i1 %119, label %.preheader218, label %._crit_edge249, !llvm.loop !48

.lr.ph:                                           ; preds = %.preheader218, %244
  %indvars.iv = phi i64 [ %indvars.iv.next, %244 ], [ 0, %.preheader218 ]
  %.1165247 = phi i1 [ %.3167, %244 ], [ %.0164248, %.preheader218 ]
  store i32 2147483647, ptr %7, align 4, !tbaa !21
  %120 = trunc nuw i64 %indvars.iv to i32
  %121 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %43, i32 noundef %120, ptr noundef nonnull %7)
  %122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %108, i64 noundef %indvars.iv) #8
  %123 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %122)
  %124 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %123)
  br i1 %49, label %125, label %182

125:                                              ; preds = %.lr.ph
  %126 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %127 = trunc nuw i8 %126 to i1
  %128 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL35is_stage_output_block_member_maskedERKNS_12SPIRVariableEjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %4, i32 noundef %120, i1 noundef zeroext %127)
  br i1 %128, label %129, label %182

129:                                              ; preds = %125
  store i32 -1, ptr %8, align 4, !tbaa !19
  %spec.select = select i1 %48, i1 true, i1 %.1165247
  br i1 %121, label %130, label %244

130:                                              ; preds = %129
  %131 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %132 = trunc nuw i8 %131 to i1
  br i1 %132, label %244, label %133

133:                                              ; preds = %130
  %134 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %31, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 %134, ptr %11, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  %135 = add i32 %134, 1
  store i32 %135, ptr %12, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %13) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %13, ptr noundef nonnull align 8 dereferenceable(336) %124)
  store i8 1, ptr %109, align 4, !tbaa !50
  %136 = load i32, ptr %110, align 8, !tbaa !51
  %137 = add i32 %136, 1
  store i32 %137, ptr %110, align 8, !tbaa !51
  %138 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %108, i64 noundef %indvars.iv) #8
  %139 = load i32, ptr %138, align 4, !tbaa !19
  store i32 %139, ptr %111, align 4, !tbaa !19
  store i32 3, ptr %112, align 8, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #8
  store i32 0, ptr %14, align 4, !tbaa !19
  %140 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %113)
  %.not184 = icmp eq i32 %140, 0
  br i1 %.not184, label %153, label %141

141:                                              ; preds = %133
  %142 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %113)
  %143 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %142)
          to label %144 unwind label %151

144:                                              ; preds = %141
  %.not185 = icmp eq ptr %143, null
  br i1 %.not185, label %153, label %145

145:                                              ; preds = %144
  %146 = getelementptr inbounds i8, ptr %143, i64 272
  %147 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %146, i64 noundef %indvars.iv) #8
  %148 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %147)
  store i32 %148, ptr %14, align 4, !tbaa !19
  br label %153

149:                                              ; preds = %169, %153
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %181

151:                                              ; preds = %141
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %181

153:                                              ; preds = %144, %145, %133
  %154 = load i32, ptr %11, align 4, !tbaa !19
  %155 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %154, ptr noundef nonnull align 8 dereferenceable(336) %13)
          to label %156 unwind label %149

156:                                              ; preds = %153
  %157 = load i32, ptr %12, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  store i32 3, ptr %15, align 4, !tbaa !53
  %158 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %157, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %159 unwind label %174

159:                                              ; preds = %156
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  %160 = load i32, ptr %12, align 4, !tbaa !19
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef %160)
  %161 = load i32, ptr %16, align 4
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %34, i32 %161)
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %114, ptr noundef nonnull align 4 dereferenceable(4) %12) #8
  %162 = load i32, ptr %12, align 4, !tbaa !19
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %162)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  %163 = load i32, ptr %7, align 4, !tbaa !21
  %164 = load ptr, ptr %0, align 8, !tbaa !54
  %165 = getelementptr inbounds i8, ptr %164, i64 160
  %166 = load ptr, ptr %165, align 8
  invoke void %166(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 %163, i32 noundef 3)
          to label %167 unwind label %176

167:                                              ; preds = %159
  %168 = load i32, ptr %17, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %168, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %169 unwind label %178

169:                                              ; preds = %167
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  %170 = load i32, ptr %12, align 4, !tbaa !19
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef %170)
  %171 = load i32, ptr %7, align 4, !tbaa !21
  %172 = load i32, ptr %19, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %172, i32 noundef 11, i32 noundef %171)
          to label %173 unwind label %149

173:                                              ; preds = %169
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %13) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  br label %244

174:                                              ; preds = %156
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  br label %181

176:                                              ; preds = %159
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %180

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

180:                                              ; preds = %178, %176
  %.pn186 = phi { ptr, i32 } [ %179, %178 ], [ %177, %176 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  br label %181

181:                                              ; preds = %180, %174, %151, %149
  %.pn188 = phi { ptr, i32 } [ %150, %149 ], [ %.pn186, %180 ], [ %175, %174 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %13) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  br label %250

182:                                              ; preds = %125, %.lr.ph
  br i1 %121, label %183, label %186

183:                                              ; preds = %182
  %184 = load i32, ptr %7, align 4, !tbaa !21
  %185 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18has_active_builtinEN3spv7BuiltInENS1_12StorageClassE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %184, i32 noundef %1)
  br i1 %185, label %186, label %244

186:                                              ; preds = %183, %182
  %187 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %124)
  br i1 %187, label %194, label %188

188:                                              ; preds = %186
  %189 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %124)
  br i1 %189, label %194, label %190

190:                                              ; preds = %188
  %191 = getelementptr inbounds i8, ptr %124, i64 16
  %192 = load i32, ptr %191, align 8, !tbaa !23
  %193 = icmp eq i32 %192, 15
  br label %194

194:                                              ; preds = %190, %188, %186
  %195 = phi i1 [ true, %188 ], [ true, %186 ], [ %193, %190 ]
  br i1 %64, label %196, label %199

196:                                              ; preds = %194
  %197 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %198 = icmp ne i32 %197, 4
  br label %199

199:                                              ; preds = %196, %194
  %200 = phi i1 [ false, %194 ], [ %198, %196 ]
  %201 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1)
  %202 = load i32, ptr %7, align 4
  %203 = add i32 %202, -5
  %or.cond = icmp ult i32 %203, -2
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #8
  %204 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %45)
  %205 = load ptr, ptr %0, align 8, !tbaa !54
  %206 = getelementptr inbounds i8, ptr %205, i64 48
  %207 = load ptr, ptr %206, align 8
  call void %207(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %204, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %208 unwind label %217

208:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %209 unwind label %219

209:                                              ; preds = %208
  br i1 %.not255, label %231, label %210

210:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #8
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 1 dereferenceable(2) @.str.76, ptr noundef nonnull align 4 dereferenceable(4) %10)
          to label %211 unwind label %221

211:                                              ; preds = %210
  %212 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %213 unwind label %223

213:                                              ; preds = %211
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %214 unwind label %226

214:                                              ; preds = %213
  %215 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %216 unwind label %228

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

217:                                              ; preds = %199
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %243

219:                                              ; preds = %208
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %242

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

223:                                              ; preds = %211
  %224 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  br label %225

225:                                              ; preds = %223, %221
  %.pn176 = phi { ptr, i32 } [ %224, %223 ], [ %222, %221 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  br label %241

226:                                              ; preds = %213
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %230

228:                                              ; preds = %214
  %229 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %230

230:                                              ; preds = %228, %226
  %.pn178 = phi { ptr, i32 } [ %229, %228 ], [ %227, %226 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %241

231:                                              ; preds = %216, %209
  %.not217 = xor i1 %200, true
  %232 = and i1 %or.cond, %.not217
  %brmerge199.not = and i1 %121, %232
  %.not200 = xor i1 %201, true
  %brmerge201 = or i1 %brmerge199.not, %.not200
  %.not202 = xor i1 %195, true
  %brmerge203 = select i1 %brmerge201, i1 true, i1 %.not202
  br i1 %brmerge203, label %237, label %233

233:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %25) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %25, i8 0, i64 64, i1 false)
  call void @_ZN11spirv_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %25) #8
  invoke void @_ZN11spirv_cross11CompilerMSL48add_composite_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_RKNS_6BitsetE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(336) %43, i32 noundef %120, ptr noundef nonnull align 8 dereferenceable(58) %5, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 8 dereferenceable(64) %25)
          to label %234 unwind label %235

234:                                              ; preds = %233
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %25) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %25) #8
  br label %240

235:                                              ; preds = %233
  %236 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %25) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %25) #8
  br label %241

237:                                              ; preds = %231
  invoke void @_ZN11spirv_cross11CompilerMSL44add_plain_member_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableESC_jRNS0_18InterfaceBlockMetaESA_SA_RjSH_(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(336) %43, i32 noundef %120, ptr noundef nonnull align 8 dereferenceable(58) %5, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %240 unwind label %238

238:                                              ; preds = %237
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %241

240:                                              ; preds = %237, %234
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  br label %244

241:                                              ; preds = %238, %235, %230, %225
  %.pn180 = phi { ptr, i32 } [ %236, %235 ], [ %239, %238 ], [ %.pn178, %230 ], [ %.pn176, %225 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %242

242:                                              ; preds = %241, %219
  %.pn180.pn = phi { ptr, i32 } [ %.pn180, %241 ], [ %220, %219 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %243

243:                                              ; preds = %242, %217
  %.pn180.pn.pn = phi { ptr, i32 } [ %.pn180.pn, %242 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  br label %250

244:                                              ; preds = %183, %240, %129, %130, %173
  %.3167 = phi i1 [ %spec.select, %130 ], [ %spec.select, %173 ], [ %spec.select, %129 ], [ %.1165247, %240 ], [ %.1165247, %183 ]
  %245 = load i32, ptr %9, align 4, !tbaa !19
  %246 = add i32 %245, 1
  store i32 %246, ptr %9, align 4, !tbaa !19
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %247 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %108) #8
  %248 = and i64 %247, 4294967295
  %249 = icmp ult i64 %indvars.iv.next, %248
  br i1 %249, label %.lr.ph, label %._crit_edge, !llvm.loop !56

250:                                              ; preds = %243, %181
  %.pn188.pn = phi { ptr, i32 } [ %.pn188, %181 ], [ %.pn180.pn.pn, %243 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  br label %293

251:                                              ; preds = %._crit_edge249
  %252 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br i1 %252, label %253, label %255

253:                                              ; preds = %251
  %254 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %254, label %255, label %292

255:                                              ; preds = %253, %251
  %256 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br i1 %256, label %.preheader, label %289

.preheader:                                       ; preds = %255
  %257 = getelementptr inbounds i8, ptr %43, i64 136
  %258 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %257) #8
  %259 = and i64 %258, 4294967295
  %.not257 = icmp eq i64 %259, 0
  br i1 %.not257, label %._crit_edge253, label %.lr.ph252

._crit_edge253:                                   ; preds = %266, %.preheader
  %.sroa.011.0.copyload = load i32, ptr %47, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.133, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %273 unwind label %279

.lr.ph252:                                        ; preds = %.preheader, %266
  %.0170251 = phi i32 [ %267, %266 ], [ 0, %.preheader ]
  %260 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  %261 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
  %262 = call noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %261, i32 noundef %.0170251, i32 noundef 11)
  %263 = load ptr, ptr %0, align 8, !tbaa !54
  %264 = getelementptr inbounds i8, ptr %263, i64 160
  %265 = load ptr, ptr %264, align 8
  call void %265(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %262, i32 noundef 3)
  invoke void @_ZN11spirv_cross8Compiler15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %260, i32 noundef %.0170251, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %266 unwind label %271

266:                                              ; preds = %.lr.ph252
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  %267 = add nuw i32 %.0170251, 1
  %268 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %257) #8
  %269 = trunc i64 %268 to i32
  %270 = icmp ult i32 %267, %269
  br i1 %270, label %.lr.ph252, label %._crit_edge253, !llvm.loop !57

271:                                              ; preds = %.lr.ph252
  %272 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  br label %293

273:                                              ; preds = %._crit_edge253
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.011.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %274 unwind label %281

274:                                              ; preds = %273
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  %.sroa.010.0.copyload = load i32, ptr %45, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.134, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %275 unwind label %284

275:                                              ; preds = %274
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.010.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %276 unwind label %286

276:                                              ; preds = %275
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  %277 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
  %278 = getelementptr inbounds i8, ptr %0, i64 11172
  store i32 %277, ptr %278, align 4, !tbaa !19
  br label %289

279:                                              ; preds = %._crit_edge253
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %283

281:                                              ; preds = %273
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  br label %283

283:                                              ; preds = %281, %279
  %.pn = phi { ptr, i32 } [ %282, %281 ], [ %280, %279 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  br label %293

284:                                              ; preds = %274
  %285 = landingpad { ptr, i32 }
          cleanup
  br label %288

286:                                              ; preds = %275
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %288

288:                                              ; preds = %286, %284
  %.pn174 = phi { ptr, i32 } [ %287, %286 ], [ %285, %284 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  br label %293

289:                                              ; preds = %276, %255
  %290 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %291 = trunc nuw i8 %290 to i1
  call void @_ZN11spirv_cross11CompilerMSL26emit_local_masked_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(176) %4, i1 noundef zeroext %291)
  br label %292

292:                                              ; preds = %._crit_edge249.thread, %._crit_edge249, %289, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %326

293:                                              ; preds = %288, %283, %271, %250, %103, %91
  %.pn191 = phi { ptr, i32 } [ %92, %91 ], [ %.pn188.pn, %250 ], [ %272, %271 ], [ %.pn174, %288 ], [ %.pn, %283 ], [ %104, %103 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %327

294:                                              ; preds = %.thread
  %295 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %or.cond3 = and i1 %64, %295
  br i1 %or.cond3, label %296, label %302

296:                                              ; preds = %294
  %297 = load i8, ptr %35, align 8, !tbaa !5, !range !17, !noundef !18
  %298 = trunc nuw i8 %297 to i1
  %.not265 = xor i1 %298, true
  %299 = add i32 %46, -11
  %or.cond5 = icmp ult i32 %299, 2
  %300 = and i1 %or.cond5, %.not265
  %or.cond264 = and i1 %300, %44
  br i1 %or.cond264, label %301, label %302

301:                                              ; preds = %296
  tail call void @_ZN11spirv_cross11CompilerMSL39add_tess_level_input_to_interface_blockERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4)
  br label %326

302:                                              ; preds = %296, %294
  %303 = load i32, ptr %66, align 8, !tbaa !23
  switch i32 %303, label %304 [
    i32 2, label %308
    i32 23, label %308
  ]

304:                                              ; preds = %302
  %305 = tail call noundef zeroext i1 @_ZN11spirv_crossL16type_is_integralERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %43)
  br i1 %305, label %308, label %306

306:                                              ; preds = %304
  %307 = tail call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %43)
  br i1 %307, label %308, label %326

308:                                              ; preds = %302, %302, %306, %304
  br i1 %44, label %309, label %311

309:                                              ; preds = %308
  %310 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18has_active_builtinEN3spv7BuiltInENS1_12StorageClassE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %46, i32 noundef %1)
  br i1 %310, label %311, label %326

311:                                              ; preds = %309, %308
  %312 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %43)
  br i1 %312, label %316, label %313

313:                                              ; preds = %311
  %314 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %43)
  %315 = xor i1 %314, true
  br label %316

316:                                              ; preds = %313, %311
  %.not212 = phi i1 [ false, %311 ], [ %315, %313 ]
  %317 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL34variable_storage_requires_stage_ioEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1)
  br i1 %64, label %318, label %321

318:                                              ; preds = %316
  %319 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %320 = icmp eq i32 %319, 4
  br label %321

321:                                              ; preds = %318, %316
  %.not215 = phi i1 [ true, %316 ], [ %320, %318 ]
  %322 = add i32 %46, -5
  %or.cond7 = icmp ult i32 %322, -2
  %323 = and i1 %.not215, %or.cond7
  %brmerge209.not = and i1 %44, %323
  %.not210 = xor i1 %317, true
  %brmerge211 = or i1 %brmerge209.not, %.not210
  %brmerge213 = or i1 %.not212, %brmerge211
  br i1 %brmerge213, label %325, label %324

324:                                              ; preds = %321
  tail call void @_ZN11spirv_cross11CompilerMSL41add_composite_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5)
  br label %326

325:                                              ; preds = %321
  tail call void @_ZN11spirv_cross11CompilerMSL37add_plain_variable_to_interface_blockEN3spv12StorageClassERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_8SPIRTypeERNS_12SPIRVariableERNS0_18InterfaceBlockMetaE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(336) %3, ptr noundef nonnull align 8 dereferenceable(176) %4, ptr noundef nonnull align 8 dereferenceable(58) %5)
  br label %326

326:                                              ; preds = %306, %309, %301, %292, %83, %325, %324, %52
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  ret void

327:                                              ; preds = %293, %62
  %.pn193 = phi { ptr, i32 } [ %63, %62 ], [ %.pn191, %293 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  resume { ptr, i32 } %.pn193
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(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_cross7TypedIDILNS_5TypesE3EEcvjEv(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(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL16type_is_integralERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) local_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 = { 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 #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 = { 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 #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !16, i64 56}
!6 = !{!"_ZTSN11spirv_cross11CompilerMSL18InterfaceBlockMetaE", !7, i64 0, !16, i64 56, !16, i64 57}
!7 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS3_EEE", !8, i64 0}
!8 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11CompilerMSL18InterfaceBlockMeta12LocationMetaEESaIS6_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb0ELb0ELb1EEEE", !9, i64 0, !12, i64 8, !13, i64 16, !12, i64 24, !14, i64 32, !9, i64 48}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !9, i64 0}
!14 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !15, i64 0, !12, i64 8}
!15 = !{!"float", !10, i64 0}
!16 = !{!"bool", !10, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!20, !20, i64 0}
!20 = !{!"int", !10, i64 0}
!21 = !{!22, !22, i64 0}
!22 = !{!"_ZTSN3spv7BuiltInE", !10, i64 0}
!23 = !{!24, !28, i64 16}
!24 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !25, i64 0, !27, i64 12, !28, i64 16, !20, i64 20, !20, i64 24, !20, i64 28, !29, i64 32, !32, i64 88, !20, i64 120, !16, i64 124, !16, i64 125, !35, i64 128, !36, i64 136, !29, i64 192, !39, i64 248, !40, i64 272, !40, i64 276, !44, i64 280}
!25 = !{!"_ZTSN11spirv_cross8IVariantE", !26, i64 8}
!26 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !20, i64 0}
!27 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!28 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !30, i64 0, !12, i64 16, !31, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !9, i64 0, !12, i64 8}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !33, i64 0, !12, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !9, i64 0, !12, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!35 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!36 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !37, i64 0, !12, i64 16, !38, i64 24}
!37 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !9, i64 0, !12, i64 8}
!38 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!39 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !40, i64 0, !41, i64 4, !16, i64 8, !16, i64 9, !16, i64 10, !20, i64 12, !42, i64 16, !43, i64 20}
!40 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !20, i64 0}
!41 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!42 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!43 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!44 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !45, i64 0}
!45 = !{!"_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", !9, i64 0, !12, i64 8, !13, i64 16, !12, i64 24, !14, i64 32, !9, i64 48}
!46 = !{!6, !16, i64 57}
!47 = !{!24, !20, i64 28}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}
!50 = !{!24, !16, i64 124}
!51 = !{!24, !20, i64 120}
!52 = !{!24, !35, i64 128}
!53 = !{!35, !35, i64 0}
!54 = !{!55, !55, i64 0}
!55 = !{!"vtable pointer", !11, i64 0}
!56 = distinct !{!56, !49}
!57 = distinct !{!57, !49}


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