; 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.anon = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"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.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.std::allocator.71" = type { i8 }
%class.anon.422 = type { ptr, ptr }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.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_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.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 }
%"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 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"struct.spirv_cross::SPIREntryPoint" = type <{ %"class.spirv_cross::TypedID", [4 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::SmallVector.419", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::SmallVector.419" = type { %"class.spirv_cross::VectorView.420", i64, %"class.spirv_cross::AlignedBuffer.421" }
%"class.spirv_cross::VectorView.420" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.421" = type { [32 x i8] }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }

@.str.16 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [7 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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL23build_implicit_builtinsEv(ptr noundef nonnull align 8 dereferenceable(12482) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i8, align 1
  %4 = alloca i8, align 1
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i8, align 1
  %28 = alloca i8, align 1
  %29 = alloca i8, align 1
  %30 = alloca i8, align 1
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  %33 = alloca %class.anon, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca %"struct.spirv_cross::SPIRType", align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca %"struct.spirv_cross::SPIRType", align 8
  %42 = alloca %"class.spirv_cross::TypedID.414", align 4
  %43 = alloca ptr, align 8
  %44 = alloca %"class.spirv_cross::TypedID.413", align 4
  %45 = alloca i32, align 4
  %46 = alloca %"class.spirv_cross::TypedID.413", align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca %"struct.spirv_cross::SPIRType", align 8
  %51 = alloca %"class.spirv_cross::TypedID.414", align 4
  %52 = alloca ptr, align 8
  %53 = alloca %"class.spirv_cross::TypedID.413", align 4
  %54 = alloca i32, align 4
  %55 = alloca %"class.spirv_cross::TypedID.413", align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca %"struct.spirv_cross::SPIRType", align 8
  %60 = alloca %"class.spirv_cross::TypedID.414", align 4
  %61 = alloca ptr, align 8
  %62 = alloca %"class.spirv_cross::TypedID.413", align 4
  %63 = alloca i32, align 4
  %64 = alloca %"class.spirv_cross::TypedID.413", align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca %"struct.spirv_cross::SPIRType", align 8
  %69 = alloca %"class.spirv_cross::TypedID.414", align 4
  %70 = alloca ptr, align 8
  %71 = alloca %"class.spirv_cross::TypedID.413", align 4
  %72 = alloca i32, align 4
  %73 = alloca %"class.spirv_cross::TypedID.413", align 4
  %74 = alloca i32, align 4
  %75 = alloca %"struct.spirv_cross::SPIRType", align 8
  %76 = alloca %"class.spirv_cross::TypedID.414", align 4
  %77 = alloca ptr, align 8
  %78 = alloca %"class.spirv_cross::TypedID.413", align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca %"class.spirv_cross::TypedID.413", align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca %"class.spirv_cross::TypedID.413", align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca %"class.spirv_cross::TypedID.413", align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca %"class.spirv_cross::TypedID.413", align 4
  %91 = alloca i32, align 4
  %92 = alloca %"struct.spirv_cross::SPIRType", align 8
  %93 = alloca %"class.spirv_cross::TypedID.414", align 4
  %94 = alloca ptr, align 8
  %95 = alloca %"class.spirv_cross::TypedID.413", align 4
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca %"class.spirv_cross::TypedID.413", align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca %"class.spirv_cross::TypedID.413", align 4
  %102 = alloca i32, align 4
  %103 = alloca %"struct.spirv_cross::SPIRType", align 8
  %104 = alloca %"class.spirv_cross::TypedID.414", align 4
  %105 = alloca ptr, align 8
  %106 = alloca %"class.spirv_cross::TypedID.413", align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca %"class.spirv_cross::TypedID.413", align 4
  %110 = alloca i32, align 4
  %111 = alloca i32, align 4
  %112 = alloca %"class.spirv_cross::TypedID.413", align 4
  %113 = alloca i32, align 4
  %114 = alloca i32, align 4
  %115 = alloca %"class.spirv_cross::TypedID.413", align 4
  %116 = alloca i32, align 4
  %117 = alloca i32, align 4
  %118 = alloca i32, align 4
  %119 = alloca %"class.spirv_cross::TypedID.350", align 4
  %120 = alloca %"class.spirv_cross::TypedID.413", align 4
  %121 = alloca %"class.std::__cxx11::basic_string", align 8
  %122 = alloca %"class.std::allocator.71", align 1
  %123 = alloca i32, align 4
  %124 = alloca i32, align 4
  %125 = alloca i32, align 4
  %126 = alloca %"struct.spirv_cross::SPIRType", align 8
  %127 = alloca %"class.spirv_cross::TypedID.414", align 4
  %128 = alloca ptr, align 8
  %129 = alloca %"class.spirv_cross::TypedID.413", align 4
  %130 = alloca i32, align 4
  %131 = alloca %"class.spirv_cross::TypedID.413", align 4
  %132 = alloca i32, align 4
  %133 = alloca i32, align 4
  %134 = alloca i32, align 4
  %135 = alloca %"struct.spirv_cross::SPIRType", align 8
  %136 = alloca %"class.spirv_cross::TypedID.414", align 4
  %137 = alloca ptr, align 8
  %138 = alloca %"class.spirv_cross::TypedID.413", align 4
  %139 = alloca i32, align 4
  %140 = alloca %"class.spirv_cross::TypedID.413", align 4
  %141 = alloca i32, align 4
  %142 = alloca i32, align 4
  %143 = alloca i32, align 4
  %144 = alloca %"class.spirv_cross::TypedID.350", align 4
  %145 = alloca i32, align 4
  %146 = alloca i32, align 4
  %147 = alloca %"struct.spirv_cross::SPIRType", align 8
  %148 = alloca i32, align 4
  %149 = alloca %"class.spirv_cross::TypedID.413", align 4
  %150 = alloca %"class.spirv_cross::TypedID.413", align 4
  %151 = alloca %"class.spirv_cross::TypedID.413", align 4
  %152 = alloca %"class.std::__cxx11::basic_string", align 8
  %153 = alloca %"class.std::allocator.71", align 1
  %154 = alloca i32, align 4
  %155 = alloca i32, align 4
  %156 = alloca %"struct.spirv_cross::SPIRType", align 8
  %157 = alloca %"class.spirv_cross::TypedID.414", align 4
  %158 = alloca ptr, align 8
  %159 = alloca %"class.spirv_cross::TypedID.413", align 4
  %160 = alloca i32, align 4
  %161 = alloca %"class.spirv_cross::TypedID.413", align 4
  %162 = alloca i32, align 4
  %163 = alloca i32, align 4
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca %"struct.spirv_cross::SPIRType", align 8
  %167 = alloca %"struct.spirv_cross::SPIRType", align 8
  %168 = alloca %"class.spirv_cross::TypedID.414", align 4
  %169 = alloca ptr, align 8
  %170 = alloca %"class.spirv_cross::TypedID.413", align 4
  %171 = alloca i32, align 4
  %172 = alloca %"class.spirv_cross::TypedID.413", align 4
  %173 = alloca i32, align 4
  %174 = alloca i32, align 4
  %175 = alloca i32, align 4
  %176 = alloca %"struct.spirv_cross::SPIRType", align 8
  %177 = alloca %"class.spirv_cross::TypedID.414", align 4
  %178 = alloca ptr, align 8
  %179 = alloca %"class.spirv_cross::TypedID.413", align 4
  %180 = alloca i32, align 4
  %181 = alloca %"class.spirv_cross::TypedID.413", align 4
  %182 = alloca i32, align 4
  %183 = alloca i32, align 4
  %184 = alloca i32, align 4
  %185 = alloca i32, align 4
  %186 = alloca %"struct.spirv_cross::SPIRType", align 8
  %187 = alloca %"class.spirv_cross::TypedID.414", align 4
  %188 = alloca ptr, align 8
  %189 = alloca %"class.spirv_cross::TypedID.413", align 4
  %190 = alloca i32, align 4
  %191 = alloca %"class.spirv_cross::TypedID.413", align 4
  %192 = alloca i32, align 4
  %193 = alloca i32, align 4
  %194 = alloca i32, align 4
  %195 = alloca i32, align 4
  %196 = alloca %"struct.spirv_cross::SPIRType", align 8
  %197 = alloca %"struct.spirv_cross::SPIRType", align 8
  %198 = alloca %"class.spirv_cross::TypedID.414", align 4
  %199 = alloca ptr, align 8
  %200 = alloca %"class.spirv_cross::TypedID.413", align 4
  %201 = alloca i32, align 4
  %202 = alloca %"class.spirv_cross::TypedID.413", align 4
  %203 = alloca i32, align 4
  %204 = alloca %"class.spirv_cross::TypedID.413", align 4
  %205 = alloca %"class.std::__cxx11::basic_string", align 8
  %206 = alloca %"class.std::allocator.71", align 1
  %207 = alloca %"class.spirv_cross::TypedID.413", align 4
  %208 = alloca %"class.spirv_cross::TypedID.413", align 4
  %209 = alloca i32, align 4
  %210 = alloca %"class.spirv_cross::TypedID.413", align 4
  %211 = alloca %"class.std::__cxx11::basic_string", align 8
  %212 = alloca %"class.std::allocator.71", align 1
  %213 = alloca %"class.spirv_cross::TypedID.413", align 4
  %214 = alloca %"class.spirv_cross::TypedID.413", align 4
  %215 = alloca i32, align 4
  %216 = alloca %"class.spirv_cross::TypedID.413", align 4
  %217 = alloca %"class.std::__cxx11::basic_string", align 8
  %218 = alloca %"class.std::allocator.71", align 1
  %219 = alloca %"class.spirv_cross::TypedID.413", align 4
  %220 = alloca %"class.spirv_cross::TypedID.413", align 4
  %221 = alloca i32, align 4
  %222 = alloca %"class.spirv_cross::TypedID.413", align 4
  %223 = alloca %"class.std::__cxx11::basic_string", align 8
  %224 = alloca %"class.std::allocator.71", align 1
  %225 = alloca %"class.spirv_cross::TypedID.413", align 4
  %226 = alloca %"class.spirv_cross::TypedID.413", align 4
  %227 = alloca i8, align 1
  %228 = alloca i8, align 1
  %229 = alloca %class.anon.422, align 8
  %230 = alloca i32, align 4
  %231 = alloca i32, align 4
  %232 = alloca i32, align 4
  %233 = alloca i32, align 4
  %234 = alloca %"struct.spirv_cross::SPIRType", align 8
  %235 = alloca %"struct.spirv_cross::SPIRType", align 8
  %236 = alloca %"class.spirv_cross::TypedID.414", align 4
  %237 = alloca ptr, align 8
  %238 = alloca %"class.spirv_cross::TypedID.413", align 4
  %239 = alloca i32, align 4
  %240 = alloca %"class.spirv_cross::TypedID.413", align 4
  %241 = alloca i32, align 4
  %242 = alloca i32, align 4
  %243 = alloca i32, align 4
  %244 = alloca i32, align 4
  %245 = alloca %"struct.spirv_cross::SPIRType", align 8
  %246 = alloca %"class.spirv_cross::TypedID.414", align 4
  %247 = alloca ptr, align 8
  %248 = alloca %"class.spirv_cross::TypedID.413", align 4
  %249 = alloca i32, align 4
  %250 = alloca %"class.spirv_cross::TypedID.413", align 4
  %251 = alloca %"class.std::__cxx11::basic_string", align 8
  %252 = alloca %"class.std::allocator.71", align 1
  %253 = alloca i32, align 4
  %254 = alloca i32, align 4
  %255 = alloca i32, align 4
  %256 = alloca i32, align 4
  %257 = alloca %"struct.spirv_cross::SPIRType", align 8
  %258 = alloca %"struct.spirv_cross::SPIRType", align 8
  %259 = alloca %"class.spirv_cross::TypedID.414", align 4
  %260 = alloca ptr, align 8
  %261 = alloca %"class.spirv_cross::TypedID.413", align 4
  %262 = alloca i32, align 4
  %263 = alloca %"class.spirv_cross::TypedID.413", align 4
  %264 = alloca %"class.std::__cxx11::basic_string", align 8
  %265 = alloca %"class.std::allocator.71", align 1
  store ptr %0, ptr %2, align 8, !tbaa !5
  %266 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %3) #7
  %267 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %268 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %267, i32 noundef 19)
  %269 = zext i1 %268 to i8
  store i8 %269, ptr %3, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #7
  %270 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 76
  %271 = load i8, ptr %270, align 4, !tbaa !11, !range !174, !noundef !175
  %272 = trunc i8 %271 to i1
  br i1 %272, label %273, label %282

273:                                              ; preds = %1
  %274 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %275 = icmp eq i32 %274, 0
  br i1 %275, label %276, label %282

276:                                              ; preds = %273
  %277 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %278 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %277, i32 0, i32 50
  %279 = load i8, ptr %278, align 1, !tbaa !176, !range !174, !noundef !175
  %280 = trunc i8 %279 to i1
  %281 = xor i1 %280, true
  br label %282

282:                                              ; preds = %276, %273, %1
  %283 = phi i1 [ false, %273 ], [ false, %1 ], [ %281, %276 ]
  %284 = zext i1 %283 to i8
  store i8 %284, ptr %4, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #7
  %285 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  %286 = zext i1 %285 to i8
  store i8 %286, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #7
  %287 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %287, label %288, label %293

288:                                              ; preds = %282
  %289 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %290 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %289, i32 0, i32 49
  %291 = load i8, ptr %290, align 2, !tbaa !177, !range !174, !noundef !175
  %292 = trunc i8 %291 to i1
  br label %293

293:                                              ; preds = %288, %282
  %294 = phi i1 [ false, %282 ], [ %292, %288 ]
  %295 = zext i1 %294 to i8
  store i8 %295, ptr %6, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #7
  %296 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %297 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %296, i32 noundef 4416)
  br i1 %297, label %310, label %298

298:                                              ; preds = %293
  %299 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %300 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %299, i32 noundef 4417)
  br i1 %300, label %310, label %301

301:                                              ; preds = %298
  %302 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %303 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %302, i32 noundef 4418)
  br i1 %303, label %310, label %304

304:                                              ; preds = %301
  %305 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %306 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %305, i32 noundef 4419)
  br i1 %306, label %310, label %307

307:                                              ; preds = %304
  %308 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %309 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %308, i32 noundef 4420)
  br label %310

310:                                              ; preds = %307, %304, %301, %298, %293
  %311 = phi i1 [ true, %304 ], [ true, %301 ], [ true, %298 ], [ true, %293 ], [ %309, %307 ]
  %312 = zext i1 %311 to i8
  store i8 %312, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #7
  %313 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %314 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137) %313)
  br i1 %314, label %323, label %315

315:                                              ; preds = %310
  %316 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %317 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %316, i32 noundef 4417)
  br i1 %317, label %321, label %318

318:                                              ; preds = %315
  %319 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %320 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %319, i32 noundef 4418)
  br label %321

321:                                              ; preds = %318, %315
  %322 = phi i1 [ true, %315 ], [ %320, %318 ]
  br label %323

323:                                              ; preds = %321, %310
  %324 = phi i1 [ false, %310 ], [ %322, %321 ]
  %325 = zext i1 %324 to i8
  store i8 %325, ptr %8, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #7
  %326 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %327 = icmp eq i32 %326, 0
  br i1 %327, label %328, label %348

328:                                              ; preds = %323
  %329 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %330 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %329, i32 0, i32 29
  %331 = load i8, ptr %330, align 1, !tbaa !178, !range !174, !noundef !175
  %332 = trunc i8 %331 to i1
  br i1 %332, label %348, label %333

333:                                              ; preds = %328
  %334 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %335 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %334, i32 0, i32 28
  %336 = load i8, ptr %335, align 4, !tbaa !179, !range !174, !noundef !175
  %337 = trunc i8 %336 to i1
  br i1 %337, label %338, label %348

338:                                              ; preds = %333
  %339 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %340 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %339, i32 0, i32 27
  %341 = load i8, ptr %340, align 1, !tbaa !180, !range !174, !noundef !175
  %342 = trunc i8 %341 to i1
  br i1 %342, label %346, label %343

343:                                              ; preds = %338
  %344 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %345 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %344, i32 noundef 4440)
  br label %346

346:                                              ; preds = %343, %338
  %347 = phi i1 [ true, %338 ], [ %345, %343 ]
  br label %348

348:                                              ; preds = %346, %333, %328, %323
  %349 = phi i1 [ false, %333 ], [ false, %328 ], [ false, %323 ], [ %347, %346 ]
  %350 = zext i1 %349 to i8
  store i8 %350, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #7
  %351 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %352 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %351, i32 0, i32 30
  %353 = load i8, ptr %352, align 2, !tbaa !181, !range !174, !noundef !175
  %354 = trunc i8 %353 to i1
  br i1 %354, label %355, label %366

355:                                              ; preds = %348
  %356 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %357 = icmp eq i32 %356, 5
  br i1 %357, label %358, label %366

358:                                              ; preds = %355
  %359 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %360 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %359, i32 noundef 26)
  br i1 %360, label %364, label %361

361:                                              ; preds = %358
  %362 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %363 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %362, i32 noundef 28)
  br label %364

364:                                              ; preds = %361, %358
  %365 = phi i1 [ true, %358 ], [ %363, %361 ]
  br label %366

366:                                              ; preds = %364, %355, %348
  %367 = phi i1 [ false, %355 ], [ false, %348 ], [ %365, %364 ]
  %368 = zext i1 %367 to i8
  store i8 %368, ptr %10, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #7
  %369 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %370 = icmp eq i32 %369, 0
  br i1 %370, label %371, label %376

371:                                              ; preds = %366
  %372 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %373 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %372, i32 0, i32 50
  %374 = load i8, ptr %373, align 1, !tbaa !176, !range !174, !noundef !175
  %375 = trunc i8 %374 to i1
  br label %376

376:                                              ; preds = %371, %366
  %377 = phi i1 [ false, %366 ], [ %375, %371 ]
  %378 = zext i1 %377 to i8
  store i8 %378, ptr %11, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #7
  %379 = load i8, ptr %11, align 1, !tbaa !9, !range !174, !noundef !175
  %380 = trunc i8 %379 to i1
  br i1 %380, label %381, label %401

381:                                              ; preds = %376
  %382 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %383 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %382, i32 noundef 5)
  br i1 %383, label %399, label %384

384:                                              ; preds = %381
  %385 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %386 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %385, i32 noundef 42)
  br i1 %386, label %399, label %387

387:                                              ; preds = %384
  %388 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %389 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %388, i32 noundef 4424)
  br i1 %389, label %399, label %390

390:                                              ; preds = %387
  %391 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %392 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %391, i32 noundef 6)
  br i1 %392, label %399, label %393

393:                                              ; preds = %390
  %394 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %395 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %394, i32 noundef 43)
  br i1 %395, label %399, label %396

396:                                              ; preds = %393
  %397 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %398 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %397, i32 noundef 4425)
  br label %399

399:                                              ; preds = %396, %393, %390, %387, %384, %381
  %400 = phi i1 [ true, %393 ], [ true, %390 ], [ true, %387 ], [ true, %384 ], [ true, %381 ], [ %398, %396 ]
  br label %401

401:                                              ; preds = %399, %376
  %402 = phi i1 [ false, %376 ], [ %400, %399 ]
  %403 = zext i1 %402 to i8
  store i8 %403, ptr %12, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  %404 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %405 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %404, i32 0, i32 53
  %406 = load i8, ptr %405, align 2, !tbaa !182, !range !174, !noundef !175
  %407 = trunc i8 %406 to i1
  br i1 %407, label %408, label %411

408:                                              ; preds = %401
  %409 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %410 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %409, i32 noundef 40)
  br i1 %410, label %413, label %411

411:                                              ; preds = %408, %401
  %412 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br label %413

413:                                              ; preds = %411, %408
  %414 = phi i1 [ true, %408 ], [ %412, %411 ]
  %415 = zext i1 %414 to i8
  store i8 %415, ptr %13, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  %416 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %417 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %416, i32 0, i32 53
  %418 = load i8, ptr %417, align 2, !tbaa !182, !range !174, !noundef !175
  %419 = trunc i8 %418 to i1
  br i1 %419, label %420, label %423

420:                                              ; preds = %413
  %421 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 20
  %422 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %421, i32 noundef 38)
  br label %423

423:                                              ; preds = %420, %413
  %424 = phi i1 [ false, %413 ], [ %422, %420 ]
  %425 = zext i1 %424 to i8
  store i8 %425, ptr %14, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  %426 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %427 = icmp eq i32 %426, 4
  br i1 %427, label %428, label %444

428:                                              ; preds = %423
  %429 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL33uses_explicit_early_fragment_testEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %429, label %444, label %430

430:                                              ; preds = %428
  %431 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 26
  %432 = load i8, ptr %431, align 8, !tbaa !183, !range !174, !noundef !175
  %433 = trunc i8 %432 to i1
  br i1 %433, label %434, label %444

434:                                              ; preds = %430
  %435 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %436 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %435, i32 0, i32 21
  %437 = load i8, ptr %436, align 1, !tbaa !184, !range !174, !noundef !175
  %438 = trunc i8 %437 to i1
  br i1 %438, label %439, label %444

439:                                              ; preds = %434
  %440 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %441 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %440, i32 0, i32 65
  %442 = load i8, ptr %441, align 4, !tbaa !185, !range !174, !noundef !175
  %443 = trunc i8 %442 to i1
  br label %444

444:                                              ; preds = %439, %434, %430, %428, %423
  %445 = phi i1 [ false, %434 ], [ false, %430 ], [ false, %428 ], [ false, %423 ], [ %443, %439 ]
  %446 = zext i1 %445 to i8
  store i8 %446, ptr %15, align 1, !tbaa !9
  %447 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 26
  %448 = load i8, ptr %447, align 8, !tbaa !183, !range !174, !noundef !175
  %449 = trunc i8 %448 to i1
  br i1 %449, label %506, label %450

450:                                              ; preds = %444
  %451 = load i8, ptr %3, align 1, !tbaa !9, !range !174, !noundef !175
  %452 = trunc i8 %451 to i1
  br i1 %452, label %506, label %453

453:                                              ; preds = %450
  %454 = load i8, ptr %7, align 1, !tbaa !9, !range !174, !noundef !175
  %455 = trunc i8 %454 to i1
  br i1 %455, label %506, label %456

456:                                              ; preds = %453
  %457 = load i8, ptr %4, align 1, !tbaa !9, !range !174, !noundef !175
  %458 = trunc i8 %457 to i1
  br i1 %458, label %506, label %459

459:                                              ; preds = %456
  %460 = load i8, ptr %5, align 1, !tbaa !9, !range !174, !noundef !175
  %461 = trunc i8 %460 to i1
  br i1 %461, label %506, label %462

462:                                              ; preds = %459
  %463 = load i8, ptr %6, align 1, !tbaa !9, !range !174, !noundef !175
  %464 = trunc i8 %463 to i1
  br i1 %464, label %506, label %465

465:                                              ; preds = %462
  %466 = load i8, ptr %9, align 1, !tbaa !9, !range !174, !noundef !175
  %467 = trunc i8 %466 to i1
  br i1 %467, label %506, label %468

468:                                              ; preds = %465
  %469 = load i8, ptr %10, align 1, !tbaa !9, !range !174, !noundef !175
  %470 = trunc i8 %469 to i1
  br i1 %470, label %506, label %471

471:                                              ; preds = %468
  %472 = load i8, ptr %12, align 1, !tbaa !9, !range !174, !noundef !175
  %473 = trunc i8 %472 to i1
  br i1 %473, label %506, label %474

474:                                              ; preds = %471
  %475 = load i8, ptr %11, align 1, !tbaa !9, !range !174, !noundef !175
  %476 = trunc i8 %475 to i1
  br i1 %476, label %506, label %477

477:                                              ; preds = %474
  %478 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 82
  %479 = load i8, ptr %478, align 2, !tbaa !186, !range !174, !noundef !175
  %480 = trunc i8 %479 to i1
  br i1 %480, label %506, label %481

481:                                              ; preds = %477
  %482 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 80
  %483 = load i8, ptr %482, align 8, !tbaa !187, !range !174, !noundef !175
  %484 = trunc i8 %483 to i1
  br i1 %484, label %506, label %485

485:                                              ; preds = %481
  %486 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 81
  %487 = load i8, ptr %486, align 1, !tbaa !188, !range !174, !noundef !175
  %488 = trunc i8 %487 to i1
  br i1 %488, label %506, label %489

489:                                              ; preds = %485
  %490 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 83
  %491 = load i8, ptr %490, align 1, !tbaa !189, !range !174, !noundef !175
  %492 = trunc i8 %491 to i1
  br i1 %492, label %506, label %493

493:                                              ; preds = %489
  %494 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL32has_additional_fixed_sample_maskEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %494, label %506, label %495

495:                                              ; preds = %493
  %496 = load i8, ptr %13, align 1, !tbaa !9, !range !174, !noundef !175
  %497 = trunc i8 %496 to i1
  br i1 %497, label %506, label %498

498:                                              ; preds = %495
  %499 = load i8, ptr %14, align 1, !tbaa !9, !range !174, !noundef !175
  %500 = trunc i8 %499 to i1
  br i1 %500, label %506, label %501

501:                                              ; preds = %498
  %502 = load i8, ptr %15, align 1, !tbaa !9, !range !174, !noundef !175
  %503 = trunc i8 %502 to i1
  br i1 %503, label %506, label %504

504:                                              ; preds = %501
  %505 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %505, label %506, label %1901

506:                                              ; preds = %504, %501, %498, %495, %493, %489, %485, %481, %477, %474, %471, %468, %465, %462, %459, %456, %453, %450, %444
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #7
  store i8 0, ptr %16, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #7
  store i8 0, ptr %17, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  store i8 0, ptr %18, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #7
  store i8 0, ptr %19, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  store i8 0, ptr %20, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #7
  store i8 0, ptr %21, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  store i8 0, ptr %22, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  store i8 0, ptr %23, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  store i8 0, ptr %24, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  store i8 0, ptr %25, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #7
  store i8 0, ptr %26, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  store i8 0, ptr %27, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #7
  store i8 0, ptr %28, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #7
  store i8 0, ptr %29, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #7
  store i8 0, ptr %30, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  store i8 0, ptr %31, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !190
  %507 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 232, ptr %33) #7
  %508 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 0
  store ptr %266, ptr %508, align 8, !tbaa !191
  %509 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 1
  store ptr %15, ptr %509, align 8, !tbaa !5
  %510 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 2
  store ptr %31, ptr %510, align 8, !tbaa !5
  %511 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 3
  store ptr %16, ptr %511, align 8, !tbaa !5
  %512 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 4
  store ptr %27, ptr %512, align 8, !tbaa !5
  %513 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 5
  store ptr %26, ptr %513, align 8, !tbaa !5
  %514 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 6
  store ptr %3, ptr %514, align 8, !tbaa !5
  %515 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 7
  store ptr %17, ptr %515, align 8, !tbaa !5
  %516 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 8
  store ptr %4, ptr %516, align 8, !tbaa !5
  %517 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 9
  store ptr %18, ptr %517, align 8, !tbaa !5
  %518 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 10
  store ptr %19, ptr %518, align 8, !tbaa !5
  %519 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 11
  store ptr %20, ptr %519, align 8, !tbaa !5
  %520 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 12
  store ptr %21, ptr %520, align 8, !tbaa !5
  %521 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 13
  store ptr %5, ptr %521, align 8, !tbaa !5
  %522 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 14
  store ptr %22, ptr %522, align 8, !tbaa !5
  %523 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 15
  store ptr %6, ptr %523, align 8, !tbaa !5
  %524 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 16
  store ptr %23, ptr %524, align 8, !tbaa !5
  %525 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 17
  store ptr %7, ptr %525, align 8, !tbaa !5
  %526 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 18
  store ptr %24, ptr %526, align 8, !tbaa !5
  %527 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 19
  store ptr %8, ptr %527, align 8, !tbaa !5
  %528 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 20
  store ptr %25, ptr %528, align 8, !tbaa !5
  %529 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 21
  store ptr %9, ptr %529, align 8, !tbaa !5
  %530 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 22
  store ptr %28, ptr %530, align 8, !tbaa !5
  %531 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 23
  store ptr %13, ptr %531, align 8, !tbaa !5
  %532 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 24
  store ptr %29, ptr %532, align 8, !tbaa !5
  %533 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 25
  store ptr %14, ptr %533, align 8, !tbaa !5
  %534 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 26
  store ptr %30, ptr %534, align 8, !tbaa !5
  %535 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 27
  store ptr %10, ptr %535, align 8, !tbaa !5
  %536 = getelementptr inbounds %class.anon, ptr %33, i32 0, i32 28
  store ptr %32, ptr %536, align 8, !tbaa !5
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL23build_implicit_builtinsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %507, ptr noundef nonnull align 8 dereferenceable(232) %33)
  call void @llvm.lifetime.end.p0(i64 232, ptr %33) #7
  %537 = load i8, ptr %16, align 1, !tbaa !9, !range !174, !noundef !175
  %538 = trunc i8 %537 to i1
  br i1 %538, label %539, label %560

539:                                              ; preds = %506
  %540 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %541 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %540, i32 0, i32 27
  %542 = load i8, ptr %541, align 1, !tbaa !180, !range !174, !noundef !175
  %543 = trunc i8 %542 to i1
  br i1 %543, label %544, label %547

544:                                              ; preds = %539
  %545 = load i8, ptr %26, align 1, !tbaa !9, !range !174, !noundef !175
  %546 = trunc i8 %545 to i1
  br i1 %546, label %547, label %560

547:                                              ; preds = %544, %539
  %548 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %549 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %548, i32 0, i32 51
  %550 = load i8, ptr %549, align 4, !tbaa !193, !range !174, !noundef !175
  %551 = trunc i8 %550 to i1
  br i1 %551, label %552, label %775

552:                                              ; preds = %547
  %553 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %554 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %553, i32 0, i32 27
  %555 = load i8, ptr %554, align 1, !tbaa !180, !range !174, !noundef !175
  %556 = trunc i8 %555 to i1
  br i1 %556, label %775, label %557

557:                                              ; preds = %552
  %558 = load i8, ptr %27, align 1, !tbaa !9, !range !174, !noundef !175
  %559 = trunc i8 %558 to i1
  br i1 %559, label %775, label %560

560:                                              ; preds = %557, %544, %506
  %561 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %562 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %561, i32 0, i32 39
  %563 = load i8, ptr %562, align 4, !tbaa !194, !range !174, !noundef !175
  %564 = trunc i8 %563 to i1
  br i1 %564, label %775, label %565

565:                                              ; preds = %560
  %566 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 26
  %567 = load i8, ptr %566, align 8, !tbaa !183, !range !174, !noundef !175
  %568 = trunc i8 %567 to i1
  br i1 %568, label %569, label %775

569:                                              ; preds = %565
  %570 = load i8, ptr %16, align 1, !tbaa !9, !range !174, !noundef !175
  %571 = trunc i8 %570 to i1
  br i1 %571, label %643, label %572

572:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %573 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %574 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %573, i32 noundef 3)
  store i32 %574, ptr %34, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %575 = load i32, ptr %34, align 4, !tbaa !190
  store i32 %575, ptr %35, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %576 = load i32, ptr %34, align 4, !tbaa !190
  %577 = add i32 %576, 1
  store i32 %577, ptr %36, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  %578 = load i32, ptr %34, align 4, !tbaa !190
  %579 = add i32 %578, 2
  store i32 %579, ptr %37, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %38) #7
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %38, i32 noundef 23)
  %580 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %38, i32 0, i32 2
  store i32 13, ptr %580, align 8, !tbaa !195
  %581 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %38, i32 0, i32 3
  store i32 32, ptr %581, align 4, !tbaa !208
  %582 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %38, i32 0, i32 4
  store i32 4, ptr %582, align 8, !tbaa !209
  %583 = load i32, ptr %35, align 4, !tbaa !190
  %584 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %583, ptr noundef nonnull align 8 dereferenceable(336) %38)
          to label %585 unwind label %615

585:                                              ; preds = %572
  call void @llvm.lifetime.start.p0(i64 336, ptr %41) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %41, ptr noundef nonnull align 8 dereferenceable(336) %38)
          to label %586 unwind label %619

586:                                              ; preds = %585
  %587 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 1
  store i32 32, ptr %587, align 4, !tbaa !210
  %588 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 9
  store i8 1, ptr %588, align 4, !tbaa !211
  %589 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 8
  %590 = load i32, ptr %589, align 8, !tbaa !212
  %591 = add i32 %590, 1
  store i32 %591, ptr %589, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  %592 = load i32, ptr %35, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %592)
          to label %593 unwind label %623

593:                                              ; preds = %586
  %594 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %594, ptr align 4 %42, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  %595 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 11
  store i32 1, ptr %595, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %596 = load i32, ptr %36, align 4, !tbaa !190
  %597 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %596, ptr noundef nonnull align 8 dereferenceable(336) %41)
          to label %598 unwind label %627

598:                                              ; preds = %593
  store ptr %597, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  %599 = load i32, ptr %35, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %44, i32 noundef %599)
          to label %600 unwind label %631

600:                                              ; preds = %598
  %601 = load ptr, ptr %43, align 8, !tbaa !5
  %602 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %601, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %602, ptr align 4 %44, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  %603 = load i32, ptr %37, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  store i32 1, ptr %45, align 4, !tbaa !215
  %604 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %603, ptr noundef nonnull align 4 dereferenceable(4) %36, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %605 unwind label %635

605:                                              ; preds = %600
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  %606 = load i32, ptr %37, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %46, i32 noundef %606)
          to label %607 unwind label %627

607:                                              ; preds = %605
  %608 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %46, i32 0, i32 0
  %609 = load i32, ptr %608, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %609, i32 noundef 11, i32 noundef 15)
          to label %610 unwind label %627

610:                                              ; preds = %607
  %611 = load i32, ptr %37, align 4, !tbaa !190
  %612 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 2
  store i32 %611, ptr %612, align 8, !tbaa !216
  %613 = load i32, ptr %37, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 15, i32 noundef %613)
          to label %614 unwind label %627

614:                                              ; preds = %610
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %41) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %38) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %643

615:                                              ; preds = %572
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %39, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %40, align 4
  br label %642

619:                                              ; preds = %585
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %39, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %40, align 4
  br label %641

623:                                              ; preds = %586
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %39, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  br label %640

627:                                              ; preds = %610, %607, %605, %593
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %39, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %40, align 4
  br label %639

631:                                              ; preds = %598
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %39, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %639

635:                                              ; preds = %600
  %636 = landingpad { ptr, i32 }
          cleanup
  %637 = extractvalue { ptr, i32 } %636, 0
  store ptr %637, ptr %39, align 8
  %638 = extractvalue { ptr, i32 } %636, 1
  store i32 %638, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  br label %639

639:                                              ; preds = %635, %631, %627
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  br label %640

640:                                              ; preds = %639, %623
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #7
  br label %641

641:                                              ; preds = %640, %619
  call void @llvm.lifetime.end.p0(i64 336, ptr %41) #7
  br label %642

642:                                              ; preds = %641, %615
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %38) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %1900

643:                                              ; preds = %614, %569
  %644 = load i8, ptr %27, align 1, !tbaa !9, !range !174, !noundef !175
  %645 = trunc i8 %644 to i1
  br i1 %645, label %711, label %646

646:                                              ; preds = %643
  %647 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %648 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %647, i32 0, i32 51
  %649 = load i8, ptr %648, align 4, !tbaa !193, !range !174, !noundef !175
  %650 = trunc i8 %649 to i1
  br i1 %650, label %651, label %711

651:                                              ; preds = %646
  %652 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %653 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %652, i32 0, i32 27
  %654 = load i8, ptr %653, align 1, !tbaa !180, !range !174, !noundef !175
  %655 = trunc i8 %654 to i1
  br i1 %655, label %711, label %656

656:                                              ; preds = %651
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #7
  %657 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %658 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %657, i32 noundef 2)
  store i32 %658, ptr %47, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  %659 = load i32, ptr %47, align 4, !tbaa !190
  store i32 %659, ptr %48, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #7
  %660 = load i32, ptr %47, align 4, !tbaa !190
  %661 = add i32 %660, 1
  store i32 %661, ptr %49, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %50) #7
  %662 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %50, ptr noundef nonnull align 8 dereferenceable(336) %662)
  %663 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 1
  store i32 32, ptr %663, align 4, !tbaa !210
  %664 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 9
  store i8 1, ptr %664, align 4, !tbaa !211
  %665 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 8
  %666 = load i32, ptr %665, align 8, !tbaa !212
  %667 = add i32 %666, 1
  store i32 %667, ptr %665, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  %668 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %669 unwind label %693

669:                                              ; preds = %656
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %668)
          to label %670 unwind label %693

670:                                              ; preds = %669
  %671 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %671, ptr align 4 %51, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  %672 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %50, i32 0, i32 11
  store i32 1, ptr %672, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  %673 = load i32, ptr %48, align 4, !tbaa !190
  %674 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %673, ptr noundef nonnull align 8 dereferenceable(336) %50)
          to label %675 unwind label %697

675:                                              ; preds = %670
  store ptr %674, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #7
  %676 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %677 unwind label %701

677:                                              ; preds = %675
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %53, i32 noundef %676)
          to label %678 unwind label %701

678:                                              ; preds = %677
  %679 = load ptr, ptr %52, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %679, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %680, ptr align 4 %53, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  %681 = load i32, ptr %49, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  store i32 1, ptr %54, align 4, !tbaa !215
  %682 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %681, ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %683 unwind label %705

683:                                              ; preds = %678
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  %684 = load i32, ptr %49, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %55, i32 noundef %684)
          to label %685 unwind label %697

685:                                              ; preds = %683
  %686 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %55, i32 0, i32 0
  %687 = load i32, ptr %686, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %687, i32 noundef 11, i32 noundef 9)
          to label %688 unwind label %697

688:                                              ; preds = %685
  %689 = load i32, ptr %49, align 4, !tbaa !190
  %690 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 11
  store i32 %689, ptr %690, align 4, !tbaa !217
  %691 = load i32, ptr %49, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 9, i32 noundef %691)
          to label %692 unwind label %697

692:                                              ; preds = %688
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %50) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  br label %711

693:                                              ; preds = %669, %656
  %694 = landingpad { ptr, i32 }
          cleanup
  %695 = extractvalue { ptr, i32 } %694, 0
  store ptr %695, ptr %39, align 8
  %696 = extractvalue { ptr, i32 } %694, 1
  store i32 %696, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  br label %710

697:                                              ; preds = %688, %685, %683, %670
  %698 = landingpad { ptr, i32 }
          cleanup
  %699 = extractvalue { ptr, i32 } %698, 0
  store ptr %699, ptr %39, align 8
  %700 = extractvalue { ptr, i32 } %698, 1
  store i32 %700, ptr %40, align 4
  br label %709

701:                                              ; preds = %677, %675
  %702 = landingpad { ptr, i32 }
          cleanup
  %703 = extractvalue { ptr, i32 } %702, 0
  store ptr %703, ptr %39, align 8
  %704 = extractvalue { ptr, i32 } %702, 1
  store i32 %704, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  br label %709

705:                                              ; preds = %678
  %706 = landingpad { ptr, i32 }
          cleanup
  %707 = extractvalue { ptr, i32 } %706, 0
  store ptr %707, ptr %39, align 8
  %708 = extractvalue { ptr, i32 } %706, 1
  store i32 %708, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  br label %709

709:                                              ; preds = %705, %701, %697
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  br label %710

710:                                              ; preds = %709, %693
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %50) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  br label %1900

711:                                              ; preds = %692, %651, %646, %643
  %712 = load i8, ptr %26, align 1, !tbaa !9, !range !174, !noundef !175
  %713 = trunc i8 %712 to i1
  br i1 %713, label %774, label %714

714:                                              ; preds = %711
  %715 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %716 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %715, i32 0, i32 27
  %717 = load i8, ptr %716, align 1, !tbaa !180, !range !174, !noundef !175
  %718 = trunc i8 %717 to i1
  br i1 %718, label %719, label %774

719:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #7
  %720 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %721 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %720, i32 noundef 2)
  store i32 %721, ptr %56, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #7
  %722 = load i32, ptr %56, align 4, !tbaa !190
  store i32 %722, ptr %57, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %723 = load i32, ptr %56, align 4, !tbaa !190
  %724 = add i32 %723, 1
  store i32 %724, ptr %58, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %59) #7
  %725 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %59, ptr noundef nonnull align 8 dereferenceable(336) %725)
  %726 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %59, i32 0, i32 1
  store i32 32, ptr %726, align 4, !tbaa !210
  %727 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %59, i32 0, i32 9
  store i8 1, ptr %727, align 4, !tbaa !211
  %728 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %59, i32 0, i32 8
  %729 = load i32, ptr %728, align 8, !tbaa !212
  %730 = add i32 %729, 1
  store i32 %730, ptr %728, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #7
  %731 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %732 unwind label %756

732:                                              ; preds = %719
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %60, i32 noundef %731)
          to label %733 unwind label %756

733:                                              ; preds = %732
  %734 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %59, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %734, ptr align 4 %60, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #7
  %735 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %59, i32 0, i32 11
  store i32 1, ptr %735, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %736 = load i32, ptr %57, align 4, !tbaa !190
  %737 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %736, ptr noundef nonnull align 8 dereferenceable(336) %59)
          to label %738 unwind label %760

738:                                              ; preds = %733
  store ptr %737, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #7
  %739 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %740 unwind label %764

740:                                              ; preds = %738
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %62, i32 noundef %739)
          to label %741 unwind label %764

741:                                              ; preds = %740
  %742 = load ptr, ptr %61, align 8, !tbaa !5
  %743 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %742, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %743, ptr align 4 %62, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  %744 = load i32, ptr %58, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #7
  store i32 1, ptr %63, align 4, !tbaa !215
  %745 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %744, ptr noundef nonnull align 4 dereferenceable(4) %57, ptr noundef nonnull align 4 dereferenceable(4) %63)
          to label %746 unwind label %768

746:                                              ; preds = %741
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #7
  %747 = load i32, ptr %58, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %64, i32 noundef %747)
          to label %748 unwind label %760

748:                                              ; preds = %746
  %749 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %64, i32 0, i32 0
  %750 = load i32, ptr %749, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %750, i32 noundef 11, i32 noundef 4440)
          to label %751 unwind label %760

751:                                              ; preds = %748
  %752 = load i32, ptr %58, align 4, !tbaa !190
  %753 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 10
  store i32 %752, ptr %753, align 8, !tbaa !218
  %754 = load i32, ptr %58, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 4440, i32 noundef %754)
          to label %755 unwind label %760

755:                                              ; preds = %751
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %59) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  br label %774

756:                                              ; preds = %732, %719
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %39, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #7
  br label %773

760:                                              ; preds = %751, %748, %746, %733
  %761 = landingpad { ptr, i32 }
          cleanup
  %762 = extractvalue { ptr, i32 } %761, 0
  store ptr %762, ptr %39, align 8
  %763 = extractvalue { ptr, i32 } %761, 1
  store i32 %763, ptr %40, align 4
  br label %772

764:                                              ; preds = %740, %738
  %765 = landingpad { ptr, i32 }
          cleanup
  %766 = extractvalue { ptr, i32 } %765, 0
  store ptr %766, ptr %39, align 8
  %767 = extractvalue { ptr, i32 } %765, 1
  store i32 %767, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %772

768:                                              ; preds = %741
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %39, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #7
  br label %772

772:                                              ; preds = %768, %764, %760
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  br label %773

773:                                              ; preds = %772, %756
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %59) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  br label %1900

774:                                              ; preds = %755, %714, %711
  br label %775

775:                                              ; preds = %774, %565, %560, %557, %552, %547
  %776 = load i8, ptr %17, align 1, !tbaa !9, !range !174, !noundef !175
  %777 = trunc i8 %776 to i1
  br i1 %777, label %840, label %778

778:                                              ; preds = %775
  %779 = load i8, ptr %3, align 1, !tbaa !9, !range !174, !noundef !175
  %780 = trunc i8 %779 to i1
  br i1 %780, label %785, label %781

781:                                              ; preds = %778
  %782 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 82
  %783 = load i8, ptr %782, align 2, !tbaa !186, !range !174, !noundef !175
  %784 = trunc i8 %783 to i1
  br i1 %784, label %785, label %840

785:                                              ; preds = %781, %778
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #7
  %786 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %787 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %786, i32 noundef 2)
  store i32 %787, ptr %65, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #7
  %788 = load i32, ptr %65, align 4, !tbaa !190
  store i32 %788, ptr %66, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #7
  %789 = load i32, ptr %65, align 4, !tbaa !190
  %790 = add i32 %789, 1
  store i32 %790, ptr %67, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %68) #7
  %791 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %68, ptr noundef nonnull align 8 dereferenceable(336) %791)
  %792 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 1
  store i32 32, ptr %792, align 4, !tbaa !210
  %793 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 9
  store i8 1, ptr %793, align 4, !tbaa !211
  %794 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 8
  %795 = load i32, ptr %794, align 8, !tbaa !212
  %796 = add i32 %795, 1
  store i32 %796, ptr %794, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %797 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %798 unwind label %822

798:                                              ; preds = %785
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %69, i32 noundef %797)
          to label %799 unwind label %822

799:                                              ; preds = %798
  %800 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %800, ptr align 4 %69, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  %801 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 11
  store i32 1, ptr %801, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #7
  %802 = load i32, ptr %66, align 4, !tbaa !190
  %803 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %802, ptr noundef nonnull align 8 dereferenceable(336) %68)
          to label %804 unwind label %826

804:                                              ; preds = %799
  store ptr %803, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #7
  %805 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %806 unwind label %830

806:                                              ; preds = %804
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %71, i32 noundef %805)
          to label %807 unwind label %830

807:                                              ; preds = %806
  %808 = load ptr, ptr %70, align 8, !tbaa !5
  %809 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %808, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %809, ptr align 4 %71, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  %810 = load i32, ptr %67, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #7
  store i32 1, ptr %72, align 4, !tbaa !215
  %811 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %810, ptr noundef nonnull align 4 dereferenceable(4) %66, ptr noundef nonnull align 4 dereferenceable(4) %72)
          to label %812 unwind label %834

812:                                              ; preds = %807
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  %813 = load i32, ptr %67, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %73, i32 noundef %813)
          to label %814 unwind label %826

814:                                              ; preds = %812
  %815 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %73, i32 0, i32 0
  %816 = load i32, ptr %815, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %816, i32 noundef 11, i32 noundef 18)
          to label %817 unwind label %826

817:                                              ; preds = %814
  %818 = load i32, ptr %67, align 4, !tbaa !190
  %819 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 3
  store i32 %818, ptr %819, align 4, !tbaa !219
  %820 = load i32, ptr %67, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 18, i32 noundef %820)
          to label %821 unwind label %826

821:                                              ; preds = %817
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %68) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  br label %840

822:                                              ; preds = %798, %785
  %823 = landingpad { ptr, i32 }
          cleanup
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %39, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  br label %839

826:                                              ; preds = %817, %814, %812, %799
  %827 = landingpad { ptr, i32 }
          cleanup
  %828 = extractvalue { ptr, i32 } %827, 0
  store ptr %828, ptr %39, align 8
  %829 = extractvalue { ptr, i32 } %827, 1
  store i32 %829, ptr %40, align 4
  br label %838

830:                                              ; preds = %806, %804
  %831 = landingpad { ptr, i32 }
          cleanup
  %832 = extractvalue { ptr, i32 } %831, 0
  store ptr %832, ptr %39, align 8
  %833 = extractvalue { ptr, i32 } %831, 1
  store i32 %833, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  br label %838

834:                                              ; preds = %807
  %835 = landingpad { ptr, i32 }
          cleanup
  %836 = extractvalue { ptr, i32 } %835, 0
  store ptr %836, ptr %39, align 8
  %837 = extractvalue { ptr, i32 } %835, 1
  store i32 %837, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  br label %838

838:                                              ; preds = %834, %830, %826
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  br label %839

839:                                              ; preds = %838, %822
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %68) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  br label %1900

840:                                              ; preds = %821, %781, %775
  %841 = load i8, ptr %4, align 1, !tbaa !9, !range !174, !noundef !175
  %842 = trunc i8 %841 to i1
  br i1 %842, label %843, label %855

843:                                              ; preds = %840
  %844 = load i8, ptr %18, align 1, !tbaa !9, !range !174, !noundef !175
  %845 = trunc i8 %844 to i1
  br i1 %845, label %846, label %867

846:                                              ; preds = %843
  %847 = load i8, ptr %19, align 1, !tbaa !9, !range !174, !noundef !175
  %848 = trunc i8 %847 to i1
  br i1 %848, label %849, label %867

849:                                              ; preds = %846
  %850 = load i8, ptr %20, align 1, !tbaa !9, !range !174, !noundef !175
  %851 = trunc i8 %850 to i1
  br i1 %851, label %852, label %867

852:                                              ; preds = %849
  %853 = load i8, ptr %21, align 1, !tbaa !9, !range !174, !noundef !175
  %854 = trunc i8 %853 to i1
  br i1 %854, label %855, label %867

855:                                              ; preds = %852, %840
  %856 = load i8, ptr %9, align 1, !tbaa !9, !range !174, !noundef !175
  %857 = trunc i8 %856 to i1
  br i1 %857, label %858, label %1127

858:                                              ; preds = %855
  %859 = load i8, ptr %20, align 1, !tbaa !9, !range !174, !noundef !175
  %860 = trunc i8 %859 to i1
  br i1 %860, label %861, label %867

861:                                              ; preds = %858
  %862 = load i8, ptr %21, align 1, !tbaa !9, !range !174, !noundef !175
  %863 = trunc i8 %862 to i1
  br i1 %863, label %864, label %867

864:                                              ; preds = %861
  %865 = load i8, ptr %26, align 1, !tbaa !9, !range !174, !noundef !175
  %866 = trunc i8 %865 to i1
  br i1 %866, label %1127, label %867

867:                                              ; preds = %864, %861, %858, %852, %849, %846, %843
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  %868 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %869 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %868, i32 noundef 1)
  store i32 %869, ptr %74, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %75) #7
  %870 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %75, ptr noundef nonnull align 8 dereferenceable(336) %870)
  %871 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 1
  store i32 32, ptr %871, align 4, !tbaa !210
  %872 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 9
  store i8 1, ptr %872, align 4, !tbaa !211
  %873 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 8
  %874 = load i32, ptr %873, align 8, !tbaa !212
  %875 = add i32 %874, 1
  store i32 %875, ptr %873, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #7
  %876 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %877 unwind label %910

877:                                              ; preds = %867
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %76, i32 noundef %876)
          to label %878 unwind label %910

878:                                              ; preds = %877
  %879 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %879, ptr align 4 %76, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  %880 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 11
  store i32 1, ptr %880, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #7
  %881 = load i32, ptr %74, align 4, !tbaa !190
  %882 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %881, ptr noundef nonnull align 8 dereferenceable(336) %75)
          to label %883 unwind label %914

883:                                              ; preds = %878
  store ptr %882, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  %884 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %885 unwind label %918

885:                                              ; preds = %883
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %78, i32 noundef %884)
          to label %886 unwind label %918

886:                                              ; preds = %885
  %887 = load ptr, ptr %77, align 8, !tbaa !5
  %888 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %887, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %888, ptr align 4 %78, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  %889 = load i8, ptr %4, align 1, !tbaa !9, !range !174, !noundef !175
  %890 = trunc i8 %889 to i1
  br i1 %890, label %891, label %931

891:                                              ; preds = %886
  %892 = load i8, ptr %18, align 1, !tbaa !9, !range !174, !noundef !175
  %893 = trunc i8 %892 to i1
  br i1 %893, label %931, label %894

894:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #7
  %895 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %896 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %895, i32 noundef 1)
          to label %897 unwind label %922

897:                                              ; preds = %894
  store i32 %896, ptr %79, align 4, !tbaa !190
  %898 = load i32, ptr %79, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  store i32 1, ptr %80, align 4, !tbaa !215
  %899 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %898, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %80)
          to label %900 unwind label %926

900:                                              ; preds = %897
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  %901 = load i32, ptr %79, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %81, i32 noundef %901)
          to label %902 unwind label %922

902:                                              ; preds = %900
  %903 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %81, i32 0, i32 0
  %904 = load i32, ptr %903, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %904, i32 noundef 11, i32 noundef 42)
          to label %905 unwind label %922

905:                                              ; preds = %902
  %906 = load i32, ptr %79, align 4, !tbaa !190
  %907 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 6
  store i32 %906, ptr %907, align 8, !tbaa !220
  %908 = load i32, ptr %79, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 42, i32 noundef %908)
          to label %909 unwind label %922

909:                                              ; preds = %905
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %931

910:                                              ; preds = %877, %867
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %39, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  br label %1126

914:                                              ; preds = %878
  %915 = landingpad { ptr, i32 }
          cleanup
  %916 = extractvalue { ptr, i32 } %915, 0
  store ptr %916, ptr %39, align 8
  %917 = extractvalue { ptr, i32 } %915, 1
  store i32 %917, ptr %40, align 4
  br label %1125

918:                                              ; preds = %885, %883
  %919 = landingpad { ptr, i32 }
          cleanup
  %920 = extractvalue { ptr, i32 } %919, 0
  store ptr %920, ptr %39, align 8
  %921 = extractvalue { ptr, i32 } %919, 1
  store i32 %921, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  br label %1125

922:                                              ; preds = %905, %902, %900, %894
  %923 = landingpad { ptr, i32 }
          cleanup
  %924 = extractvalue { ptr, i32 } %923, 0
  store ptr %924, ptr %39, align 8
  %925 = extractvalue { ptr, i32 } %923, 1
  store i32 %925, ptr %40, align 4
  br label %930

926:                                              ; preds = %897
  %927 = landingpad { ptr, i32 }
          cleanup
  %928 = extractvalue { ptr, i32 } %927, 0
  store ptr %928, ptr %39, align 8
  %929 = extractvalue { ptr, i32 } %927, 1
  store i32 %929, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %930

930:                                              ; preds = %926, %922
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %1125

931:                                              ; preds = %909, %891, %886
  %932 = load i8, ptr %4, align 1, !tbaa !9, !range !174, !noundef !175
  %933 = trunc i8 %932 to i1
  br i1 %933, label %934, label %962

934:                                              ; preds = %931
  %935 = load i8, ptr %19, align 1, !tbaa !9, !range !174, !noundef !175
  %936 = trunc i8 %935 to i1
  br i1 %936, label %962, label %937

937:                                              ; preds = %934
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #7
  %938 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %939 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %938, i32 noundef 1)
          to label %940 unwind label %953

940:                                              ; preds = %937
  store i32 %939, ptr %82, align 4, !tbaa !190
  %941 = load i32, ptr %82, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #7
  store i32 1, ptr %83, align 4, !tbaa !215
  %942 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %941, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %83)
          to label %943 unwind label %957

943:                                              ; preds = %940
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #7
  %944 = load i32, ptr %82, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %84, i32 noundef %944)
          to label %945 unwind label %953

945:                                              ; preds = %943
  %946 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %84, i32 0, i32 0
  %947 = load i32, ptr %946, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %947, i32 noundef 11, i32 noundef 4424)
          to label %948 unwind label %953

948:                                              ; preds = %945
  %949 = load i32, ptr %82, align 4, !tbaa !190
  %950 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 7
  store i32 %949, ptr %950, align 4, !tbaa !221
  %951 = load i32, ptr %82, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 4424, i32 noundef %951)
          to label %952 unwind label %953

952:                                              ; preds = %948
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #7
  br label %962

953:                                              ; preds = %948, %945, %943, %937
  %954 = landingpad { ptr, i32 }
          cleanup
  %955 = extractvalue { ptr, i32 } %954, 0
  store ptr %955, ptr %39, align 8
  %956 = extractvalue { ptr, i32 } %954, 1
  store i32 %956, ptr %40, align 4
  br label %961

957:                                              ; preds = %940
  %958 = landingpad { ptr, i32 }
          cleanup
  %959 = extractvalue { ptr, i32 } %958, 0
  store ptr %959, ptr %39, align 8
  %960 = extractvalue { ptr, i32 } %958, 1
  store i32 %960, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #7
  br label %961

961:                                              ; preds = %957, %953
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #7
  br label %1125

962:                                              ; preds = %952, %934, %931
  %963 = load i8, ptr %20, align 1, !tbaa !9, !range !174, !noundef !175
  %964 = trunc i8 %963 to i1
  br i1 %964, label %990, label %965

965:                                              ; preds = %962
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #7
  %966 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %967 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %966, i32 noundef 1)
          to label %968 unwind label %981

968:                                              ; preds = %965
  store i32 %967, ptr %85, align 4, !tbaa !190
  %969 = load i32, ptr %85, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #7
  store i32 1, ptr %86, align 4, !tbaa !215
  %970 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %969, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %86)
          to label %971 unwind label %985

971:                                              ; preds = %968
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #7
  %972 = load i32, ptr %85, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %87, i32 noundef %972)
          to label %973 unwind label %981

973:                                              ; preds = %971
  %974 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %87, i32 0, i32 0
  %975 = load i32, ptr %974, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %975, i32 noundef 11, i32 noundef 43)
          to label %976 unwind label %981

976:                                              ; preds = %973
  %977 = load i32, ptr %85, align 4, !tbaa !190
  %978 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 8
  store i32 %977, ptr %978, align 8, !tbaa !222
  %979 = load i32, ptr %85, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 43, i32 noundef %979)
          to label %980 unwind label %981

980:                                              ; preds = %976
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #7
  br label %990

981:                                              ; preds = %976, %973, %971, %965
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %39, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %40, align 4
  br label %989

985:                                              ; preds = %968
  %986 = landingpad { ptr, i32 }
          cleanup
  %987 = extractvalue { ptr, i32 } %986, 0
  store ptr %987, ptr %39, align 8
  %988 = extractvalue { ptr, i32 } %986, 1
  store i32 %988, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #7
  br label %989

989:                                              ; preds = %985, %981
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #7
  br label %1125

990:                                              ; preds = %980, %962
  %991 = load i8, ptr %21, align 1, !tbaa !9, !range !174, !noundef !175
  %992 = trunc i8 %991 to i1
  br i1 %992, label %1018, label %993

993:                                              ; preds = %990
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #7
  %994 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %995 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %994, i32 noundef 1)
          to label %996 unwind label %1009

996:                                              ; preds = %993
  store i32 %995, ptr %88, align 4, !tbaa !190
  %997 = load i32, ptr %88, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #7
  store i32 1, ptr %89, align 4, !tbaa !215
  %998 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %997, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %89)
          to label %999 unwind label %1013

999:                                              ; preds = %996
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #7
  %1000 = load i32, ptr %88, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %90, i32 noundef %1000)
          to label %1001 unwind label %1009

1001:                                             ; preds = %999
  %1002 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %90, i32 0, i32 0
  %1003 = load i32, ptr %1002, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1003, i32 noundef 11, i32 noundef 4425)
          to label %1004 unwind label %1009

1004:                                             ; preds = %1001
  %1005 = load i32, ptr %88, align 4, !tbaa !190
  %1006 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 9
  store i32 %1005, ptr %1006, align 4, !tbaa !223
  %1007 = load i32, ptr %88, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 4425, i32 noundef %1007)
          to label %1008 unwind label %1009

1008:                                             ; preds = %1004
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #7
  br label %1018

1009:                                             ; preds = %1004, %1001, %999, %993
  %1010 = landingpad { ptr, i32 }
          cleanup
  %1011 = extractvalue { ptr, i32 } %1010, 0
  store ptr %1011, ptr %39, align 8
  %1012 = extractvalue { ptr, i32 } %1010, 1
  store i32 %1012, ptr %40, align 4
  br label %1017

1013:                                             ; preds = %996
  %1014 = landingpad { ptr, i32 }
          cleanup
  %1015 = extractvalue { ptr, i32 } %1014, 0
  store ptr %1015, ptr %39, align 8
  %1016 = extractvalue { ptr, i32 } %1014, 1
  store i32 %1016, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #7
  br label %1017

1017:                                             ; preds = %1013, %1009
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #7
  br label %1125

1018:                                             ; preds = %1008, %990
  %1019 = load i8, ptr %9, align 1, !tbaa !9, !range !174, !noundef !175
  %1020 = trunc i8 %1019 to i1
  br i1 %1020, label %1021, label %1093

1021:                                             ; preds = %1018
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #7
  %1022 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1023 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1022, i32 noundef 2)
          to label %1024 unwind label %1060

1024:                                             ; preds = %1021
  store i32 %1023, ptr %91, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %92) #7
  %1025 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1026 unwind label %1064

1026:                                             ; preds = %1024
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %92, ptr noundef nonnull align 8 dereferenceable(336) %1025)
          to label %1027 unwind label %1064

1027:                                             ; preds = %1026
  %1028 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 1
  store i32 32, ptr %1028, align 4, !tbaa !210
  %1029 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %92, i32 0, i32 9
  store i8 1, ptr %1029, align 4, !tbaa !211
  %1030 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %92, i32 0, i32 8
  %1031 = load i32, ptr %1030, align 8, !tbaa !212
  %1032 = add i32 %1031, 1
  store i32 %1032, ptr %1030, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #7
  %1033 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1034 unwind label %1068

1034:                                             ; preds = %1027
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %93, i32 noundef %1033)
          to label %1035 unwind label %1068

1035:                                             ; preds = %1034
  %1036 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %92, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1036, ptr align 4 %93, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #7
  %1037 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %92, i32 0, i32 11
  store i32 3, ptr %1037, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #7
  %1038 = load i32, ptr %91, align 4, !tbaa !190
  %1039 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1038, ptr noundef nonnull align 8 dereferenceable(336) %92)
          to label %1040 unwind label %1072

1040:                                             ; preds = %1035
  store ptr %1039, ptr %94, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #7
  %1041 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1042 unwind label %1076

1042:                                             ; preds = %1040
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %95, i32 noundef %1041)
          to label %1043 unwind label %1076

1043:                                             ; preds = %1042
  %1044 = load ptr, ptr %94, align 8, !tbaa !5
  %1045 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1044, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1045, ptr align 4 %95, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #7
  %1046 = load i32, ptr %91, align 4, !tbaa !190
  %1047 = add i32 %1046, 1
  store i32 %1047, ptr %96, align 4, !tbaa !190
  %1048 = load i32, ptr %96, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #7
  store i32 3, ptr %97, align 4, !tbaa !215
  %1049 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1048, ptr noundef nonnull align 4 dereferenceable(4) %91, ptr noundef nonnull align 4 dereferenceable(4) %97)
          to label %1050 unwind label %1080

1050:                                             ; preds = %1043
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #7
  %1051 = load i32, ptr %96, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %98, i32 noundef %1051)
          to label %1052 unwind label %1084

1052:                                             ; preds = %1050
  %1053 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %98, i32 0, i32 0
  %1054 = load i32, ptr %1053, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1054, i32 noundef 11, i32 noundef 9)
          to label %1055 unwind label %1084

1055:                                             ; preds = %1052
  %1056 = load i32, ptr %96, align 4, !tbaa !190
  %1057 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 11
  store i32 %1056, ptr %1057, align 4, !tbaa !217
  %1058 = load i32, ptr %96, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 3, i32 noundef 9, i32 noundef %1058)
          to label %1059 unwind label %1084

1059:                                             ; preds = %1055
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %92) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  br label %1093

1060:                                             ; preds = %1021
  %1061 = landingpad { ptr, i32 }
          cleanup
  %1062 = extractvalue { ptr, i32 } %1061, 0
  store ptr %1062, ptr %39, align 8
  %1063 = extractvalue { ptr, i32 } %1061, 1
  store i32 %1063, ptr %40, align 4
  br label %1092

1064:                                             ; preds = %1026, %1024
  %1065 = landingpad { ptr, i32 }
          cleanup
  %1066 = extractvalue { ptr, i32 } %1065, 0
  store ptr %1066, ptr %39, align 8
  %1067 = extractvalue { ptr, i32 } %1065, 1
  store i32 %1067, ptr %40, align 4
  br label %1091

1068:                                             ; preds = %1034, %1027
  %1069 = landingpad { ptr, i32 }
          cleanup
  %1070 = extractvalue { ptr, i32 } %1069, 0
  store ptr %1070, ptr %39, align 8
  %1071 = extractvalue { ptr, i32 } %1069, 1
  store i32 %1071, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #7
  br label %1090

1072:                                             ; preds = %1035
  %1073 = landingpad { ptr, i32 }
          cleanup
  %1074 = extractvalue { ptr, i32 } %1073, 0
  store ptr %1074, ptr %39, align 8
  %1075 = extractvalue { ptr, i32 } %1073, 1
  store i32 %1075, ptr %40, align 4
  br label %1089

1076:                                             ; preds = %1042, %1040
  %1077 = landingpad { ptr, i32 }
          cleanup
  %1078 = extractvalue { ptr, i32 } %1077, 0
  store ptr %1078, ptr %39, align 8
  %1079 = extractvalue { ptr, i32 } %1077, 1
  store i32 %1079, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #7
  br label %1089

1080:                                             ; preds = %1043
  %1081 = landingpad { ptr, i32 }
          cleanup
  %1082 = extractvalue { ptr, i32 } %1081, 0
  store ptr %1082, ptr %39, align 8
  %1083 = extractvalue { ptr, i32 } %1081, 1
  store i32 %1083, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #7
  br label %1088

1084:                                             ; preds = %1055, %1052, %1050
  %1085 = landingpad { ptr, i32 }
          cleanup
  %1086 = extractvalue { ptr, i32 } %1085, 0
  store ptr %1086, ptr %39, align 8
  %1087 = extractvalue { ptr, i32 } %1085, 1
  store i32 %1087, ptr %40, align 4
  br label %1088

1088:                                             ; preds = %1084, %1080
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #7
  br label %1089

1089:                                             ; preds = %1088, %1076, %1072
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  br label %1090

1090:                                             ; preds = %1089, %1068
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %92) #7
  br label %1091

1091:                                             ; preds = %1090, %1064
  call void @llvm.lifetime.end.p0(i64 336, ptr %92) #7
  br label %1092

1092:                                             ; preds = %1091, %1060
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  br label %1125

1093:                                             ; preds = %1059, %1018
  %1094 = load i8, ptr %9, align 1, !tbaa !9, !range !174, !noundef !175
  %1095 = trunc i8 %1094 to i1
  br i1 %1095, label %1096, label %1124

1096:                                             ; preds = %1093
  %1097 = load i8, ptr %26, align 1, !tbaa !9, !range !174, !noundef !175
  %1098 = trunc i8 %1097 to i1
  br i1 %1098, label %1124, label %1099

1099:                                             ; preds = %1096
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #7
  %1100 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1101 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1100, i32 noundef 1)
          to label %1102 unwind label %1115

1102:                                             ; preds = %1099
  store i32 %1101, ptr %99, align 4, !tbaa !190
  %1103 = load i32, ptr %99, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #7
  store i32 1, ptr %100, align 4, !tbaa !215
  %1104 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1103, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %100)
          to label %1105 unwind label %1119

1105:                                             ; preds = %1102
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #7
  %1106 = load i32, ptr %99, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %101, i32 noundef %1106)
          to label %1107 unwind label %1115

1107:                                             ; preds = %1105
  %1108 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %101, i32 0, i32 0
  %1109 = load i32, ptr %1108, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1109, i32 noundef 11, i32 noundef 4440)
          to label %1110 unwind label %1115

1110:                                             ; preds = %1107
  %1111 = load i32, ptr %99, align 4, !tbaa !190
  %1112 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 10
  store i32 %1111, ptr %1112, align 8, !tbaa !218
  %1113 = load i32, ptr %99, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 4440, i32 noundef %1113)
          to label %1114 unwind label %1115

1114:                                             ; preds = %1110
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #7
  br label %1124

1115:                                             ; preds = %1110, %1107, %1105, %1099
  %1116 = landingpad { ptr, i32 }
          cleanup
  %1117 = extractvalue { ptr, i32 } %1116, 0
  store ptr %1117, ptr %39, align 8
  %1118 = extractvalue { ptr, i32 } %1116, 1
  store i32 %1118, ptr %40, align 4
  br label %1123

1119:                                             ; preds = %1102
  %1120 = landingpad { ptr, i32 }
          cleanup
  %1121 = extractvalue { ptr, i32 } %1120, 0
  store ptr %1121, ptr %39, align 8
  %1122 = extractvalue { ptr, i32 } %1120, 1
  store i32 %1122, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #7
  br label %1123

1123:                                             ; preds = %1119, %1115
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #7
  br label %1125

1124:                                             ; preds = %1114, %1096, %1093
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %75) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  br label %1127

1125:                                             ; preds = %1123, %1092, %1017, %989, %961, %930, %918, %914
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  br label %1126

1126:                                             ; preds = %1125, %910
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %75) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  br label %1900

1127:                                             ; preds = %1124, %864, %855
  %1128 = load i8, ptr %5, align 1, !tbaa !9, !range !174, !noundef !175
  %1129 = trunc i8 %1128 to i1
  br i1 %1129, label %1130, label %1141

1130:                                             ; preds = %1127
  %1131 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1132 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1131, i32 0, i32 48
  %1133 = load i8, ptr %1132, align 1, !tbaa !224, !range !174, !noundef !175
  %1134 = trunc i8 %1133 to i1
  br i1 %1134, label %1150, label %1135

1135:                                             ; preds = %1130
  %1136 = load i8, ptr %22, align 1, !tbaa !9, !range !174, !noundef !175
  %1137 = trunc i8 %1136 to i1
  br i1 %1137, label %1138, label %1150

1138:                                             ; preds = %1135
  %1139 = load i8, ptr %23, align 1, !tbaa !9, !range !174, !noundef !175
  %1140 = trunc i8 %1139 to i1
  br i1 %1140, label %1141, label %1150

1141:                                             ; preds = %1138, %1127
  %1142 = load i8, ptr %6, align 1, !tbaa !9, !range !174, !noundef !175
  %1143 = trunc i8 %1142 to i1
  br i1 %1143, label %1144, label %1147

1144:                                             ; preds = %1141
  %1145 = load i8, ptr %23, align 1, !tbaa !9, !range !174, !noundef !175
  %1146 = trunc i8 %1145 to i1
  br i1 %1146, label %1147, label %1150

1147:                                             ; preds = %1144, %1141
  %1148 = load i8, ptr %11, align 1, !tbaa !9, !range !174, !noundef !175
  %1149 = trunc i8 %1148 to i1
  br i1 %1149, label %1150, label %1344

1150:                                             ; preds = %1147, %1144, %1138, %1135, %1130
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #7
  %1151 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1152 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1151, i32 noundef 1)
  store i32 %1152, ptr %102, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %103) #7
  %1153 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %103, ptr noundef nonnull align 8 dereferenceable(336) %1153)
  %1154 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %103, i32 0, i32 1
  store i32 32, ptr %1154, align 4, !tbaa !210
  %1155 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %103, i32 0, i32 9
  store i8 1, ptr %1155, align 4, !tbaa !211
  %1156 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %103, i32 0, i32 8
  %1157 = load i32, ptr %1156, align 8, !tbaa !212
  %1158 = add i32 %1157, 1
  store i32 %1158, ptr %1156, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #7
  %1159 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1160 unwind label %1198

1160:                                             ; preds = %1150
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %104, i32 noundef %1159)
          to label %1161 unwind label %1198

1161:                                             ; preds = %1160
  %1162 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %103, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1162, ptr align 4 %104, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #7
  %1163 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %103, i32 0, i32 11
  store i32 1, ptr %1163, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #7
  %1164 = load i32, ptr %102, align 4, !tbaa !190
  %1165 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1164, ptr noundef nonnull align 8 dereferenceable(336) %103)
          to label %1166 unwind label %1202

1166:                                             ; preds = %1161
  store ptr %1165, ptr %105, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #7
  %1167 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1168 unwind label %1206

1168:                                             ; preds = %1166
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %106, i32 noundef %1167)
          to label %1169 unwind label %1206

1169:                                             ; preds = %1168
  %1170 = load ptr, ptr %105, align 8, !tbaa !5
  %1171 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1170, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1171, ptr align 4 %106, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #7
  %1172 = load i8, ptr %5, align 1, !tbaa !9, !range !174, !noundef !175
  %1173 = trunc i8 %1172 to i1
  br i1 %1173, label %1174, label %1179

1174:                                             ; preds = %1169
  %1175 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1176 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1175, i32 0, i32 48
  %1177 = load i8, ptr %1176, align 1, !tbaa !224, !range !174, !noundef !175
  %1178 = trunc i8 %1177 to i1
  br i1 %1178, label %1182, label %1179

1179:                                             ; preds = %1174, %1169
  %1180 = load i8, ptr %11, align 1, !tbaa !9, !range !174, !noundef !175
  %1181 = trunc i8 %1180 to i1
  br i1 %1181, label %1182, label %1219

1182:                                             ; preds = %1179, %1174
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #7
  %1183 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1184 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1183, i32 noundef 1)
          to label %1185 unwind label %1210

1185:                                             ; preds = %1182
  store i32 %1184, ptr %107, align 4, !tbaa !190
  %1186 = load i32, ptr %107, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #7
  store i32 1, ptr %108, align 4, !tbaa !215
  %1187 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1186, ptr noundef nonnull align 4 dereferenceable(4) %102, ptr noundef nonnull align 4 dereferenceable(4) %108)
          to label %1188 unwind label %1214

1188:                                             ; preds = %1185
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #7
  %1189 = load i32, ptr %107, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %109, i32 noundef %1189)
          to label %1190 unwind label %1210

1190:                                             ; preds = %1188
  %1191 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %109, i32 0, i32 0
  %1192 = load i32, ptr %1191, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1192, i32 noundef 11, i32 noundef 28)
          to label %1193 unwind label %1210

1193:                                             ; preds = %1190
  %1194 = load i32, ptr %107, align 4, !tbaa !190
  %1195 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 12
  store i32 %1194, ptr %1195, align 8, !tbaa !225
  %1196 = load i32, ptr %107, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 28, i32 noundef %1196)
          to label %1197 unwind label %1210

1197:                                             ; preds = %1193
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #7
  br label %1251

1198:                                             ; preds = %1160, %1150
  %1199 = landingpad { ptr, i32 }
          cleanup
  %1200 = extractvalue { ptr, i32 } %1199, 0
  store ptr %1200, ptr %39, align 8
  %1201 = extractvalue { ptr, i32 } %1199, 1
  store i32 %1201, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #7
  br label %1343

1202:                                             ; preds = %1161
  %1203 = landingpad { ptr, i32 }
          cleanup
  %1204 = extractvalue { ptr, i32 } %1203, 0
  store ptr %1204, ptr %39, align 8
  %1205 = extractvalue { ptr, i32 } %1203, 1
  store i32 %1205, ptr %40, align 4
  br label %1342

1206:                                             ; preds = %1168, %1166
  %1207 = landingpad { ptr, i32 }
          cleanup
  %1208 = extractvalue { ptr, i32 } %1207, 0
  store ptr %1208, ptr %39, align 8
  %1209 = extractvalue { ptr, i32 } %1207, 1
  store i32 %1209, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #7
  br label %1342

1210:                                             ; preds = %1193, %1190, %1188, %1182
  %1211 = landingpad { ptr, i32 }
          cleanup
  %1212 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1212, ptr %39, align 8
  %1213 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1213, ptr %40, align 4
  br label %1218

1214:                                             ; preds = %1185
  %1215 = landingpad { ptr, i32 }
          cleanup
  %1216 = extractvalue { ptr, i32 } %1215, 0
  store ptr %1216, ptr %39, align 8
  %1217 = extractvalue { ptr, i32 } %1215, 1
  store i32 %1217, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #7
  br label %1218

1218:                                             ; preds = %1214, %1210
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #7
  br label %1342

1219:                                             ; preds = %1179
  %1220 = load i8, ptr %5, align 1, !tbaa !9, !range !174, !noundef !175
  %1221 = trunc i8 %1220 to i1
  br i1 %1221, label %1222, label %1250

1222:                                             ; preds = %1219
  %1223 = load i8, ptr %22, align 1, !tbaa !9, !range !174, !noundef !175
  %1224 = trunc i8 %1223 to i1
  br i1 %1224, label %1250, label %1225

1225:                                             ; preds = %1222
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #7
  %1226 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1227 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1226, i32 noundef 1)
          to label %1228 unwind label %1241

1228:                                             ; preds = %1225
  store i32 %1227, ptr %110, align 4, !tbaa !190
  %1229 = load i32, ptr %110, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #7
  store i32 1, ptr %111, align 4, !tbaa !215
  %1230 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1229, ptr noundef nonnull align 4 dereferenceable(4) %102, ptr noundef nonnull align 4 dereferenceable(4) %111)
          to label %1231 unwind label %1245

1231:                                             ; preds = %1228
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #7
  %1232 = load i32, ptr %110, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %112, i32 noundef %1232)
          to label %1233 unwind label %1241

1233:                                             ; preds = %1231
  %1234 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %112, i32 0, i32 0
  %1235 = load i32, ptr %1234, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1235, i32 noundef 11, i32 noundef 8)
          to label %1236 unwind label %1241

1236:                                             ; preds = %1233
  %1237 = load i32, ptr %110, align 4, !tbaa !190
  %1238 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 12
  store i32 %1237, ptr %1238, align 8, !tbaa !225
  %1239 = load i32, ptr %110, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 8, i32 noundef %1239)
          to label %1240 unwind label %1241

1240:                                             ; preds = %1236
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #7
  br label %1250

1241:                                             ; preds = %1236, %1233, %1231, %1225
  %1242 = landingpad { ptr, i32 }
          cleanup
  %1243 = extractvalue { ptr, i32 } %1242, 0
  store ptr %1243, ptr %39, align 8
  %1244 = extractvalue { ptr, i32 } %1242, 1
  store i32 %1244, ptr %40, align 4
  br label %1249

1245:                                             ; preds = %1228
  %1246 = landingpad { ptr, i32 }
          cleanup
  %1247 = extractvalue { ptr, i32 } %1246, 0
  store ptr %1247, ptr %39, align 8
  %1248 = extractvalue { ptr, i32 } %1246, 1
  store i32 %1248, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #7
  br label %1249

1249:                                             ; preds = %1245, %1241
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #7
  br label %1342

1250:                                             ; preds = %1240, %1222, %1219
  br label %1251

1251:                                             ; preds = %1250, %1197
  %1252 = load i8, ptr %5, align 1, !tbaa !9, !range !174, !noundef !175
  %1253 = trunc i8 %1252 to i1
  br i1 %1253, label %1257, label %1254

1254:                                             ; preds = %1251
  %1255 = load i8, ptr %6, align 1, !tbaa !9, !range !174, !noundef !175
  %1256 = trunc i8 %1255 to i1
  br i1 %1256, label %1257, label %1285

1257:                                             ; preds = %1254, %1251
  %1258 = load i8, ptr %23, align 1, !tbaa !9, !range !174, !noundef !175
  %1259 = trunc i8 %1258 to i1
  br i1 %1259, label %1285, label %1260

1260:                                             ; preds = %1257
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #7
  %1261 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1262 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1261, i32 noundef 1)
          to label %1263 unwind label %1276

1263:                                             ; preds = %1260
  store i32 %1262, ptr %113, align 4, !tbaa !190
  %1264 = load i32, ptr %113, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #7
  store i32 1, ptr %114, align 4, !tbaa !215
  %1265 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1264, ptr noundef nonnull align 4 dereferenceable(4) %102, ptr noundef nonnull align 4 dereferenceable(4) %114)
          to label %1266 unwind label %1280

1266:                                             ; preds = %1263
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #7
  %1267 = load i32, ptr %113, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %115, i32 noundef %1267)
          to label %1268 unwind label %1276

1268:                                             ; preds = %1266
  %1269 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %115, i32 0, i32 0
  %1270 = load i32, ptr %1269, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1270, i32 noundef 11, i32 noundef 7)
          to label %1271 unwind label %1276

1271:                                             ; preds = %1268
  %1272 = load i32, ptr %113, align 4, !tbaa !190
  %1273 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 13
  store i32 %1272, ptr %1273, align 4, !tbaa !226
  %1274 = load i32, ptr %113, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 7, i32 noundef %1274)
          to label %1275 unwind label %1276

1275:                                             ; preds = %1271
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #7
  br label %1285

1276:                                             ; preds = %1271, %1268, %1266, %1260
  %1277 = landingpad { ptr, i32 }
          cleanup
  %1278 = extractvalue { ptr, i32 } %1277, 0
  store ptr %1278, ptr %39, align 8
  %1279 = extractvalue { ptr, i32 } %1277, 1
  store i32 %1279, ptr %40, align 4
  br label %1284

1280:                                             ; preds = %1263
  %1281 = landingpad { ptr, i32 }
          cleanup
  %1282 = extractvalue { ptr, i32 } %1281, 0
  store ptr %1282, ptr %39, align 8
  %1283 = extractvalue { ptr, i32 } %1281, 1
  store i32 %1283, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #7
  br label %1284

1284:                                             ; preds = %1280, %1276
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #7
  br label %1342

1285:                                             ; preds = %1275, %1257, %1254
  %1286 = load i8, ptr %11, align 1, !tbaa !9, !range !174, !noundef !175
  %1287 = trunc i8 %1286 to i1
  br i1 %1287, label %1288, label %1341

1288:                                             ; preds = %1285
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #7
  %1289 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1290 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1289, i32 noundef 1)
          to label %1291 unwind label %1314

1291:                                             ; preds = %1288
  store i32 %1290, ptr %116, align 4, !tbaa !190
  %1292 = load i32, ptr %116, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %117) #7
  %1293 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1294 unwind label %1318

1294:                                             ; preds = %1291
  %1295 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef %1293, i32 noundef 3, i32 noundef 0)
          to label %1296 unwind label %1318

1296:                                             ; preds = %1294
  store i32 %1295, ptr %117, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #7
  store i32 1, ptr %118, align 4, !tbaa !215
  %1297 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1292, ptr noundef nonnull align 4 dereferenceable(4) %117, ptr noundef nonnull align 4 dereferenceable(4) %118)
          to label %1298 unwind label %1322

1298:                                             ; preds = %1296
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #7
  %1299 = load i32, ptr %116, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1299, i32 noundef 13, i32 noundef 0)
          to label %1300 unwind label %1314

1300:                                             ; preds = %1298
  %1301 = invoke noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
          to label %1302 unwind label %1314

1302:                                             ; preds = %1300
  %1303 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %1301, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %119) #7
  %1304 = load i32, ptr %116, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %119, i32 noundef %1304)
          to label %1305 unwind label %1327

1305:                                             ; preds = %1302
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1303, ptr noundef nonnull align 4 dereferenceable(4) %119) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #7
  %1306 = load i32, ptr %116, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %120, i32 noundef %1306)
          to label %1307 unwind label %1314

1307:                                             ; preds = %1305
  call void @llvm.lifetime.start.p0(i64 32, ptr %121) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %122) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %122) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %122)
          to label %1308 unwind label %1331

1308:                                             ; preds = %1307
  %1309 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %120, i32 0, i32 0
  %1310 = load i32, ptr %1309, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1310, ptr noundef nonnull align 8 dereferenceable(32) %121)
          to label %1311 unwind label %1335

1311:                                             ; preds = %1308
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %122) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #7
  %1312 = load i32, ptr %116, align 4, !tbaa !190
  %1313 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 17
  store i32 %1312, ptr %1313, align 4, !tbaa !227
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #7
  br label %1341

1314:                                             ; preds = %1305, %1300, %1298, %1288
  %1315 = landingpad { ptr, i32 }
          cleanup
  %1316 = extractvalue { ptr, i32 } %1315, 0
  store ptr %1316, ptr %39, align 8
  %1317 = extractvalue { ptr, i32 } %1315, 1
  store i32 %1317, ptr %40, align 4
  br label %1340

1318:                                             ; preds = %1294, %1291
  %1319 = landingpad { ptr, i32 }
          cleanup
  %1320 = extractvalue { ptr, i32 } %1319, 0
  store ptr %1320, ptr %39, align 8
  %1321 = extractvalue { ptr, i32 } %1319, 1
  store i32 %1321, ptr %40, align 4
  br label %1326

1322:                                             ; preds = %1296
  %1323 = landingpad { ptr, i32 }
          cleanup
  %1324 = extractvalue { ptr, i32 } %1323, 0
  store ptr %1324, ptr %39, align 8
  %1325 = extractvalue { ptr, i32 } %1323, 1
  store i32 %1325, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #7
  br label %1326

1326:                                             ; preds = %1322, %1318
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #7
  br label %1340

1327:                                             ; preds = %1302
  %1328 = landingpad { ptr, i32 }
          cleanup
  %1329 = extractvalue { ptr, i32 } %1328, 0
  store ptr %1329, ptr %39, align 8
  %1330 = extractvalue { ptr, i32 } %1328, 1
  store i32 %1330, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #7
  br label %1340

1331:                                             ; preds = %1307
  %1332 = landingpad { ptr, i32 }
          cleanup
  %1333 = extractvalue { ptr, i32 } %1332, 0
  store ptr %1333, ptr %39, align 8
  %1334 = extractvalue { ptr, i32 } %1332, 1
  store i32 %1334, ptr %40, align 4
  br label %1339

1335:                                             ; preds = %1308
  %1336 = landingpad { ptr, i32 }
          cleanup
  %1337 = extractvalue { ptr, i32 } %1336, 0
  store ptr %1337, ptr %39, align 8
  %1338 = extractvalue { ptr, i32 } %1336, 1
  store i32 %1338, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #7
  br label %1339

1339:                                             ; preds = %1335, %1331
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %122) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #7
  br label %1340

1340:                                             ; preds = %1339, %1327, %1326, %1314
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #7
  br label %1342

1341:                                             ; preds = %1311, %1285
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %103) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %103) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #7
  br label %1344

1342:                                             ; preds = %1340, %1284, %1249, %1218, %1206, %1202
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  br label %1343

1343:                                             ; preds = %1342, %1198
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %103) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %103) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #7
  br label %1900

1344:                                             ; preds = %1341, %1147
  %1345 = load i8, ptr %24, align 1, !tbaa !9, !range !174, !noundef !175
  %1346 = trunc i8 %1345 to i1
  br i1 %1346, label %1409, label %1347

1347:                                             ; preds = %1344
  %1348 = load i8, ptr %7, align 1, !tbaa !9, !range !174, !noundef !175
  %1349 = trunc i8 %1348 to i1
  br i1 %1349, label %1354, label %1350

1350:                                             ; preds = %1347
  %1351 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 80
  %1352 = load i8, ptr %1351, align 8, !tbaa !187, !range !174, !noundef !175
  %1353 = trunc i8 %1352 to i1
  br i1 %1353, label %1354, label %1409

1354:                                             ; preds = %1350, %1347
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #7
  %1355 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1356 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1355, i32 noundef 2)
  store i32 %1356, ptr %123, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #7
  %1357 = load i32, ptr %123, align 4, !tbaa !190
  store i32 %1357, ptr %124, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %125) #7
  %1358 = load i32, ptr %123, align 4, !tbaa !190
  %1359 = add i32 %1358, 1
  store i32 %1359, ptr %125, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %126) #7
  %1360 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %126, ptr noundef nonnull align 8 dereferenceable(336) %1360)
  %1361 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %126, i32 0, i32 1
  store i32 32, ptr %1361, align 4, !tbaa !210
  %1362 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %126, i32 0, i32 9
  store i8 1, ptr %1362, align 4, !tbaa !211
  %1363 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %126, i32 0, i32 8
  %1364 = load i32, ptr %1363, align 8, !tbaa !212
  %1365 = add i32 %1364, 1
  store i32 %1365, ptr %1363, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #7
  %1366 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1367 unwind label %1391

1367:                                             ; preds = %1354
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %127, i32 noundef %1366)
          to label %1368 unwind label %1391

1368:                                             ; preds = %1367
  %1369 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %126, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1369, ptr align 4 %127, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #7
  %1370 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %126, i32 0, i32 11
  store i32 1, ptr %1370, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #7
  %1371 = load i32, ptr %124, align 4, !tbaa !190
  %1372 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1371, ptr noundef nonnull align 8 dereferenceable(336) %126)
          to label %1373 unwind label %1395

1373:                                             ; preds = %1368
  store ptr %1372, ptr %128, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #7
  %1374 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1375 unwind label %1399

1375:                                             ; preds = %1373
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %129, i32 noundef %1374)
          to label %1376 unwind label %1399

1376:                                             ; preds = %1375
  %1377 = load ptr, ptr %128, align 8, !tbaa !5
  %1378 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1377, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1378, ptr align 4 %129, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #7
  %1379 = load i32, ptr %125, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #7
  store i32 1, ptr %130, align 4, !tbaa !215
  %1380 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1379, ptr noundef nonnull align 4 dereferenceable(4) %124, ptr noundef nonnull align 4 dereferenceable(4) %130)
          to label %1381 unwind label %1403

1381:                                             ; preds = %1376
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #7
  %1382 = load i32, ptr %125, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %131, i32 noundef %1382)
          to label %1383 unwind label %1395

1383:                                             ; preds = %1381
  %1384 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %131, i32 0, i32 0
  %1385 = load i32, ptr %1384, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1385, i32 noundef 11, i32 noundef 41)
          to label %1386 unwind label %1395

1386:                                             ; preds = %1383
  %1387 = load i32, ptr %125, align 4, !tbaa !190
  %1388 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 14
  store i32 %1387, ptr %1388, align 8, !tbaa !228
  %1389 = load i32, ptr %125, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 41, i32 noundef %1389)
          to label %1390 unwind label %1395

1390:                                             ; preds = %1386
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %126) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %126) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #7
  br label %1409

1391:                                             ; preds = %1367, %1354
  %1392 = landingpad { ptr, i32 }
          cleanup
  %1393 = extractvalue { ptr, i32 } %1392, 0
  store ptr %1393, ptr %39, align 8
  %1394 = extractvalue { ptr, i32 } %1392, 1
  store i32 %1394, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #7
  br label %1408

1395:                                             ; preds = %1386, %1383, %1381, %1368
  %1396 = landingpad { ptr, i32 }
          cleanup
  %1397 = extractvalue { ptr, i32 } %1396, 0
  store ptr %1397, ptr %39, align 8
  %1398 = extractvalue { ptr, i32 } %1396, 1
  store i32 %1398, ptr %40, align 4
  br label %1407

1399:                                             ; preds = %1375, %1373
  %1400 = landingpad { ptr, i32 }
          cleanup
  %1401 = extractvalue { ptr, i32 } %1400, 0
  store ptr %1401, ptr %39, align 8
  %1402 = extractvalue { ptr, i32 } %1400, 1
  store i32 %1402, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #7
  br label %1407

1403:                                             ; preds = %1376
  %1404 = landingpad { ptr, i32 }
          cleanup
  %1405 = extractvalue { ptr, i32 } %1404, 0
  store ptr %1405, ptr %39, align 8
  %1406 = extractvalue { ptr, i32 } %1404, 1
  store i32 %1406, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #7
  br label %1407

1407:                                             ; preds = %1403, %1399, %1395
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #7
  br label %1408

1408:                                             ; preds = %1407, %1391
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %126) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %126) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #7
  br label %1900

1409:                                             ; preds = %1390, %1350, %1344
  %1410 = load i8, ptr %25, align 1, !tbaa !9, !range !174, !noundef !175
  %1411 = trunc i8 %1410 to i1
  br i1 %1411, label %1474, label %1412

1412:                                             ; preds = %1409
  %1413 = load i8, ptr %8, align 1, !tbaa !9, !range !174, !noundef !175
  %1414 = trunc i8 %1413 to i1
  br i1 %1414, label %1419, label %1415

1415:                                             ; preds = %1412
  %1416 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 81
  %1417 = load i8, ptr %1416, align 1, !tbaa !188, !range !174, !noundef !175
  %1418 = trunc i8 %1417 to i1
  br i1 %1418, label %1419, label %1474

1419:                                             ; preds = %1415, %1412
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #7
  %1420 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1421 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1420, i32 noundef 2)
  store i32 %1421, ptr %132, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #7
  %1422 = load i32, ptr %132, align 4, !tbaa !190
  store i32 %1422, ptr %133, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %134) #7
  %1423 = load i32, ptr %132, align 4, !tbaa !190
  %1424 = add i32 %1423, 1
  store i32 %1424, ptr %134, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %135) #7
  %1425 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %135, ptr noundef nonnull align 8 dereferenceable(336) %1425)
  %1426 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %135, i32 0, i32 1
  store i32 32, ptr %1426, align 4, !tbaa !210
  %1427 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %135, i32 0, i32 9
  store i8 1, ptr %1427, align 4, !tbaa !211
  %1428 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %135, i32 0, i32 8
  %1429 = load i32, ptr %1428, align 8, !tbaa !212
  %1430 = add i32 %1429, 1
  store i32 %1430, ptr %1428, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #7
  %1431 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1432 unwind label %1456

1432:                                             ; preds = %1419
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %136, i32 noundef %1431)
          to label %1433 unwind label %1456

1433:                                             ; preds = %1432
  %1434 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %135, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1434, ptr align 4 %136, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #7
  %1435 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %135, i32 0, i32 11
  store i32 1, ptr %1435, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #7
  %1436 = load i32, ptr %133, align 4, !tbaa !190
  %1437 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1436, ptr noundef nonnull align 8 dereferenceable(336) %135)
          to label %1438 unwind label %1460

1438:                                             ; preds = %1433
  store ptr %1437, ptr %137, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %138) #7
  %1439 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1440 unwind label %1464

1440:                                             ; preds = %1438
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %138, i32 noundef %1439)
          to label %1441 unwind label %1464

1441:                                             ; preds = %1440
  %1442 = load ptr, ptr %137, align 8, !tbaa !5
  %1443 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1442, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1443, ptr align 4 %138, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #7
  %1444 = load i32, ptr %134, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %139) #7
  store i32 1, ptr %139, align 4, !tbaa !215
  %1445 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1444, ptr noundef nonnull align 4 dereferenceable(4) %133, ptr noundef nonnull align 4 dereferenceable(4) %139)
          to label %1446 unwind label %1468

1446:                                             ; preds = %1441
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #7
  %1447 = load i32, ptr %134, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %140, i32 noundef %1447)
          to label %1448 unwind label %1460

1448:                                             ; preds = %1446
  %1449 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %140, i32 0, i32 0
  %1450 = load i32, ptr %1449, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1450, i32 noundef 11, i32 noundef 36)
          to label %1451 unwind label %1460

1451:                                             ; preds = %1448
  %1452 = load i32, ptr %134, align 4, !tbaa !190
  %1453 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 15
  store i32 %1452, ptr %1453, align 4, !tbaa !229
  %1454 = load i32, ptr %134, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 36, i32 noundef %1454)
          to label %1455 unwind label %1460

1455:                                             ; preds = %1451
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %135) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %135) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #7
  br label %1474

1456:                                             ; preds = %1432, %1419
  %1457 = landingpad { ptr, i32 }
          cleanup
  %1458 = extractvalue { ptr, i32 } %1457, 0
  store ptr %1458, ptr %39, align 8
  %1459 = extractvalue { ptr, i32 } %1457, 1
  store i32 %1459, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #7
  br label %1473

1460:                                             ; preds = %1451, %1448, %1446, %1433
  %1461 = landingpad { ptr, i32 }
          cleanup
  %1462 = extractvalue { ptr, i32 } %1461, 0
  store ptr %1462, ptr %39, align 8
  %1463 = extractvalue { ptr, i32 } %1461, 1
  store i32 %1463, ptr %40, align 4
  br label %1472

1464:                                             ; preds = %1440, %1438
  %1465 = landingpad { ptr, i32 }
          cleanup
  %1466 = extractvalue { ptr, i32 } %1465, 0
  store ptr %1466, ptr %39, align 8
  %1467 = extractvalue { ptr, i32 } %1465, 1
  store i32 %1467, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #7
  br label %1472

1468:                                             ; preds = %1441
  %1469 = landingpad { ptr, i32 }
          cleanup
  %1470 = extractvalue { ptr, i32 } %1469, 0
  store ptr %1470, ptr %39, align 8
  %1471 = extractvalue { ptr, i32 } %1469, 1
  store i32 %1471, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #7
  br label %1472

1472:                                             ; preds = %1468, %1464, %1460
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  br label %1473

1473:                                             ; preds = %1472, %1456
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %135) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %135) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #7
  br label %1900

1474:                                             ; preds = %1455, %1415, %1409
  %1475 = load i8, ptr %10, align 1, !tbaa !9, !range !174, !noundef !175
  %1476 = trunc i8 %1475 to i1
  br i1 %1476, label %1480, label %1477

1477:                                             ; preds = %1474
  %1478 = load i8, ptr %12, align 1, !tbaa !9, !range !174, !noundef !175
  %1479 = trunc i8 %1478 to i1
  br i1 %1479, label %1480, label %1559

1480:                                             ; preds = %1477, %1474
  %1481 = load i32, ptr %32, align 4, !tbaa !190
  %1482 = icmp eq i32 %1481, 0
  br i1 %1482, label %1483, label %1486

1483:                                             ; preds = %1480
  %1484 = call noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  %1485 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef %1484, i32 noundef 3, i32 noundef 0)
  store i32 %1485, ptr %32, align 4, !tbaa !190
  br label %1486

1486:                                             ; preds = %1483, %1480
  call void @llvm.lifetime.start.p0(i64 4, ptr %141) #7
  %1487 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1488 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1487, i32 noundef 1, i32 noundef 2, i32 noundef 0)
  br i1 %1488, label %1489, label %1499

1489:                                             ; preds = %1486
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #7
  %1490 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1491 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1490, i32 noundef 1)
  store i32 %1491, ptr %142, align 4, !tbaa !190
  %1492 = load i32, ptr %142, align 4, !tbaa !190
  store i32 %1492, ptr %141, align 4, !tbaa !190
  %1493 = load i32, ptr %141, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #7
  store i32 1, ptr %143, align 4, !tbaa !215
  %1494 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1493, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 4 dereferenceable(4) %143)
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #7
  %1495 = load i32, ptr %141, align 4, !tbaa !190
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1495, i32 noundef 11, i32 noundef 0)
  %1496 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %1497 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %1496, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #7
  %1498 = load i32, ptr %141, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %144, i32 noundef %1498)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1497, ptr noundef nonnull align 4 dereferenceable(4) %144) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #7
  br label %1541

1499:                                             ; preds = %1486
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #7
  %1500 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1501 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1500, i32 noundef 2)
  store i32 %1501, ptr %145, align 4, !tbaa !190
  %1502 = load i32, ptr %145, align 4, !tbaa !190
  store i32 %1502, ptr %141, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %146) #7
  %1503 = load i32, ptr %145, align 4, !tbaa !190
  %1504 = add i32 %1503, 1
  store i32 %1504, ptr %146, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %147) #7
  %1505 = load i32, ptr %32, align 4, !tbaa !190
  %1506 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1505)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %147, ptr noundef nonnull align 8 dereferenceable(336) %1506)
  %1507 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %147, i32 0, i32 11
  store i32 2, ptr %1507, align 8, !tbaa !214
  %1508 = load i32, ptr %146, align 4, !tbaa !190
  %1509 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1508, ptr noundef nonnull align 8 dereferenceable(336) %147)
          to label %1510 unwind label %1532

1510:                                             ; preds = %1499
  %1511 = load i32, ptr %141, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %148) #7
  store i32 2, ptr %148, align 4, !tbaa !215
  %1512 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1511, ptr noundef nonnull align 4 dereferenceable(4) %146, ptr noundef nonnull align 4 dereferenceable(4) %148)
          to label %1513 unwind label %1536

1513:                                             ; preds = %1510
  call void @llvm.lifetime.end.p0(i64 4, ptr %148) #7
  %1514 = load i32, ptr %141, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %149, i32 noundef %1514)
          to label %1515 unwind label %1532

1515:                                             ; preds = %1513
  %1516 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %149, i32 0, i32 0
  %1517 = load i32, ptr %1516, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1517, i32 noundef 34, i32 noundef -6)
          to label %1518 unwind label %1532

1518:                                             ; preds = %1515
  %1519 = load i32, ptr %141, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %150, i32 noundef %1519)
          to label %1520 unwind label %1532

1520:                                             ; preds = %1518
  %1521 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1522 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1521, i32 0, i32 6
  %1523 = load i32, ptr %1522, align 4, !tbaa !230
  %1524 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %150, i32 0, i32 0
  %1525 = load i32, ptr %1524, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1525, i32 noundef 33, i32 noundef %1523)
          to label %1526 unwind label %1532

1526:                                             ; preds = %1520
  %1527 = load i32, ptr %141, align 4, !tbaa !190
  %1528 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1529 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1528, i32 0, i32 6
  %1530 = load i32, ptr %1529, align 4, !tbaa !230
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1527, i32 noundef 6, i32 noundef %1530)
          to label %1531 unwind label %1532

1531:                                             ; preds = %1526
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %147) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %147) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #7
  br label %1541

1532:                                             ; preds = %1526, %1520, %1518, %1515, %1513, %1499
  %1533 = landingpad { ptr, i32 }
          cleanup
  %1534 = extractvalue { ptr, i32 } %1533, 0
  store ptr %1534, ptr %39, align 8
  %1535 = extractvalue { ptr, i32 } %1533, 1
  store i32 %1535, ptr %40, align 4
  br label %1540

1536:                                             ; preds = %1510
  %1537 = landingpad { ptr, i32 }
          cleanup
  %1538 = extractvalue { ptr, i32 } %1537, 0
  store ptr %1538, ptr %39, align 8
  %1539 = extractvalue { ptr, i32 } %1537, 1
  store i32 %1539, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %148) #7
  br label %1540

1540:                                             ; preds = %1536, %1532
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %147) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %147) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #7
  br label %1558

1541:                                             ; preds = %1531, %1489
  %1542 = load i32, ptr %141, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %151, i32 noundef %1542)
  call void @llvm.lifetime.start.p0(i64 32, ptr %152) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %153) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %153)
          to label %1543 unwind label %1549

1543:                                             ; preds = %1541
  %1544 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %151, i32 0, i32 0
  %1545 = load i32, ptr %1544, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1545, ptr noundef nonnull align 8 dereferenceable(32) %152)
          to label %1546 unwind label %1553

1546:                                             ; preds = %1543
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %153) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #7
  %1547 = load i32, ptr %141, align 4, !tbaa !190
  %1548 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 16
  store i32 %1547, ptr %1548, align 8, !tbaa !231
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #7
  br label %1559

1549:                                             ; preds = %1541
  %1550 = landingpad { ptr, i32 }
          cleanup
  %1551 = extractvalue { ptr, i32 } %1550, 0
  store ptr %1551, ptr %39, align 8
  %1552 = extractvalue { ptr, i32 } %1550, 1
  store i32 %1552, ptr %40, align 4
  br label %1557

1553:                                             ; preds = %1543
  %1554 = landingpad { ptr, i32 }
          cleanup
  %1555 = extractvalue { ptr, i32 } %1554, 0
  store ptr %1555, ptr %39, align 8
  %1556 = extractvalue { ptr, i32 } %1554, 1
  store i32 %1556, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #7
  br label %1557

1557:                                             ; preds = %1553, %1549
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %153) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #7
  br label %1558

1558:                                             ; preds = %1557, %1540
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #7
  br label %1900

1559:                                             ; preds = %1546, %1477
  %1560 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL32has_additional_fixed_sample_maskEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %1560, label %1561, label %1619

1561:                                             ; preds = %1559
  %1562 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 34
  %1563 = load i8, ptr %1562, align 8, !tbaa !232, !range !174, !noundef !175
  %1564 = trunc i8 %1563 to i1
  br i1 %1564, label %1619, label %1565

1565:                                             ; preds = %1561
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #7
  %1566 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1567 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1566, i32 noundef 2)
  store i32 %1567, ptr %154, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #7
  %1568 = load i32, ptr %154, align 4, !tbaa !190
  %1569 = add i32 %1568, 1
  store i32 %1569, ptr %155, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %156) #7
  %1570 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %156, ptr noundef nonnull align 8 dereferenceable(336) %1570)
  %1571 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %156, i32 0, i32 1
  store i32 32, ptr %1571, align 4, !tbaa !210
  %1572 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %156, i32 0, i32 9
  store i8 1, ptr %1572, align 4, !tbaa !211
  %1573 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %156, i32 0, i32 8
  %1574 = load i32, ptr %1573, align 8, !tbaa !212
  %1575 = add i32 %1574, 1
  store i32 %1575, ptr %1573, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #7
  %1576 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1577 unwind label %1601

1577:                                             ; preds = %1565
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %157, i32 noundef %1576)
          to label %1578 unwind label %1601

1578:                                             ; preds = %1577
  %1579 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %156, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1579, ptr align 4 %157, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #7
  %1580 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %156, i32 0, i32 11
  store i32 3, ptr %1580, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #7
  %1581 = load i32, ptr %154, align 4, !tbaa !190
  %1582 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1581, ptr noundef nonnull align 8 dereferenceable(336) %156)
          to label %1583 unwind label %1605

1583:                                             ; preds = %1578
  store ptr %1582, ptr %158, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %159) #7
  %1584 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1585 unwind label %1609

1585:                                             ; preds = %1583
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %159, i32 noundef %1584)
          to label %1586 unwind label %1609

1586:                                             ; preds = %1585
  %1587 = load ptr, ptr %158, align 8, !tbaa !5
  %1588 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1587, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1588, ptr align 4 %159, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #7
  %1589 = load i32, ptr %155, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %160) #7
  store i32 3, ptr %160, align 4, !tbaa !215
  %1590 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1589, ptr noundef nonnull align 4 dereferenceable(4) %154, ptr noundef nonnull align 4 dereferenceable(4) %160)
          to label %1591 unwind label %1613

1591:                                             ; preds = %1586
  call void @llvm.lifetime.end.p0(i64 4, ptr %160) #7
  %1592 = load i32, ptr %155, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %161, i32 noundef %1592)
          to label %1593 unwind label %1605

1593:                                             ; preds = %1591
  %1594 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %161, i32 0, i32 0
  %1595 = load i32, ptr %1594, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1595, i32 noundef 11, i32 noundef 20)
          to label %1596 unwind label %1605

1596:                                             ; preds = %1593
  %1597 = load i32, ptr %155, align 4, !tbaa !190
  %1598 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 4
  store i32 %1597, ptr %1598, align 8, !tbaa !233
  %1599 = load i32, ptr %155, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 3, i32 noundef 20, i32 noundef %1599)
          to label %1600 unwind label %1605

1600:                                             ; preds = %1596
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %156) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %156) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #7
  br label %1619

1601:                                             ; preds = %1577, %1565
  %1602 = landingpad { ptr, i32 }
          cleanup
  %1603 = extractvalue { ptr, i32 } %1602, 0
  store ptr %1603, ptr %39, align 8
  %1604 = extractvalue { ptr, i32 } %1602, 1
  store i32 %1604, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #7
  br label %1618

1605:                                             ; preds = %1596, %1593, %1591, %1578
  %1606 = landingpad { ptr, i32 }
          cleanup
  %1607 = extractvalue { ptr, i32 } %1606, 0
  store ptr %1607, ptr %39, align 8
  %1608 = extractvalue { ptr, i32 } %1606, 1
  store i32 %1608, ptr %40, align 4
  br label %1617

1609:                                             ; preds = %1585, %1583
  %1610 = landingpad { ptr, i32 }
          cleanup
  %1611 = extractvalue { ptr, i32 } %1610, 0
  store ptr %1611, ptr %39, align 8
  %1612 = extractvalue { ptr, i32 } %1610, 1
  store i32 %1612, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #7
  br label %1617

1613:                                             ; preds = %1586
  %1614 = landingpad { ptr, i32 }
          cleanup
  %1615 = extractvalue { ptr, i32 } %1614, 0
  store ptr %1615, ptr %39, align 8
  %1616 = extractvalue { ptr, i32 } %1614, 1
  store i32 %1616, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %160) #7
  br label %1617

1617:                                             ; preds = %1613, %1609, %1605
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #7
  br label %1618

1618:                                             ; preds = %1617, %1601
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %156) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %156) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #7
  br label %1900

1619:                                             ; preds = %1600, %1561, %1559
  %1620 = load i8, ptr %28, align 1, !tbaa !9, !range !174, !noundef !175
  %1621 = trunc i8 %1620 to i1
  br i1 %1621, label %1697, label %1622

1622:                                             ; preds = %1619
  %1623 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 83
  %1624 = load i8, ptr %1623, align 1, !tbaa !189, !range !174, !noundef !175
  %1625 = trunc i8 %1624 to i1
  br i1 %1625, label %1626, label %1697

1626:                                             ; preds = %1622
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #7
  %1627 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1628 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1627, i32 noundef 3)
  store i32 %1628, ptr %162, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #7
  %1629 = load i32, ptr %162, align 4, !tbaa !190
  store i32 %1629, ptr %163, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #7
  %1630 = load i32, ptr %162, align 4, !tbaa !190
  %1631 = add i32 %1630, 1
  store i32 %1631, ptr %164, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %165) #7
  %1632 = load i32, ptr %162, align 4, !tbaa !190
  %1633 = add i32 %1632, 2
  store i32 %1633, ptr %165, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %166) #7
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %166, i32 noundef 20)
  %1634 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %166, i32 0, i32 2
  store i32 2, ptr %1634, align 8, !tbaa !195
  %1635 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %166, i32 0, i32 3
  store i32 8, ptr %1635, align 4, !tbaa !208
  %1636 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %166, i32 0, i32 4
  store i32 1, ptr %1636, align 8, !tbaa !209
  %1637 = load i32, ptr %163, align 4, !tbaa !190
  %1638 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1637, ptr noundef nonnull align 8 dereferenceable(336) %166)
          to label %1639 unwind label %1669

1639:                                             ; preds = %1626
  call void @llvm.lifetime.start.p0(i64 336, ptr %167) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %167, ptr noundef nonnull align 8 dereferenceable(336) %166)
          to label %1640 unwind label %1673

1640:                                             ; preds = %1639
  %1641 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %167, i32 0, i32 1
  store i32 32, ptr %1641, align 4, !tbaa !210
  %1642 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %167, i32 0, i32 9
  store i8 1, ptr %1642, align 4, !tbaa !211
  %1643 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %167, i32 0, i32 8
  %1644 = load i32, ptr %1643, align 8, !tbaa !212
  %1645 = add i32 %1644, 1
  store i32 %1645, ptr %1643, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #7
  %1646 = load i32, ptr %163, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %168, i32 noundef %1646)
          to label %1647 unwind label %1677

1647:                                             ; preds = %1640
  %1648 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %167, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1648, ptr align 4 %168, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #7
  %1649 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %167, i32 0, i32 11
  store i32 1, ptr %1649, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #7
  %1650 = load i32, ptr %164, align 4, !tbaa !190
  %1651 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1650, ptr noundef nonnull align 8 dereferenceable(336) %167)
          to label %1652 unwind label %1681

1652:                                             ; preds = %1647
  store ptr %1651, ptr %169, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #7
  %1653 = load i32, ptr %163, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %170, i32 noundef %1653)
          to label %1654 unwind label %1685

1654:                                             ; preds = %1652
  %1655 = load ptr, ptr %169, align 8, !tbaa !5
  %1656 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1655, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1656, ptr align 4 %170, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #7
  %1657 = load i32, ptr %165, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #7
  store i32 1, ptr %171, align 4, !tbaa !215
  %1658 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1657, ptr noundef nonnull align 4 dereferenceable(4) %164, ptr noundef nonnull align 4 dereferenceable(4) %171)
          to label %1659 unwind label %1689

1659:                                             ; preds = %1654
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #7
  %1660 = load i32, ptr %165, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %172, i32 noundef %1660)
          to label %1661 unwind label %1681

1661:                                             ; preds = %1659
  %1662 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %172, i32 0, i32 0
  %1663 = load i32, ptr %1662, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1663, i32 noundef 11, i32 noundef 23)
          to label %1664 unwind label %1681

1664:                                             ; preds = %1661
  %1665 = load i32, ptr %165, align 4, !tbaa !190
  %1666 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 5
  store i32 %1665, ptr %1666, align 4, !tbaa !234
  %1667 = load i32, ptr %165, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 23, i32 noundef %1667)
          to label %1668 unwind label %1681

1668:                                             ; preds = %1664
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %167) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %167) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %166) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %166) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #7
  br label %1697

1669:                                             ; preds = %1626
  %1670 = landingpad { ptr, i32 }
          cleanup
  %1671 = extractvalue { ptr, i32 } %1670, 0
  store ptr %1671, ptr %39, align 8
  %1672 = extractvalue { ptr, i32 } %1670, 1
  store i32 %1672, ptr %40, align 4
  br label %1696

1673:                                             ; preds = %1639
  %1674 = landingpad { ptr, i32 }
          cleanup
  %1675 = extractvalue { ptr, i32 } %1674, 0
  store ptr %1675, ptr %39, align 8
  %1676 = extractvalue { ptr, i32 } %1674, 1
  store i32 %1676, ptr %40, align 4
  br label %1695

1677:                                             ; preds = %1640
  %1678 = landingpad { ptr, i32 }
          cleanup
  %1679 = extractvalue { ptr, i32 } %1678, 0
  store ptr %1679, ptr %39, align 8
  %1680 = extractvalue { ptr, i32 } %1678, 1
  store i32 %1680, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #7
  br label %1694

1681:                                             ; preds = %1664, %1661, %1659, %1647
  %1682 = landingpad { ptr, i32 }
          cleanup
  %1683 = extractvalue { ptr, i32 } %1682, 0
  store ptr %1683, ptr %39, align 8
  %1684 = extractvalue { ptr, i32 } %1682, 1
  store i32 %1684, ptr %40, align 4
  br label %1693

1685:                                             ; preds = %1652
  %1686 = landingpad { ptr, i32 }
          cleanup
  %1687 = extractvalue { ptr, i32 } %1686, 0
  store ptr %1687, ptr %39, align 8
  %1688 = extractvalue { ptr, i32 } %1686, 1
  store i32 %1688, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #7
  br label %1693

1689:                                             ; preds = %1654
  %1690 = landingpad { ptr, i32 }
          cleanup
  %1691 = extractvalue { ptr, i32 } %1690, 0
  store ptr %1691, ptr %39, align 8
  %1692 = extractvalue { ptr, i32 } %1690, 1
  store i32 %1692, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #7
  br label %1693

1693:                                             ; preds = %1689, %1685, %1681
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #7
  br label %1694

1694:                                             ; preds = %1693, %1677
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %167) #7
  br label %1695

1695:                                             ; preds = %1694, %1673
  call void @llvm.lifetime.end.p0(i64 336, ptr %167) #7
  br label %1696

1696:                                             ; preds = %1695, %1669
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %166) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %166) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #7
  br label %1900

1697:                                             ; preds = %1668, %1622, %1619
  %1698 = load i8, ptr %13, align 1, !tbaa !9, !range !174, !noundef !175
  %1699 = trunc i8 %1698 to i1
  br i1 %1699, label %1700, label %1758

1700:                                             ; preds = %1697
  %1701 = load i8, ptr %29, align 1, !tbaa !9, !range !174, !noundef !175
  %1702 = trunc i8 %1701 to i1
  br i1 %1702, label %1758, label %1703

1703:                                             ; preds = %1700
  call void @llvm.lifetime.start.p0(i64 4, ptr %173) #7
  %1704 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1705 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1704, i32 noundef 2)
  store i32 %1705, ptr %173, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %174) #7
  %1706 = load i32, ptr %173, align 4, !tbaa !190
  store i32 %1706, ptr %174, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %175) #7
  %1707 = load i32, ptr %173, align 4, !tbaa !190
  %1708 = add i32 %1707, 1
  store i32 %1708, ptr %175, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %176) #7
  %1709 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %176, ptr noundef nonnull align 8 dereferenceable(336) %1709)
  %1710 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %176, i32 0, i32 1
  store i32 32, ptr %1710, align 4, !tbaa !210
  %1711 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %176, i32 0, i32 9
  store i8 1, ptr %1711, align 4, !tbaa !211
  %1712 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %176, i32 0, i32 8
  %1713 = load i32, ptr %1712, align 8, !tbaa !212
  %1714 = add i32 %1713, 1
  store i32 %1714, ptr %1712, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %177) #7
  %1715 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1716 unwind label %1740

1716:                                             ; preds = %1703
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %177, i32 noundef %1715)
          to label %1717 unwind label %1740

1717:                                             ; preds = %1716
  %1718 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %176, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1718, ptr align 4 %177, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %177) #7
  %1719 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %176, i32 0, i32 11
  store i32 1, ptr %1719, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %178) #7
  %1720 = load i32, ptr %174, align 4, !tbaa !190
  %1721 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1720, ptr noundef nonnull align 8 dereferenceable(336) %176)
          to label %1722 unwind label %1744

1722:                                             ; preds = %1717
  store ptr %1721, ptr %178, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %179) #7
  %1723 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
          to label %1724 unwind label %1748

1724:                                             ; preds = %1722
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %179, i32 noundef %1723)
          to label %1725 unwind label %1748

1725:                                             ; preds = %1724
  %1726 = load ptr, ptr %178, align 8, !tbaa !5
  %1727 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1726, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1727, ptr align 4 %179, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #7
  %1728 = load i32, ptr %175, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %180) #7
  store i32 1, ptr %180, align 4, !tbaa !215
  %1729 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1728, ptr noundef nonnull align 4 dereferenceable(4) %174, ptr noundef nonnull align 4 dereferenceable(4) %180)
          to label %1730 unwind label %1752

1730:                                             ; preds = %1725
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #7
  %1731 = load i32, ptr %175, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %181, i32 noundef %1731)
          to label %1732 unwind label %1744

1732:                                             ; preds = %1730
  %1733 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %181, i32 0, i32 0
  %1734 = load i32, ptr %1733, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1734, i32 noundef 11, i32 noundef 29)
          to label %1735 unwind label %1744

1735:                                             ; preds = %1732
  %1736 = load i32, ptr %175, align 4, !tbaa !190
  %1737 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 18
  store i32 %1736, ptr %1737, align 8, !tbaa !235
  %1738 = load i32, ptr %175, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 29, i32 noundef %1738)
          to label %1739 unwind label %1744

1739:                                             ; preds = %1735
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %176) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %176) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %174) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #7
  br label %1758

1740:                                             ; preds = %1716, %1703
  %1741 = landingpad { ptr, i32 }
          cleanup
  %1742 = extractvalue { ptr, i32 } %1741, 0
  store ptr %1742, ptr %39, align 8
  %1743 = extractvalue { ptr, i32 } %1741, 1
  store i32 %1743, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %177) #7
  br label %1757

1744:                                             ; preds = %1735, %1732, %1730, %1717
  %1745 = landingpad { ptr, i32 }
          cleanup
  %1746 = extractvalue { ptr, i32 } %1745, 0
  store ptr %1746, ptr %39, align 8
  %1747 = extractvalue { ptr, i32 } %1745, 1
  store i32 %1747, ptr %40, align 4
  br label %1756

1748:                                             ; preds = %1724, %1722
  %1749 = landingpad { ptr, i32 }
          cleanup
  %1750 = extractvalue { ptr, i32 } %1749, 0
  store ptr %1750, ptr %39, align 8
  %1751 = extractvalue { ptr, i32 } %1749, 1
  store i32 %1751, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #7
  br label %1756

1752:                                             ; preds = %1725
  %1753 = landingpad { ptr, i32 }
          cleanup
  %1754 = extractvalue { ptr, i32 } %1753, 0
  store ptr %1754, ptr %39, align 8
  %1755 = extractvalue { ptr, i32 } %1753, 1
  store i32 %1755, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #7
  br label %1756

1756:                                             ; preds = %1752, %1748, %1744
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #7
  br label %1757

1757:                                             ; preds = %1756, %1740
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %176) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %176) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %174) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #7
  br label %1900

1758:                                             ; preds = %1739, %1700, %1697
  %1759 = load i8, ptr %14, align 1, !tbaa !9, !range !174, !noundef !175
  %1760 = trunc i8 %1759 to i1
  br i1 %1760, label %1761, label %1820

1761:                                             ; preds = %1758
  %1762 = load i8, ptr %30, align 1, !tbaa !9, !range !174, !noundef !175
  %1763 = trunc i8 %1762 to i1
  br i1 %1763, label %1820, label %1764

1764:                                             ; preds = %1761
  call void @llvm.lifetime.start.p0(i64 4, ptr %182) #7
  %1765 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1766 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1765, i32 noundef 2)
  store i32 %1766, ptr %182, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %183) #7
  %1767 = load i32, ptr %182, align 4, !tbaa !190
  store i32 %1767, ptr %183, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %184) #7
  %1768 = load i32, ptr %182, align 4, !tbaa !190
  %1769 = add i32 %1768, 1
  store i32 %1769, ptr %184, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %185) #7
  %1770 = call noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  %1771 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef %1770, i32 noundef 3, i32 noundef 0)
  store i32 %1771, ptr %185, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %186) #7
  %1772 = load i32, ptr %185, align 4, !tbaa !190
  %1773 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1772)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %186, ptr noundef nonnull align 8 dereferenceable(336) %1773)
  %1774 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %186, i32 0, i32 1
  store i32 32, ptr %1774, align 4, !tbaa !210
  %1775 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %186, i32 0, i32 9
  store i8 1, ptr %1775, align 4, !tbaa !211
  %1776 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %186, i32 0, i32 8
  %1777 = load i32, ptr %1776, align 8, !tbaa !212
  %1778 = add i32 %1777, 1
  store i32 %1778, ptr %1776, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %187) #7
  %1779 = load i32, ptr %185, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %187, i32 noundef %1779)
          to label %1780 unwind label %1802

1780:                                             ; preds = %1764
  %1781 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %186, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1781, ptr align 4 %187, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #7
  %1782 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %186, i32 0, i32 11
  store i32 1, ptr %1782, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %188) #7
  %1783 = load i32, ptr %183, align 4, !tbaa !190
  %1784 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1783, ptr noundef nonnull align 8 dereferenceable(336) %186)
          to label %1785 unwind label %1806

1785:                                             ; preds = %1780
  store ptr %1784, ptr %188, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %189) #7
  %1786 = load i32, ptr %185, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %189, i32 noundef %1786)
          to label %1787 unwind label %1810

1787:                                             ; preds = %1785
  %1788 = load ptr, ptr %188, align 8, !tbaa !5
  %1789 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1788, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1789, ptr align 4 %189, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #7
  %1790 = load i32, ptr %184, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %190) #7
  store i32 1, ptr %190, align 4, !tbaa !215
  %1791 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1790, ptr noundef nonnull align 4 dereferenceable(4) %183, ptr noundef nonnull align 4 dereferenceable(4) %190)
          to label %1792 unwind label %1814

1792:                                             ; preds = %1787
  call void @llvm.lifetime.end.p0(i64 4, ptr %190) #7
  %1793 = load i32, ptr %184, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %191, i32 noundef %1793)
          to label %1794 unwind label %1806

1794:                                             ; preds = %1792
  %1795 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %191, i32 0, i32 0
  %1796 = load i32, ptr %1795, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1796, i32 noundef 11, i32 noundef 25)
          to label %1797 unwind label %1806

1797:                                             ; preds = %1794
  %1798 = load i32, ptr %184, align 4, !tbaa !190
  %1799 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 19
  store i32 %1798, ptr %1799, align 4, !tbaa !236
  %1800 = load i32, ptr %184, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 1, i32 noundef 25, i32 noundef %1800)
          to label %1801 unwind label %1806

1801:                                             ; preds = %1797
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %186) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %186) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %185) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #7
  br label %1820

1802:                                             ; preds = %1764
  %1803 = landingpad { ptr, i32 }
          cleanup
  %1804 = extractvalue { ptr, i32 } %1803, 0
  store ptr %1804, ptr %39, align 8
  %1805 = extractvalue { ptr, i32 } %1803, 1
  store i32 %1805, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #7
  br label %1819

1806:                                             ; preds = %1797, %1794, %1792, %1780
  %1807 = landingpad { ptr, i32 }
          cleanup
  %1808 = extractvalue { ptr, i32 } %1807, 0
  store ptr %1808, ptr %39, align 8
  %1809 = extractvalue { ptr, i32 } %1807, 1
  store i32 %1809, ptr %40, align 4
  br label %1818

1810:                                             ; preds = %1785
  %1811 = landingpad { ptr, i32 }
          cleanup
  %1812 = extractvalue { ptr, i32 } %1811, 0
  store ptr %1812, ptr %39, align 8
  %1813 = extractvalue { ptr, i32 } %1811, 1
  store i32 %1813, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #7
  br label %1818

1814:                                             ; preds = %1787
  %1815 = landingpad { ptr, i32 }
          cleanup
  %1816 = extractvalue { ptr, i32 } %1815, 0
  store ptr %1816, ptr %39, align 8
  %1817 = extractvalue { ptr, i32 } %1815, 1
  store i32 %1817, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %190) #7
  br label %1818

1818:                                             ; preds = %1814, %1810, %1806
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #7
  br label %1819

1819:                                             ; preds = %1818, %1802
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %186) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %186) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %185) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #7
  br label %1900

1820:                                             ; preds = %1801, %1761, %1758
  %1821 = load i8, ptr %31, align 1, !tbaa !9, !range !174, !noundef !175
  %1822 = trunc i8 %1821 to i1
  br i1 %1822, label %1899, label %1823

1823:                                             ; preds = %1820
  %1824 = load i8, ptr %15, align 1, !tbaa !9, !range !174, !noundef !175
  %1825 = trunc i8 %1824 to i1
  br i1 %1825, label %1826, label %1899

1826:                                             ; preds = %1823
  call void @llvm.lifetime.start.p0(i64 4, ptr %192) #7
  %1827 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %1828 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1827, i32 noundef 3)
  store i32 %1828, ptr %192, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %193) #7
  %1829 = load i32, ptr %192, align 4, !tbaa !190
  store i32 %1829, ptr %193, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %194) #7
  %1830 = load i32, ptr %192, align 4, !tbaa !190
  %1831 = add i32 %1830, 1
  store i32 %1831, ptr %194, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %195) #7
  %1832 = load i32, ptr %192, align 4, !tbaa !190
  %1833 = add i32 %1832, 2
  store i32 %1833, ptr %195, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %196) #7
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %196, i32 noundef 22)
  %1834 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %196, i32 0, i32 2
  store i32 13, ptr %1834, align 8, !tbaa !195
  %1835 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %196, i32 0, i32 3
  store i32 32, ptr %1835, align 4, !tbaa !208
  %1836 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %196, i32 0, i32 4
  store i32 1, ptr %1836, align 8, !tbaa !209
  %1837 = load i32, ptr %193, align 4, !tbaa !190
  %1838 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1837, ptr noundef nonnull align 8 dereferenceable(336) %196)
          to label %1839 unwind label %1871

1839:                                             ; preds = %1826
  call void @llvm.lifetime.start.p0(i64 336, ptr %197) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %197, ptr noundef nonnull align 8 dereferenceable(336) %196)
          to label %1840 unwind label %1875

1840:                                             ; preds = %1839
  %1841 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %197, i32 0, i32 1
  store i32 32, ptr %1841, align 4, !tbaa !210
  %1842 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %197, i32 0, i32 9
  store i8 1, ptr %1842, align 4, !tbaa !211
  %1843 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %197, i32 0, i32 8
  %1844 = load i32, ptr %1843, align 8, !tbaa !212
  %1845 = add i32 %1844, 1
  store i32 %1845, ptr %1843, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %198) #7
  %1846 = load i32, ptr %193, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %198, i32 noundef %1846)
          to label %1847 unwind label %1879

1847:                                             ; preds = %1840
  %1848 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %197, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1848, ptr align 4 %198, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %198) #7
  %1849 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %197, i32 0, i32 11
  store i32 3, ptr %1849, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %199) #7
  %1850 = load i32, ptr %194, align 4, !tbaa !190
  %1851 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1850, ptr noundef nonnull align 8 dereferenceable(336) %197)
          to label %1852 unwind label %1883

1852:                                             ; preds = %1847
  store ptr %1851, ptr %199, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %200) #7
  %1853 = load i32, ptr %193, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %200, i32 noundef %1853)
          to label %1854 unwind label %1887

1854:                                             ; preds = %1852
  %1855 = load ptr, ptr %199, align 8, !tbaa !5
  %1856 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1855, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1856, ptr align 4 %200, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #7
  %1857 = load i32, ptr %195, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %201) #7
  store i32 3, ptr %201, align 4, !tbaa !215
  %1858 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1857, ptr noundef nonnull align 4 dereferenceable(4) %194, ptr noundef nonnull align 4 dereferenceable(4) %201)
          to label %1859 unwind label %1891

1859:                                             ; preds = %1854
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #7
  %1860 = load i32, ptr %195, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %202, i32 noundef %1860)
          to label %1861 unwind label %1883

1861:                                             ; preds = %1859
  %1862 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %202, i32 0, i32 0
  %1863 = load i32, ptr %1862, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1863, i32 noundef 11, i32 noundef 22)
          to label %1864 unwind label %1883

1864:                                             ; preds = %1861
  %1865 = load i32, ptr %195, align 4, !tbaa !190
  %1866 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 23
  store i32 %1865, ptr %1866, align 4, !tbaa !237
  %1867 = load i32, ptr %195, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 3, i32 noundef 22, i32 noundef %1867)
          to label %1868 unwind label %1883

1868:                                             ; preds = %1864
  %1869 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 21
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %1869, i32 noundef 22)
          to label %1870 unwind label %1883

1870:                                             ; preds = %1868
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %197) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %197) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %196) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %196) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %195) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %194) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #7
  br label %1899

1871:                                             ; preds = %1826
  %1872 = landingpad { ptr, i32 }
          cleanup
  %1873 = extractvalue { ptr, i32 } %1872, 0
  store ptr %1873, ptr %39, align 8
  %1874 = extractvalue { ptr, i32 } %1872, 1
  store i32 %1874, ptr %40, align 4
  br label %1898

1875:                                             ; preds = %1839
  %1876 = landingpad { ptr, i32 }
          cleanup
  %1877 = extractvalue { ptr, i32 } %1876, 0
  store ptr %1877, ptr %39, align 8
  %1878 = extractvalue { ptr, i32 } %1876, 1
  store i32 %1878, ptr %40, align 4
  br label %1897

1879:                                             ; preds = %1840
  %1880 = landingpad { ptr, i32 }
          cleanup
  %1881 = extractvalue { ptr, i32 } %1880, 0
  store ptr %1881, ptr %39, align 8
  %1882 = extractvalue { ptr, i32 } %1880, 1
  store i32 %1882, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %198) #7
  br label %1896

1883:                                             ; preds = %1868, %1864, %1861, %1859, %1847
  %1884 = landingpad { ptr, i32 }
          cleanup
  %1885 = extractvalue { ptr, i32 } %1884, 0
  store ptr %1885, ptr %39, align 8
  %1886 = extractvalue { ptr, i32 } %1884, 1
  store i32 %1886, ptr %40, align 4
  br label %1895

1887:                                             ; preds = %1852
  %1888 = landingpad { ptr, i32 }
          cleanup
  %1889 = extractvalue { ptr, i32 } %1888, 0
  store ptr %1889, ptr %39, align 8
  %1890 = extractvalue { ptr, i32 } %1888, 1
  store i32 %1890, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #7
  br label %1895

1891:                                             ; preds = %1854
  %1892 = landingpad { ptr, i32 }
          cleanup
  %1893 = extractvalue { ptr, i32 } %1892, 0
  store ptr %1893, ptr %39, align 8
  %1894 = extractvalue { ptr, i32 } %1892, 1
  store i32 %1894, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #7
  br label %1895

1895:                                             ; preds = %1891, %1887, %1883
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #7
  br label %1896

1896:                                             ; preds = %1895, %1879
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %197) #7
  br label %1897

1897:                                             ; preds = %1896, %1875
  call void @llvm.lifetime.end.p0(i64 336, ptr %197) #7
  br label %1898

1898:                                             ; preds = %1897, %1871
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %196) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %196) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %195) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %194) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #7
  br label %1900

1899:                                             ; preds = %1870, %1823, %1820
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  br label %1901

1900:                                             ; preds = %1898, %1819, %1757, %1696, %1618, %1558, %1473, %1408, %1343, %1126, %839, %773, %710, %642
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  br label %2289

1901:                                             ; preds = %1899, %504
  %1902 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 77
  %1903 = load i8, ptr %1902, align 1, !tbaa !238, !range !174, !noundef !175
  %1904 = trunc i8 %1903 to i1
  br i1 %1904, label %1905, label %1936

1905:                                             ; preds = %1901
  call void @llvm.lifetime.start.p0(i64 4, ptr %203) #7
  %1906 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  store i32 %1906, ptr %203, align 4, !tbaa !190
  %1907 = load i32, ptr %203, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %204, i32 noundef %1907)
  call void @llvm.lifetime.start.p0(i64 32, ptr %205) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %206) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %206) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %205, ptr noundef @.str.18, ptr noundef nonnull align 1 dereferenceable(1) %206)
          to label %1908 unwind label %1927

1908:                                             ; preds = %1905
  %1909 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %204, i32 0, i32 0
  %1910 = load i32, ptr %1909, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1910, ptr noundef nonnull align 8 dereferenceable(32) %205)
          to label %1911 unwind label %1931

1911:                                             ; preds = %1908
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %206) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %206) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %205) #7
  %1912 = load i32, ptr %203, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %207, i32 noundef %1912)
  %1913 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %207, i32 0, i32 0
  %1914 = load i32, ptr %1913, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1914, i32 noundef 34, i32 noundef -2)
  %1915 = load i32, ptr %203, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %208, i32 noundef %1915)
  %1916 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1917 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1916, i32 0, i32 5
  %1918 = load i32, ptr %1917, align 4, !tbaa !239
  %1919 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %208, i32 0, i32 0
  %1920 = load i32, ptr %1919, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1920, i32 noundef 33, i32 noundef %1918)
  %1921 = load i32, ptr %203, align 4, !tbaa !190
  %1922 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1923 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1922, i32 0, i32 5
  %1924 = load i32, ptr %1923, align 4, !tbaa !239
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1921, i32 noundef 6, i32 noundef %1924)
  %1925 = load i32, ptr %203, align 4, !tbaa !190
  %1926 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 24
  store i32 %1925, ptr %1926, align 8, !tbaa !240
  call void @llvm.lifetime.end.p0(i64 4, ptr %203) #7
  br label %1936

1927:                                             ; preds = %1905
  %1928 = landingpad { ptr, i32 }
          cleanup
  %1929 = extractvalue { ptr, i32 } %1928, 0
  store ptr %1929, ptr %39, align 8
  %1930 = extractvalue { ptr, i32 } %1928, 1
  store i32 %1930, ptr %40, align 4
  br label %1935

1931:                                             ; preds = %1908
  %1932 = landingpad { ptr, i32 }
          cleanup
  %1933 = extractvalue { ptr, i32 } %1932, 0
  store ptr %1933, ptr %39, align 8
  %1934 = extractvalue { ptr, i32 } %1932, 1
  store i32 %1934, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #7
  br label %1935

1935:                                             ; preds = %1931, %1927
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %206) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %206) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %205) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %203) #7
  br label %2289

1936:                                             ; preds = %1911, %1901
  %1937 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL24needs_buffer_size_bufferEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %1937, label %1938, label %1969

1938:                                             ; preds = %1936
  call void @llvm.lifetime.start.p0(i64 4, ptr %209) #7
  %1939 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  store i32 %1939, ptr %209, align 4, !tbaa !190
  %1940 = load i32, ptr %209, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %210, i32 noundef %1940)
  call void @llvm.lifetime.start.p0(i64 32, ptr %211) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %212) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %212) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %211, ptr noundef @.str.19, ptr noundef nonnull align 1 dereferenceable(1) %212)
          to label %1941 unwind label %1960

1941:                                             ; preds = %1938
  %1942 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %210, i32 0, i32 0
  %1943 = load i32, ptr %1942, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1943, ptr noundef nonnull align 8 dereferenceable(32) %211)
          to label %1944 unwind label %1964

1944:                                             ; preds = %1941
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %212) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %212) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %211) #7
  %1945 = load i32, ptr %209, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %213, i32 noundef %1945)
  %1946 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %213, i32 0, i32 0
  %1947 = load i32, ptr %1946, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1947, i32 noundef 34, i32 noundef -3)
  %1948 = load i32, ptr %209, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %214, i32 noundef %1948)
  %1949 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1950 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1949, i32 0, i32 10
  %1951 = load i32, ptr %1950, align 4, !tbaa !241
  %1952 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %214, i32 0, i32 0
  %1953 = load i32, ptr %1952, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1953, i32 noundef 33, i32 noundef %1951)
  %1954 = load i32, ptr %209, align 4, !tbaa !190
  %1955 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1956 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1955, i32 0, i32 10
  %1957 = load i32, ptr %1956, align 4, !tbaa !241
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1954, i32 noundef 6, i32 noundef %1957)
  %1958 = load i32, ptr %209, align 4, !tbaa !190
  %1959 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 25
  store i32 %1958, ptr %1959, align 4, !tbaa !242
  call void @llvm.lifetime.end.p0(i64 4, ptr %209) #7
  br label %1969

1960:                                             ; preds = %1938
  %1961 = landingpad { ptr, i32 }
          cleanup
  %1962 = extractvalue { ptr, i32 } %1961, 0
  store ptr %1962, ptr %39, align 8
  %1963 = extractvalue { ptr, i32 } %1961, 1
  store i32 %1963, ptr %40, align 4
  br label %1968

1964:                                             ; preds = %1941
  %1965 = landingpad { ptr, i32 }
          cleanup
  %1966 = extractvalue { ptr, i32 } %1965, 0
  store ptr %1966, ptr %39, align 8
  %1967 = extractvalue { ptr, i32 } %1965, 1
  store i32 %1967, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #7
  br label %1968

1968:                                             ; preds = %1964, %1960
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %212) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %212) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %211) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %209) #7
  br label %2289

1969:                                             ; preds = %1944, %1936
  %1970 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL22needs_view_mask_bufferEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %1970, label %1971, label %2002

1971:                                             ; preds = %1969
  call void @llvm.lifetime.start.p0(i64 4, ptr %215) #7
  %1972 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  store i32 %1972, ptr %215, align 4, !tbaa !190
  %1973 = load i32, ptr %215, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %216, i32 noundef %1973)
  call void @llvm.lifetime.start.p0(i64 32, ptr %217) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %218) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %218) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %217, ptr noundef @.str.20, ptr noundef nonnull align 1 dereferenceable(1) %218)
          to label %1974 unwind label %1993

1974:                                             ; preds = %1971
  %1975 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %216, i32 0, i32 0
  %1976 = load i32, ptr %1975, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1976, ptr noundef nonnull align 8 dereferenceable(32) %217)
          to label %1977 unwind label %1997

1977:                                             ; preds = %1974
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %218) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %218) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %217) #7
  %1978 = load i32, ptr %215, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %219, i32 noundef %1978)
  %1979 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %219, i32 0, i32 0
  %1980 = load i32, ptr %1979, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1980, i32 noundef 34, i32 noundef -5)
  %1981 = load i32, ptr %215, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %220, i32 noundef %1981)
  %1982 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1983 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1982, i32 0, i32 11
  %1984 = load i32, ptr %1983, align 4, !tbaa !243
  %1985 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %220, i32 0, i32 0
  %1986 = load i32, ptr %1985, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %1986, i32 noundef 33, i32 noundef %1984)
  %1987 = load i32, ptr %215, align 4, !tbaa !190
  %1988 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %1989 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1988, i32 0, i32 11
  %1990 = load i32, ptr %1989, align 4, !tbaa !243
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %1987, i32 noundef 6, i32 noundef %1990)
  %1991 = load i32, ptr %215, align 4, !tbaa !190
  %1992 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 26
  store i32 %1991, ptr %1992, align 8, !tbaa !244
  call void @llvm.lifetime.end.p0(i64 4, ptr %215) #7
  br label %2002

1993:                                             ; preds = %1971
  %1994 = landingpad { ptr, i32 }
          cleanup
  %1995 = extractvalue { ptr, i32 } %1994, 0
  store ptr %1995, ptr %39, align 8
  %1996 = extractvalue { ptr, i32 } %1994, 1
  store i32 %1996, ptr %40, align 4
  br label %2001

1997:                                             ; preds = %1974
  %1998 = landingpad { ptr, i32 }
          cleanup
  %1999 = extractvalue { ptr, i32 } %1998, 0
  store ptr %1999, ptr %39, align 8
  %2000 = extractvalue { ptr, i32 } %1998, 1
  store i32 %2000, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #7
  br label %2001

2001:                                             ; preds = %1997, %1993
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %218) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %218) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %217) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %215) #7
  br label %2289

2002:                                             ; preds = %1977, %1969
  %2003 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 113
  %2004 = call noundef zeroext i1 @_ZNKSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) %2003) #7
  br i1 %2004, label %2036, label %2005

2005:                                             ; preds = %2002
  call void @llvm.lifetime.start.p0(i64 4, ptr %221) #7
  %2006 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  store i32 %2006, ptr %221, align 4, !tbaa !190
  %2007 = load i32, ptr %221, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %222, i32 noundef %2007)
  call void @llvm.lifetime.start.p0(i64 32, ptr %223) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %224) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %224) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef @.str.21, ptr noundef nonnull align 1 dereferenceable(1) %224)
          to label %2008 unwind label %2027

2008:                                             ; preds = %2005
  %2009 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %222, i32 0, i32 0
  %2010 = load i32, ptr %2009, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %2010, ptr noundef nonnull align 8 dereferenceable(32) %223)
          to label %2011 unwind label %2031

2011:                                             ; preds = %2008
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %223) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %224) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %224) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %223) #7
  %2012 = load i32, ptr %221, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %225, i32 noundef %2012)
  %2013 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %225, i32 0, i32 0
  %2014 = load i32, ptr %2013, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %2014, i32 noundef 34, i32 noundef -6)
  %2015 = load i32, ptr %221, align 4, !tbaa !190
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %226, i32 noundef %2015)
  %2016 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %2017 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2016, i32 0, i32 12
  %2018 = load i32, ptr %2017, align 4, !tbaa !245
  %2019 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %226, i32 0, i32 0
  %2020 = load i32, ptr %2019, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %2020, i32 noundef 33, i32 noundef %2018)
  %2021 = load i32, ptr %221, align 4, !tbaa !190
  %2022 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 37
  %2023 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2022, i32 0, i32 12
  %2024 = load i32, ptr %2023, align 4, !tbaa !245
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2021, i32 noundef 6, i32 noundef %2024)
  %2025 = load i32, ptr %221, align 4, !tbaa !190
  %2026 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 27
  store i32 %2025, ptr %2026, align 4, !tbaa !246
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #7
  br label %2036

2027:                                             ; preds = %2005
  %2028 = landingpad { ptr, i32 }
          cleanup
  %2029 = extractvalue { ptr, i32 } %2028, 0
  store ptr %2029, ptr %39, align 8
  %2030 = extractvalue { ptr, i32 } %2028, 1
  store i32 %2030, ptr %40, align 4
  br label %2035

2031:                                             ; preds = %2008
  %2032 = landingpad { ptr, i32 }
          cleanup
  %2033 = extractvalue { ptr, i32 } %2032, 0
  store ptr %2033, ptr %39, align 8
  %2034 = extractvalue { ptr, i32 } %2032, 1
  store i32 %2034, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %223) #7
  br label %2035

2035:                                             ; preds = %2031, %2027
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %224) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %224) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %223) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #7
  br label %2289

2036:                                             ; preds = %2011, %2002
  call void @llvm.lifetime.start.p0(i64 1, ptr %227) #7
  %2037 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %2038 = icmp eq i32 %2037, 0
  br i1 %2038, label %2041, label %2039

2039:                                             ; preds = %2036
  %2040 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %2040, label %2041, label %2051

2041:                                             ; preds = %2039, %2036
  %2042 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 76
  %2043 = load i8, ptr %2042, align 4, !tbaa !11, !range !174, !noundef !175
  %2044 = trunc i8 %2043 to i1
  br i1 %2044, label %2051, label %2045

2045:                                             ; preds = %2041
  %2046 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL29get_is_rasterization_disabledEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %2046, label %2051, label %2047

2047:                                             ; preds = %2045
  %2048 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 21
  %2049 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %2048, i32 noundef 0)
  %2050 = xor i1 %2049, true
  br label %2051

2051:                                             ; preds = %2047, %2045, %2041, %2039
  %2052 = phi i1 [ false, %2045 ], [ false, %2041 ], [ false, %2039 ], [ %2050, %2047 ]
  %2053 = zext i1 %2052 to i8
  store i8 %2053, ptr %227, align 1, !tbaa !9
  %2054 = load i8, ptr %227, align 1, !tbaa !9, !range !174, !noundef !175
  %2055 = trunc i8 %2054 to i1
  br i1 %2055, label %2056, label %2069

2056:                                             ; preds = %2051
  call void @llvm.lifetime.start.p0(i64 1, ptr %228) #7
  store i8 0, ptr %228, align 1, !tbaa !9
  %2057 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %229) #7
  %2058 = getelementptr inbounds %class.anon.422, ptr %229, i32 0, i32 0
  store ptr %266, ptr %2058, align 8, !tbaa !247
  %2059 = getelementptr inbounds %class.anon.422, ptr %229, i32 0, i32 1
  store ptr %228, ptr %2059, align 8, !tbaa !5
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL23build_implicit_builtinsEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %2057, ptr noundef nonnull align 8 dereferenceable(16) %229)
  call void @llvm.lifetime.end.p0(i64 16, ptr %229) #7
  %2060 = load i8, ptr %228, align 1, !tbaa !9, !range !174, !noundef !175
  %2061 = trunc i8 %2060 to i1
  br i1 %2061, label %2062, label %2066

2062:                                             ; preds = %2056
  %2063 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 21
  %2064 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %2063, i32 noundef 0)
  %2065 = xor i1 %2064, true
  br label %2066

2066:                                             ; preds = %2062, %2056
  %2067 = phi i1 [ false, %2056 ], [ %2065, %2062 ]
  %2068 = zext i1 %2067 to i8
  store i8 %2068, ptr %227, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %228) #7
  br label %2069

2069:                                             ; preds = %2066, %2051
  %2070 = load i8, ptr %227, align 1, !tbaa !9, !range !174, !noundef !175
  %2071 = trunc i8 %2070 to i1
  br i1 %2071, label %2072, label %2141

2072:                                             ; preds = %2069
  call void @llvm.lifetime.start.p0(i64 4, ptr %230) #7
  %2073 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %2074 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %2073, i32 noundef 3)
  store i32 %2074, ptr %230, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %231) #7
  %2075 = load i32, ptr %230, align 4, !tbaa !190
  store i32 %2075, ptr %231, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %232) #7
  %2076 = load i32, ptr %230, align 4, !tbaa !190
  %2077 = add i32 %2076, 1
  store i32 %2077, ptr %232, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %233) #7
  %2078 = load i32, ptr %230, align 4, !tbaa !190
  %2079 = add i32 %2078, 2
  store i32 %2079, ptr %233, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %234) #7
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %234, i32 noundef 23)
  %2080 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %234, i32 0, i32 2
  store i32 13, ptr %2080, align 8, !tbaa !195
  %2081 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %234, i32 0, i32 3
  store i32 32, ptr %2081, align 4, !tbaa !208
  %2082 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %234, i32 0, i32 4
  store i32 4, ptr %2082, align 8, !tbaa !209
  %2083 = load i32, ptr %231, align 4, !tbaa !190
  %2084 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2083, ptr noundef nonnull align 8 dereferenceable(336) %234)
          to label %2085 unwind label %2113

2085:                                             ; preds = %2072
  call void @llvm.lifetime.start.p0(i64 336, ptr %235) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %235, ptr noundef nonnull align 8 dereferenceable(336) %234)
          to label %2086 unwind label %2117

2086:                                             ; preds = %2085
  %2087 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %235, i32 0, i32 1
  store i32 32, ptr %2087, align 4, !tbaa !210
  %2088 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %235, i32 0, i32 9
  store i8 1, ptr %2088, align 4, !tbaa !211
  %2089 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %235, i32 0, i32 8
  %2090 = load i32, ptr %2089, align 8, !tbaa !212
  %2091 = add i32 %2090, 1
  store i32 %2091, ptr %2089, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %236) #7
  %2092 = load i32, ptr %231, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %236, i32 noundef %2092)
          to label %2093 unwind label %2121

2093:                                             ; preds = %2086
  %2094 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %235, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2094, ptr align 4 %236, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %236) #7
  %2095 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %235, i32 0, i32 11
  store i32 3, ptr %2095, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %237) #7
  %2096 = load i32, ptr %232, align 4, !tbaa !190
  %2097 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2096, ptr noundef nonnull align 8 dereferenceable(336) %235)
          to label %2098 unwind label %2125

2098:                                             ; preds = %2093
  store ptr %2097, ptr %237, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %238) #7
  %2099 = load i32, ptr %231, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %238, i32 noundef %2099)
          to label %2100 unwind label %2129

2100:                                             ; preds = %2098
  %2101 = load ptr, ptr %237, align 8, !tbaa !5
  %2102 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2101, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2102, ptr align 4 %238, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %238) #7
  %2103 = load i32, ptr %233, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %239) #7
  store i32 3, ptr %239, align 4, !tbaa !215
  %2104 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2103, ptr noundef nonnull align 4 dereferenceable(4) %232, ptr noundef nonnull align 4 dereferenceable(4) %239)
          to label %2105 unwind label %2133

2105:                                             ; preds = %2100
  call void @llvm.lifetime.end.p0(i64 4, ptr %239) #7
  %2106 = load i32, ptr %233, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %240, i32 noundef %2106)
          to label %2107 unwind label %2125

2107:                                             ; preds = %2105
  %2108 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %240, i32 0, i32 0
  %2109 = load i32, ptr %2108, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %2109, i32 noundef 11, i32 noundef 0)
          to label %2110 unwind label %2125

2110:                                             ; preds = %2107
  %2111 = load i32, ptr %233, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef 3, i32 noundef 0, i32 noundef %2111)
          to label %2112 unwind label %2125

2112:                                             ; preds = %2110
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %235) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %235) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %234) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %234) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %233) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %232) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %231) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %230) #7
  br label %2141

2113:                                             ; preds = %2072
  %2114 = landingpad { ptr, i32 }
          cleanup
  %2115 = extractvalue { ptr, i32 } %2114, 0
  store ptr %2115, ptr %39, align 8
  %2116 = extractvalue { ptr, i32 } %2114, 1
  store i32 %2116, ptr %40, align 4
  br label %2140

2117:                                             ; preds = %2085
  %2118 = landingpad { ptr, i32 }
          cleanup
  %2119 = extractvalue { ptr, i32 } %2118, 0
  store ptr %2119, ptr %39, align 8
  %2120 = extractvalue { ptr, i32 } %2118, 1
  store i32 %2120, ptr %40, align 4
  br label %2139

2121:                                             ; preds = %2086
  %2122 = landingpad { ptr, i32 }
          cleanup
  %2123 = extractvalue { ptr, i32 } %2122, 0
  store ptr %2123, ptr %39, align 8
  %2124 = extractvalue { ptr, i32 } %2122, 1
  store i32 %2124, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %236) #7
  br label %2138

2125:                                             ; preds = %2110, %2107, %2105, %2093
  %2126 = landingpad { ptr, i32 }
          cleanup
  %2127 = extractvalue { ptr, i32 } %2126, 0
  store ptr %2127, ptr %39, align 8
  %2128 = extractvalue { ptr, i32 } %2126, 1
  store i32 %2128, ptr %40, align 4
  br label %2137

2129:                                             ; preds = %2098
  %2130 = landingpad { ptr, i32 }
          cleanup
  %2131 = extractvalue { ptr, i32 } %2130, 0
  store ptr %2131, ptr %39, align 8
  %2132 = extractvalue { ptr, i32 } %2130, 1
  store i32 %2132, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %238) #7
  br label %2137

2133:                                             ; preds = %2100
  %2134 = landingpad { ptr, i32 }
          cleanup
  %2135 = extractvalue { ptr, i32 } %2134, 0
  store ptr %2135, ptr %39, align 8
  %2136 = extractvalue { ptr, i32 } %2134, 1
  store i32 %2136, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %239) #7
  br label %2137

2137:                                             ; preds = %2133, %2129, %2125
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #7
  br label %2138

2138:                                             ; preds = %2137, %2121
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %235) #7
  br label %2139

2139:                                             ; preds = %2138, %2117
  call void @llvm.lifetime.end.p0(i64 336, ptr %235) #7
  br label %2140

2140:                                             ; preds = %2139, %2113
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %234) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %234) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %233) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %232) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %231) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %230) #7
  br label %2288

2141:                                             ; preds = %2112, %2069
  %2142 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  br i1 %2142, label %2143, label %2207

2143:                                             ; preds = %2141
  call void @llvm.lifetime.start.p0(i64 4, ptr %241) #7
  %2144 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %2145 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %2144, i32 noundef 2)
  store i32 %2145, ptr %241, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %242) #7
  %2146 = load i32, ptr %241, align 4, !tbaa !190
  store i32 %2146, ptr %242, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %243) #7
  %2147 = load i32, ptr %241, align 4, !tbaa !190
  %2148 = add i32 %2147, 1
  store i32 %2148, ptr %243, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %244) #7
  %2149 = call noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %266)
  %2150 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %266, i32 noundef %2149, i32 noundef 2, i32 noundef 0)
  store i32 %2150, ptr %244, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %245) #7
  %2151 = load i32, ptr %244, align 4, !tbaa !190
  %2152 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2151)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %245, ptr noundef nonnull align 8 dereferenceable(336) %2152)
  %2153 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %245, i32 0, i32 1
  store i32 32, ptr %2153, align 4, !tbaa !210
  %2154 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %245, i32 0, i32 9
  store i8 1, ptr %2154, align 4, !tbaa !211
  %2155 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %245, i32 0, i32 8
  %2156 = load i32, ptr %2155, align 8, !tbaa !212
  %2157 = add i32 %2156, 1
  store i32 %2157, ptr %2155, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %246) #7
  %2158 = load i32, ptr %244, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %246, i32 noundef %2158)
          to label %2159 unwind label %2180

2159:                                             ; preds = %2143
  %2160 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %245, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2160, ptr align 4 %246, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %246) #7
  %2161 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %245, i32 0, i32 11
  store i32 4, ptr %2161, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %247) #7
  %2162 = load i32, ptr %242, align 4, !tbaa !190
  %2163 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2162, ptr noundef nonnull align 8 dereferenceable(336) %245)
          to label %2164 unwind label %2184

2164:                                             ; preds = %2159
  store ptr %2163, ptr %247, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %248) #7
  %2165 = load i32, ptr %244, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %248, i32 noundef %2165)
          to label %2166 unwind label %2188

2166:                                             ; preds = %2164
  %2167 = load ptr, ptr %247, align 8, !tbaa !5
  %2168 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2167, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2168, ptr align 4 %248, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %248) #7
  %2169 = load i32, ptr %243, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %249) #7
  store i32 4, ptr %249, align 4, !tbaa !215
  %2170 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2169, ptr noundef nonnull align 4 dereferenceable(4) %242, ptr noundef nonnull align 4 dereferenceable(4) %249)
          to label %2171 unwind label %2192

2171:                                             ; preds = %2166
  call void @llvm.lifetime.end.p0(i64 4, ptr %249) #7
  %2172 = load i32, ptr %243, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %250, i32 noundef %2172)
          to label %2173 unwind label %2184

2173:                                             ; preds = %2171
  call void @llvm.lifetime.start.p0(i64 32, ptr %251) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %252) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %252) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %251, ptr noundef @.str.22, ptr noundef nonnull align 1 dereferenceable(1) %252)
          to label %2174 unwind label %2196

2174:                                             ; preds = %2173
  %2175 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %250, i32 0, i32 0
  %2176 = load i32, ptr %2175, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %2176, ptr noundef nonnull align 8 dereferenceable(32) %251)
          to label %2177 unwind label %2200

2177:                                             ; preds = %2174
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %252) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %252) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %251) #7
  %2178 = load i32, ptr %243, align 4, !tbaa !190
  %2179 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 21
  store i32 %2178, ptr %2179, align 4, !tbaa !249
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %245) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %245) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %244) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %243) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %242) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %241) #7
  br label %2207

2180:                                             ; preds = %2143
  %2181 = landingpad { ptr, i32 }
          cleanup
  %2182 = extractvalue { ptr, i32 } %2181, 0
  store ptr %2182, ptr %39, align 8
  %2183 = extractvalue { ptr, i32 } %2181, 1
  store i32 %2183, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %246) #7
  br label %2206

2184:                                             ; preds = %2171, %2159
  %2185 = landingpad { ptr, i32 }
          cleanup
  %2186 = extractvalue { ptr, i32 } %2185, 0
  store ptr %2186, ptr %39, align 8
  %2187 = extractvalue { ptr, i32 } %2185, 1
  store i32 %2187, ptr %40, align 4
  br label %2205

2188:                                             ; preds = %2164
  %2189 = landingpad { ptr, i32 }
          cleanup
  %2190 = extractvalue { ptr, i32 } %2189, 0
  store ptr %2190, ptr %39, align 8
  %2191 = extractvalue { ptr, i32 } %2189, 1
  store i32 %2191, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %248) #7
  br label %2205

2192:                                             ; preds = %2166
  %2193 = landingpad { ptr, i32 }
          cleanup
  %2194 = extractvalue { ptr, i32 } %2193, 0
  store ptr %2194, ptr %39, align 8
  %2195 = extractvalue { ptr, i32 } %2193, 1
  store i32 %2195, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %249) #7
  br label %2205

2196:                                             ; preds = %2173
  %2197 = landingpad { ptr, i32 }
          cleanup
  %2198 = extractvalue { ptr, i32 } %2197, 0
  store ptr %2198, ptr %39, align 8
  %2199 = extractvalue { ptr, i32 } %2197, 1
  store i32 %2199, ptr %40, align 4
  br label %2204

2200:                                             ; preds = %2174
  %2201 = landingpad { ptr, i32 }
          cleanup
  %2202 = extractvalue { ptr, i32 } %2201, 0
  store ptr %2202, ptr %39, align 8
  %2203 = extractvalue { ptr, i32 } %2201, 1
  store i32 %2203, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #7
  br label %2204

2204:                                             ; preds = %2200, %2196
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %252) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %252) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %251) #7
  br label %2205

2205:                                             ; preds = %2204, %2192, %2188, %2184
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #7
  br label %2206

2206:                                             ; preds = %2205, %2180
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %245) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %245) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %244) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %243) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %242) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %241) #7
  br label %2288

2207:                                             ; preds = %2177, %2141
  %2208 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %266)
  %2209 = icmp eq i32 %2208, 5364
  br i1 %2209, label %2210, label %2287

2210:                                             ; preds = %2207
  call void @llvm.lifetime.start.p0(i64 4, ptr %253) #7
  %2211 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %266, i32 0, i32 1
  %2212 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %2211, i32 noundef 3)
  store i32 %2212, ptr %253, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %254) #7
  %2213 = load i32, ptr %253, align 4, !tbaa !190
  store i32 %2213, ptr %254, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %255) #7
  %2214 = load i32, ptr %253, align 4, !tbaa !190
  %2215 = add i32 %2214, 1
  store i32 %2215, ptr %255, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %256) #7
  %2216 = load i32, ptr %253, align 4, !tbaa !190
  %2217 = add i32 %2216, 2
  store i32 %2217, ptr %256, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 336, ptr %257) #7
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %257, i32 noundef 30)
  %2218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %257, i32 0, i32 2
  store i32 24, ptr %2218, align 8, !tbaa !195
  %2219 = load i32, ptr %254, align 4, !tbaa !190
  %2220 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2219, ptr noundef nonnull align 8 dereferenceable(336) %257)
          to label %2221 unwind label %2250

2221:                                             ; preds = %2210
  call void @llvm.lifetime.start.p0(i64 336, ptr %258) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %258, ptr noundef nonnull align 8 dereferenceable(336) %257)
          to label %2222 unwind label %2254

2222:                                             ; preds = %2221
  %2223 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %258, i32 0, i32 1
  store i32 32, ptr %2223, align 4, !tbaa !210
  %2224 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %258, i32 0, i32 9
  store i8 1, ptr %2224, align 4, !tbaa !211
  %2225 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %258, i32 0, i32 8
  %2226 = load i32, ptr %2225, align 8, !tbaa !212
  %2227 = add i32 %2226, 1
  store i32 %2227, ptr %2225, align 8, !tbaa !212
  call void @llvm.lifetime.start.p0(i64 4, ptr %259) #7
  %2228 = load i32, ptr %254, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %259, i32 noundef %2228)
          to label %2229 unwind label %2258

2229:                                             ; preds = %2222
  %2230 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %258, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2230, ptr align 4 %259, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %259) #7
  %2231 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %258, i32 0, i32 11
  store i32 3, ptr %2231, align 8, !tbaa !214
  call void @llvm.lifetime.start.p0(i64 8, ptr %260) #7
  %2232 = load i32, ptr %255, align 4, !tbaa !190
  %2233 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2232, ptr noundef nonnull align 8 dereferenceable(336) %258)
          to label %2234 unwind label %2262

2234:                                             ; preds = %2229
  store ptr %2233, ptr %260, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %261) #7
  %2235 = load i32, ptr %254, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %261, i32 noundef %2235)
          to label %2236 unwind label %2266

2236:                                             ; preds = %2234
  %2237 = load ptr, ptr %260, align 8, !tbaa !5
  %2238 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2237, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2238, ptr align 4 %261, i64 4, i1 false), !tbaa.struct !213
  call void @llvm.lifetime.end.p0(i64 4, ptr %261) #7
  %2239 = load i32, ptr %256, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 4, ptr %262) #7
  store i32 3, ptr %262, align 4, !tbaa !215
  %2240 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 noundef %2239, ptr noundef nonnull align 4 dereferenceable(4) %255, ptr noundef nonnull align 4 dereferenceable(4) %262)
          to label %2241 unwind label %2270

2241:                                             ; preds = %2236
  call void @llvm.lifetime.end.p0(i64 4, ptr %262) #7
  %2242 = load i32, ptr %256, align 4, !tbaa !190
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %263, i32 noundef %2242)
          to label %2243 unwind label %2262

2243:                                             ; preds = %2241
  call void @llvm.lifetime.start.p0(i64 32, ptr %264) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %265) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %264, ptr noundef @.str.23, ptr noundef nonnull align 1 dereferenceable(1) %265)
          to label %2244 unwind label %2274

2244:                                             ; preds = %2243
  %2245 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %263, i32 0, i32 0
  %2246 = load i32, ptr %2245, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %266, i32 %2246, ptr noundef nonnull align 8 dereferenceable(32) %264)
          to label %2247 unwind label %2278

2247:                                             ; preds = %2244
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %265) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %264) #7
  %2248 = load i32, ptr %256, align 4, !tbaa !190
  %2249 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %266, i32 0, i32 22
  store i32 %2248, ptr %2249, align 8, !tbaa !250
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %258) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %258) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %257) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %257) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %256) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %255) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %254) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %253) #7
  br label %2287

2250:                                             ; preds = %2210
  %2251 = landingpad { ptr, i32 }
          cleanup
  %2252 = extractvalue { ptr, i32 } %2251, 0
  store ptr %2252, ptr %39, align 8
  %2253 = extractvalue { ptr, i32 } %2251, 1
  store i32 %2253, ptr %40, align 4
  br label %2286

2254:                                             ; preds = %2221
  %2255 = landingpad { ptr, i32 }
          cleanup
  %2256 = extractvalue { ptr, i32 } %2255, 0
  store ptr %2256, ptr %39, align 8
  %2257 = extractvalue { ptr, i32 } %2255, 1
  store i32 %2257, ptr %40, align 4
  br label %2285

2258:                                             ; preds = %2222
  %2259 = landingpad { ptr, i32 }
          cleanup
  %2260 = extractvalue { ptr, i32 } %2259, 0
  store ptr %2260, ptr %39, align 8
  %2261 = extractvalue { ptr, i32 } %2259, 1
  store i32 %2261, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %259) #7
  br label %2284

2262:                                             ; preds = %2241, %2229
  %2263 = landingpad { ptr, i32 }
          cleanup
  %2264 = extractvalue { ptr, i32 } %2263, 0
  store ptr %2264, ptr %39, align 8
  %2265 = extractvalue { ptr, i32 } %2263, 1
  store i32 %2265, ptr %40, align 4
  br label %2283

2266:                                             ; preds = %2234
  %2267 = landingpad { ptr, i32 }
          cleanup
  %2268 = extractvalue { ptr, i32 } %2267, 0
  store ptr %2268, ptr %39, align 8
  %2269 = extractvalue { ptr, i32 } %2267, 1
  store i32 %2269, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %261) #7
  br label %2283

2270:                                             ; preds = %2236
  %2271 = landingpad { ptr, i32 }
          cleanup
  %2272 = extractvalue { ptr, i32 } %2271, 0
  store ptr %2272, ptr %39, align 8
  %2273 = extractvalue { ptr, i32 } %2271, 1
  store i32 %2273, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %262) #7
  br label %2283

2274:                                             ; preds = %2243
  %2275 = landingpad { ptr, i32 }
          cleanup
  %2276 = extractvalue { ptr, i32 } %2275, 0
  store ptr %2276, ptr %39, align 8
  %2277 = extractvalue { ptr, i32 } %2275, 1
  store i32 %2277, ptr %40, align 4
  br label %2282

2278:                                             ; preds = %2244
  %2279 = landingpad { ptr, i32 }
          cleanup
  %2280 = extractvalue { ptr, i32 } %2279, 0
  store ptr %2280, ptr %39, align 8
  %2281 = extractvalue { ptr, i32 } %2279, 1
  store i32 %2281, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #7
  br label %2282

2282:                                             ; preds = %2278, %2274
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %265) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %264) #7
  br label %2283

2283:                                             ; preds = %2282, %2270, %2266, %2262
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #7
  br label %2284

2284:                                             ; preds = %2283, %2258
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %258) #7
  br label %2285

2285:                                             ; preds = %2284, %2254
  call void @llvm.lifetime.end.p0(i64 336, ptr %258) #7
  br label %2286

2286:                                             ; preds = %2285, %2250
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %257) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %257) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %256) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %255) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %254) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %253) #7
  br label %2288

2287:                                             ; preds = %2247, %2207
  call void @llvm.lifetime.end.p0(i64 1, ptr %227) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #7
  ret void

2288:                                             ; preds = %2286, %2206, %2140
  call void @llvm.lifetime.end.p0(i64 1, ptr %227) #7
  br label %2289

2289:                                             ; preds = %2288, %2035, %2001, %1968, %1935, %1900
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #7
  br label %2290

2290:                                             ; preds = %2289
  %2291 = load ptr, ptr %39, align 8
  %2292 = load i32, ptr %40, align 4
  %2293 = insertvalue { ptr, i32 } poison, ptr %2291, 0
  %2294 = insertvalue { ptr, i32 } %2293, i32 %2292, 1
  resume { ptr, i32 } %2294
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #4 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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL23build_implicit_builtinsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(232)) #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 void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, 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 i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482), i32 noundef, i32 noundef, i32 noundef) #2 align 2

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

declare noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #0 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #4 align 2

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

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

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

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

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

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

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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !10, i64 11188}
!12 = !{!"_ZTSN11spirv_cross11CompilerMSLE", !13, i64 0, !121, i64 9848, !54, i64 9904, !54, i64 9908, !54, i64 9912, !54, i64 9916, !54, i64 9920, !54, i64 9924, !54, i64 9928, !54, i64 9932, !54, i64 9936, !54, i64 9940, !54, i64 9944, !54, i64 9948, !54, i64 9952, !54, i64 9956, !54, i64 9960, !54, i64 9964, !54, i64 9968, !54, i64 9972, !54, i64 9976, !54, i64 9980, !54, i64 9984, !54, i64 9988, !54, i64 9992, !54, i64 9996, !54, i64 10000, !54, i64 10004, !54, i64 10008, !54, i64 10012, !54, i64 10016, !54, i64 10020, !54, i64 10024, !54, i64 10028, !10, i64 10032, !10, i64 10033, !123, i64 10036, !127, i64 10176, !135, i64 10224, !140, i64 10272, !135, i64 10328, !140, i64 10376, !61, i64 10432, !61, i64 10488, !61, i64 10544, !61, i64 10600, !100, i64 10656, !100, i64 10712, !100, i64 10768, !142, i64 10824, !142, i64 10872, !63, i64 10920, !147, i64 10976, !149, i64 11032, !54, i64 11088, !54, i64 11092, !54, i64 11096, !7, i64 11100, !151, i64 11132, !151, i64 11136, !151, i64 11140, !151, i64 11144, !151, i64 11148, !151, i64 11152, !151, i64 11156, !151, i64 11160, !151, i64 11164, !151, i64 11168, !151, i64 11172, !152, i64 11176, !152, i64 11180, !10, i64 11184, !10, i64 11185, !10, i64 11186, !10, i64 11187, !10, i64 11188, !10, i64 11189, !10, i64 11190, !10, i64 11191, !10, i64 11192, !10, i64 11193, !10, i64 11194, !10, i64 11195, !10, i64 11196, !58, i64 11200, !58, i64 11232, !58, i64 11264, !58, i64 11296, !58, i64 11328, !58, i64 11360, !58, i64 11392, !58, i64 11424, !58, i64 11456, !58, i64 11488, !58, i64 11520, !58, i64 11552, !58, i64 11584, !58, i64 11616, !58, i64 11648, !58, i64 11680, !153, i64 11712, !154, i64 11720, !159, i64 11768, !61, i64 11824, !161, i64 11880, !63, i64 11968, !61, i64 12024, !61, i64 12080, !61, i64 12136, !164, i64 12192, !167, i64 12280, !63, i64 12328, !172, i64 12384, !7, i64 12440, !54, i64 12472, !54, i64 12476, !10, i64 12480, !10, i64 12481}
!13 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !14, i64 0, !6, i64 3176, !79, i64 3184, !10, i64 3272, !82, i64 3280, !6, i64 7616, !6, i64 7624, !10, i64 7632, !10, i64 7633, !87, i64 7636, !91, i64 7680, !91, i64 7736, !91, i64 7792, !91, i64 7848, !91, i64 7904, !91, i64 7960, !91, i64 8016, !93, i64 8072, !77, i64 8128, !10, i64 8184, !95, i64 8192, !54, i64 8416, !61, i64 8424, !61, i64 8480, !61, i64 8536, !97, i64 8592, !99, i64 8648, !100, i64 8656, !43, i64 8712, !43, i64 8992, !100, i64 9272, !102, i64 9328, !54, i64 9384, !54, i64 9388, !54, i64 9392, !10, i64 9396, !10, i64 9397, !105, i64 9400, !105, i64 9424, !109, i64 9448, !113, i64 9472, !100, i64 9496, !61, i64 9552, !61, i64 9608, !7, i64 9664, !117, i64 9672, !61, i64 9728, !6, i64 9784, !119, i64 9792}
!14 = !{!"_ZTSN11spirv_cross8CompilerE", !15, i64 8, !63, i64 1928, !63, i64 1984, !6, i64 2040, !6, i64 2048, !54, i64 2056, !66, i64 2064, !10, i64 2120, !61, i64 2128, !10, i64 2184, !10, i64 2185, !68, i64 2192, !63, i64 2312, !71, i64 2368, !61, i64 2400, !61, i64 2456, !61, i64 2512, !61, i64 2568, !61, i64 2624, !60, i64 2680, !60, i64 2744, !54, i64 2808, !54, i64 2812, !10, i64 2816, !61, i64 2824, !10, i64 2880, !10, i64 2881, !54, i64 2884, !73, i64 2888, !63, i64 2944, !75, i64 3000, !61, i64 3056, !10, i64 3112, !77, i64 3120}
!15 = !{!"_ZTSN11spirv_cross8ParsedIRE", !16, i64 0, !22, i64 8, !26, i64 32, !30, i64 248, !7, i64 304, !35, i64 1088, !35, i64 1144, !38, i64 1200, !40, i64 1256, !43, i64 1312, !46, i64 1592, !49, i64 1624, !51, i64 1680, !53, i64 1736, !55, i64 1740, !56, i64 1748, !57, i64 1752, !54, i64 1756, !54, i64 1760, !58, i64 1768, !60, i64 1800, !61, i64 1864}
!16 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !18, i64 0}
!18 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !20, i64 0}
!20 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !21, i64 0}
!21 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!22 = !{!"_ZTSSt6vectorIjSaIjEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !27, i64 0, !28, i64 16, !29, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !28, i64 8}
!28 = !{!"long", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!30 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !31, i64 0}
!31 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!32 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!33 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !34, i64 0, !28, i64 8}
!34 = !{!"float", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !36, i64 0, !28, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !28, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!38 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !39, i64 0}
!39 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !41, i64 0, !28, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !28, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !44, i64 0, !28, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !28, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !47, i64 0, !28, i64 16, !48, i64 24}
!47 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !28, i64 8}
!48 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!49 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !50, i64 0}
!50 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!51 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !52, i64 0}
!52 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!53 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !54, i64 0}
!54 = !{!"int", !7, i64 0}
!55 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !54, i64 0, !10, i64 4, !10, i64 5, !10, i64 6}
!56 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!57 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!58 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !59, i64 0, !28, i64 8, !7, i64 16}
!59 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!60 = !{!"_ZTSN11spirv_cross6BitsetE", !28, i64 0, !61, i64 8}
!61 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !62, i64 0}
!62 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!63 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !64, i64 0, !28, i64 16, !65, i64 24}
!64 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !28, i64 8}
!65 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!66 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !67, i64 0}
!67 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!68 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !69, i64 0, !28, i64 16, !70, i64 24}
!69 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !28, i64 8}
!70 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!71 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !72, i64 0, !6, i64 24}
!72 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!73 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!75 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !76, i64 0}
!76 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!77 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !78, i64 0}
!78 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!79 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !80, i64 0, !28, i64 16, !81, i64 24}
!80 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !28, i64 8}
!81 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!82 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !83, i64 0, !7, i64 24, !84, i64 4120}
!83 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !28, i64 8, !28, i64 16}
!84 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !85, i64 0, !28, i64 16, !86, i64 24}
!85 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !28, i64 8}
!86 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!87 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !54, i64 0, !10, i64 4, !10, i64 5, !54, i64 8, !10, i64 12, !10, i64 13, !10, i64 14, !10, i64 15, !10, i64 16, !10, i64 17, !10, i64 18, !10, i64 19, !10, i64 20, !10, i64 21, !10, i64 22, !10, i64 23, !54, i64 24, !88, i64 28, !89, i64 32}
!88 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !10, i64 0, !10, i64 1, !10, i64 2}
!89 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !90, i64 0, !90, i64 4}
!90 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!91 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !92, i64 0}
!92 = !{!"_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, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!93 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !94, i64 0}
!94 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!95 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !58, i64 0, !58, i64 32, !58, i64 64, !10, i64 96, !10, i64 97, !10, i64 98, !10, i64 99, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !96, i64 184, !10, i64 188, !10, i64 189, !10, i64 190, !10, i64 191, !10, i64 192, !10, i64 193, !10, i64 194, !10, i64 195, !10, i64 196, !10, i64 197, !10, i64 198, !10, i64 199, !10, i64 200, !10, i64 201, !10, i64 202, !10, i64 203, !10, i64 204, !10, i64 205, !10, i64 206, !10, i64 207, !10, i64 208, !10, i64 209, !10, i64 210, !10, i64 211, !10, i64 212, !10, i64 213, !10, i64 214, !10, i64 215, !10, i64 216, !10, i64 217, !10, i64 218, !10, i64 219}
!96 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!97 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !98, i64 0}
!98 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!99 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !54, i64 0}
!100 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !101, i64 0}
!101 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!102 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !103, i64 0, !28, i64 16, !104, i64 24}
!103 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !28, i64 8}
!104 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!105 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !106, i64 0}
!106 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !107, i64 0}
!107 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !108, i64 0}
!108 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!109 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !110, i64 0}
!110 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !111, i64 0}
!111 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !112, i64 0}
!112 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!113 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !114, i64 0}
!114 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !115, i64 0}
!115 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !116, i64 0}
!116 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!117 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !118, i64 0}
!118 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!119 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !120, i64 0}
!120 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!121 = !{!"_ZTSSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEE", !122, i64 0}
!122 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt3setIjSt4lessIjESaIjEEESaIS7_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!123 = !{!"_ZTSN11spirv_cross11CompilerMSL7OptionsE", !124, i64 0, !54, i64 4, !54, i64 8, !54, i64 12, !54, i64 16, !54, i64 20, !54, i64 24, !54, i64 28, !54, i64 32, !54, i64 36, !54, i64 40, !54, i64 44, !54, i64 48, !54, i64 52, !54, i64 56, !54, i64 60, !54, i64 64, !54, i64 68, !54, i64 72, !54, i64 76, !10, i64 80, !10, i64 81, !10, i64 82, !10, i64 83, !10, i64 84, !10, i64 85, !10, i64 86, !10, i64 87, !10, i64 88, !10, i64 89, !10, i64 90, !10, i64 91, !10, i64 92, !125, i64 96, !10, i64 100, !10, i64 101, !10, i64 102, !10, i64 103, !10, i64 104, !10, i64 105, !10, i64 106, !10, i64 107, !10, i64 108, !10, i64 109, !10, i64 110, !10, i64 111, !10, i64 112, !10, i64 113, !10, i64 114, !10, i64 115, !10, i64 116, !10, i64 117, !10, i64 118, !54, i64 120, !126, i64 124, !10, i64 128, !10, i64 129, !10, i64 130, !10, i64 131, !10, i64 132, !10, i64 133, !10, i64 134, !10, i64 135, !10, i64 136}
!124 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options8PlatformE", !7, i64 0}
!125 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options19ArgumentBuffersTierE", !7, i64 0}
!126 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options9IndexTypeE", !7, i64 0}
!127 = !{!"_ZTSSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE", !128, i64 0}
!128 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE", !129, i64 0}
!129 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !130, i64 0, !132, i64 8}
!130 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEEE", !131, i64 0}
!131 = !{!"_ZTSSt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEE"}
!132 = !{!"_ZTSSt15_Rb_tree_header", !133, i64 0, !28, i64 32}
!133 = !{!"_ZTSSt18_Rb_tree_node_base", !134, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!134 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!135 = !{!"_ZTSSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !136, i64 0}
!136 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !137, i64 0}
!137 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !138, i64 0, !132, i64 8}
!138 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross21LocationComponentPairEEE", !139, i64 0}
!139 = !{!"_ZTSSt4lessIN11spirv_cross21LocationComponentPairEE"}
!140 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE", !141, i64 0}
!141 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross26MSLShaderInterfaceVariableEESaIS4_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!142 = !{!"_ZTSSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE", !143, i64 0}
!143 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE", !144, i64 0}
!144 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !145, i64 0, !132, i64 8}
!145 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !146, i64 0}
!146 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!147 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_18MSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !148, i64 0}
!148 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_S2_INS0_18MSLResourceBindingEbEESaIS6_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!149 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingEjNS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_jEEE", !150, i64 0}
!150 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_jESaIS4_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!151 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !54, i64 0}
!152 = !{!"_ZTSN11spirv_cross11CompilerMSL8TriStateE", !7, i64 0}
!153 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!154 = !{!"_ZTSSt3mapIjN11spirv_cross19MSLConstexprSamplerESt4lessIjESaISt4pairIKjS1_EEE", !155, i64 0}
!155 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !156, i64 0}
!156 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !157, i64 0, !132, i64 8}
!157 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !158, i64 0}
!158 = !{!"_ZTSSt4lessIjE"}
!159 = !{!"_ZTSSt13unordered_mapIN11spirv_cross14SetBindingPairENS0_19MSLConstexprSamplerENS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_S2_EEE", !160, i64 0}
!160 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairESt4pairIKS1_NS0_19MSLConstexprSamplerEESaIS5_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!161 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !162, i64 0, !28, i64 16, !163, i64 24}
!162 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !6, i64 0, !28, i64 8}
!163 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!164 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEE", !165, i64 0, !28, i64 16, !166, i64 24}
!165 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_12SPIRVariableEEE", !6, i64 0, !28, i64 8}
!166 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_12SPIRVariableELm8EEE", !7, i64 0}
!167 = !{!"_ZTSSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE", !168, i64 0}
!168 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !169, i64 0}
!169 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !170, i64 0, !132, i64 8}
!170 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross14SetBindingPairEEE", !171, i64 0}
!171 = !{!"_ZTSSt4lessIN11spirv_cross14SetBindingPairEE"}
!172 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !173, i64 0}
!173 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !28, i64 8, !32, i64 16, !28, i64 24, !33, i64 32, !6, i64 48}
!174 = !{i8 0, i8 2}
!175 = !{}
!176 = !{!12, !10, i64 10151}
!177 = !{!12, !10, i64 10150}
!178 = !{!12, !10, i64 10125}
!179 = !{!12, !10, i64 10124}
!180 = !{!12, !10, i64 10123}
!181 = !{!12, !10, i64 10126}
!182 = !{!12, !10, i64 10154}
!183 = !{!14, !10, i64 2880}
!184 = !{!12, !10, i64 10117}
!185 = !{!12, !10, i64 10172}
!186 = !{!12, !10, i64 11194}
!187 = !{!12, !10, i64 11192}
!188 = !{!12, !10, i64 11193}
!189 = !{!12, !10, i64 11195}
!190 = !{!54, !54, i64 0}
!191 = !{!192, !6, i64 0}
!192 = !{!"_ZTSZN11spirv_cross11CompilerMSL23build_implicit_builtinsEvE3$_0", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224}
!193 = !{!12, !10, i64 10152}
!194 = !{!12, !10, i64 10140}
!195 = !{!196, !96, i64 16}
!196 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !197, i64 0, !153, i64 12, !96, i64 16, !54, i64 20, !54, i64 24, !54, i64 28, !63, i64 32, !199, i64 88, !54, i64 120, !10, i64 124, !10, i64 125, !202, i64 128, !102, i64 136, !63, i64 192, !203, i64 248, !204, i64 272, !204, i64 276, !91, i64 280}
!197 = !{!"_ZTSN11spirv_cross8IVariantE", !198, i64 8}
!198 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !54, i64 0}
!199 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !200, i64 0, !28, i64 16, !201, i64 24}
!200 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !28, i64 8}
!201 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!202 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!203 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !204, i64 0, !205, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !54, i64 12, !206, i64 16, !207, i64 20}
!204 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !54, i64 0}
!205 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!206 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!207 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!208 = !{!196, !54, i64 20}
!209 = !{!196, !54, i64 24}
!210 = !{!196, !153, i64 12}
!211 = !{!196, !10, i64 124}
!212 = !{!196, !54, i64 120}
!213 = !{i64 0, i64 4, !190}
!214 = !{!196, !202, i64 128}
!215 = !{!202, !202, i64 0}
!216 = !{!12, !54, i64 9904}
!217 = !{!12, !54, i64 9940}
!218 = !{!12, !54, i64 9936}
!219 = !{!12, !54, i64 9908}
!220 = !{!12, !54, i64 9920}
!221 = !{!12, !54, i64 9924}
!222 = !{!12, !54, i64 9928}
!223 = !{!12, !54, i64 9932}
!224 = !{!12, !10, i64 10149}
!225 = !{!12, !54, i64 9944}
!226 = !{!12, !54, i64 9948}
!227 = !{!12, !54, i64 9964}
!228 = !{!12, !54, i64 9952}
!229 = !{!12, !54, i64 9956}
!230 = !{!12, !54, i64 10060}
!231 = !{!12, !54, i64 9960}
!232 = !{!12, !10, i64 10032}
!233 = !{!12, !54, i64 9912}
!234 = !{!12, !54, i64 9916}
!235 = !{!12, !54, i64 9968}
!236 = !{!12, !54, i64 9972}
!237 = !{!12, !54, i64 9988}
!238 = !{!12, !10, i64 11189}
!239 = !{!12, !54, i64 10056}
!240 = !{!12, !54, i64 9992}
!241 = !{!12, !54, i64 10076}
!242 = !{!12, !54, i64 9996}
!243 = !{!12, !54, i64 10080}
!244 = !{!12, !54, i64 10000}
!245 = !{!12, !54, i64 10084}
!246 = !{!12, !54, i64 10004}
!247 = !{!248, !6, i64 0}
!248 = !{!"_ZTSZN11spirv_cross11CompilerMSL23build_implicit_builtinsEvE3$_1", !6, i64 0, !6, i64 8}
!249 = !{!12, !54, i64 9980}
!250 = !{!12, !54, i64 9984}


; 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.anon = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"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.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.std::allocator.71" = type { i8 }
%class.anon.422 = type { ptr, ptr }

@.str.16 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [7 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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL23build_implicit_builtinsEv(ptr noundef nonnull align 8 dereferenceable(12482) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i8, align 1
  %3 = alloca i8, align 1
  %4 = alloca i8, align 1
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i8, align 1
  %28 = alloca i8, align 1
  %29 = alloca i32, align 4
  %30 = alloca %class.anon, align 8
  %31 = alloca i32, align 4
  %32 = alloca %"struct.spirv_cross::SPIRType", align 8
  %33 = alloca %"struct.spirv_cross::SPIRType", align 8
  %34 = alloca %"class.spirv_cross::TypedID.414", align 4
  %35 = alloca %"class.spirv_cross::TypedID.413", align 4
  %36 = alloca i32, align 4
  %37 = alloca %"class.spirv_cross::TypedID.413", align 4
  %38 = alloca i32, align 4
  %39 = alloca %"struct.spirv_cross::SPIRType", align 8
  %40 = alloca %"class.spirv_cross::TypedID.414", align 4
  %41 = alloca %"class.spirv_cross::TypedID.413", align 4
  %42 = alloca i32, align 4
  %43 = alloca %"class.spirv_cross::TypedID.413", align 4
  %44 = alloca i32, align 4
  %45 = alloca %"struct.spirv_cross::SPIRType", align 8
  %46 = alloca %"class.spirv_cross::TypedID.414", align 4
  %47 = alloca %"class.spirv_cross::TypedID.413", align 4
  %48 = alloca i32, align 4
  %49 = alloca %"class.spirv_cross::TypedID.413", align 4
  %50 = alloca i32, align 4
  %51 = alloca %"struct.spirv_cross::SPIRType", align 8
  %52 = alloca %"class.spirv_cross::TypedID.414", align 4
  %53 = alloca %"class.spirv_cross::TypedID.413", align 4
  %54 = alloca i32, align 4
  %55 = alloca %"class.spirv_cross::TypedID.413", align 4
  %56 = alloca i32, align 4
  %57 = alloca %"struct.spirv_cross::SPIRType", align 8
  %58 = alloca %"class.spirv_cross::TypedID.414", align 4
  %59 = alloca %"class.spirv_cross::TypedID.413", align 4
  %60 = alloca i32, align 4
  %61 = alloca %"class.spirv_cross::TypedID.413", align 4
  %62 = alloca i32, align 4
  %63 = alloca %"class.spirv_cross::TypedID.413", align 4
  %64 = alloca i32, align 4
  %65 = alloca %"class.spirv_cross::TypedID.413", align 4
  %66 = alloca i32, align 4
  %67 = alloca %"class.spirv_cross::TypedID.413", align 4
  %68 = alloca i32, align 4
  %69 = alloca %"struct.spirv_cross::SPIRType", align 8
  %70 = alloca %"class.spirv_cross::TypedID.414", align 4
  %71 = alloca %"class.spirv_cross::TypedID.413", align 4
  %72 = alloca i32, align 4
  %73 = alloca %"class.spirv_cross::TypedID.413", align 4
  %74 = alloca i32, align 4
  %75 = alloca %"class.spirv_cross::TypedID.413", align 4
  %76 = alloca i32, align 4
  %77 = alloca %"struct.spirv_cross::SPIRType", align 8
  %78 = alloca %"class.spirv_cross::TypedID.414", align 4
  %79 = alloca %"class.spirv_cross::TypedID.413", align 4
  %80 = alloca i32, align 4
  %81 = alloca %"class.spirv_cross::TypedID.413", align 4
  %82 = alloca i32, align 4
  %83 = alloca %"class.spirv_cross::TypedID.413", align 4
  %84 = alloca i32, align 4
  %85 = alloca %"class.spirv_cross::TypedID.413", align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca %"class.spirv_cross::TypedID.350", align 4
  %89 = alloca %"class.spirv_cross::TypedID.413", align 4
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::allocator.71", align 1
  %92 = alloca i32, align 4
  %93 = alloca %"struct.spirv_cross::SPIRType", align 8
  %94 = alloca %"class.spirv_cross::TypedID.414", align 4
  %95 = alloca %"class.spirv_cross::TypedID.413", align 4
  %96 = alloca i32, align 4
  %97 = alloca %"class.spirv_cross::TypedID.413", align 4
  %98 = alloca i32, align 4
  %99 = alloca %"struct.spirv_cross::SPIRType", align 8
  %100 = alloca %"class.spirv_cross::TypedID.414", align 4
  %101 = alloca %"class.spirv_cross::TypedID.413", align 4
  %102 = alloca i32, align 4
  %103 = alloca %"class.spirv_cross::TypedID.413", align 4
  %104 = alloca i32, align 4
  %105 = alloca %"class.spirv_cross::TypedID.350", align 4
  %106 = alloca i32, align 4
  %107 = alloca %"struct.spirv_cross::SPIRType", align 8
  %108 = alloca i32, align 4
  %109 = alloca %"class.spirv_cross::TypedID.413", align 4
  %110 = alloca %"class.spirv_cross::TypedID.413", align 4
  %111 = alloca %"class.spirv_cross::TypedID.413", align 4
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::allocator.71", align 1
  %114 = alloca i32, align 4
  %115 = alloca %"struct.spirv_cross::SPIRType", align 8
  %116 = alloca %"class.spirv_cross::TypedID.414", align 4
  %117 = alloca %"class.spirv_cross::TypedID.413", align 4
  %118 = alloca i32, align 4
  %119 = alloca %"class.spirv_cross::TypedID.413", align 4
  %120 = alloca i32, align 4
  %121 = alloca %"struct.spirv_cross::SPIRType", align 8
  %122 = alloca %"struct.spirv_cross::SPIRType", align 8
  %123 = alloca %"class.spirv_cross::TypedID.414", align 4
  %124 = alloca %"class.spirv_cross::TypedID.413", align 4
  %125 = alloca i32, align 4
  %126 = alloca %"class.spirv_cross::TypedID.413", align 4
  %127 = alloca i32, align 4
  %128 = alloca %"struct.spirv_cross::SPIRType", align 8
  %129 = alloca %"class.spirv_cross::TypedID.414", align 4
  %130 = alloca %"class.spirv_cross::TypedID.413", align 4
  %131 = alloca i32, align 4
  %132 = alloca %"class.spirv_cross::TypedID.413", align 4
  %133 = alloca i32, align 4
  %134 = alloca %"struct.spirv_cross::SPIRType", align 8
  %135 = alloca %"class.spirv_cross::TypedID.414", align 4
  %136 = alloca %"class.spirv_cross::TypedID.413", align 4
  %137 = alloca i32, align 4
  %138 = alloca %"class.spirv_cross::TypedID.413", align 4
  %139 = alloca i32, align 4
  %140 = alloca %"struct.spirv_cross::SPIRType", align 8
  %141 = alloca %"struct.spirv_cross::SPIRType", align 8
  %142 = alloca %"class.spirv_cross::TypedID.414", align 4
  %143 = alloca %"class.spirv_cross::TypedID.413", align 4
  %144 = alloca i32, align 4
  %145 = alloca %"class.spirv_cross::TypedID.413", align 4
  %146 = alloca %"class.spirv_cross::TypedID.413", align 4
  %147 = alloca %"class.std::__cxx11::basic_string", align 8
  %148 = alloca %"class.std::allocator.71", align 1
  %149 = alloca %"class.spirv_cross::TypedID.413", align 4
  %150 = alloca %"class.spirv_cross::TypedID.413", align 4
  %151 = alloca %"class.spirv_cross::TypedID.413", align 4
  %152 = alloca %"class.std::__cxx11::basic_string", align 8
  %153 = alloca %"class.std::allocator.71", align 1
  %154 = alloca %"class.spirv_cross::TypedID.413", align 4
  %155 = alloca %"class.spirv_cross::TypedID.413", align 4
  %156 = alloca %"class.spirv_cross::TypedID.413", align 4
  %157 = alloca %"class.std::__cxx11::basic_string", align 8
  %158 = alloca %"class.std::allocator.71", align 1
  %159 = alloca %"class.spirv_cross::TypedID.413", align 4
  %160 = alloca %"class.spirv_cross::TypedID.413", align 4
  %161 = alloca %"class.spirv_cross::TypedID.413", align 4
  %162 = alloca %"class.std::__cxx11::basic_string", align 8
  %163 = alloca %"class.std::allocator.71", align 1
  %164 = alloca %"class.spirv_cross::TypedID.413", align 4
  %165 = alloca %"class.spirv_cross::TypedID.413", align 4
  %166 = alloca i8, align 1
  %167 = alloca %class.anon.422, align 8
  %168 = alloca i32, align 4
  %169 = alloca %"struct.spirv_cross::SPIRType", align 8
  %170 = alloca %"struct.spirv_cross::SPIRType", align 8
  %171 = alloca %"class.spirv_cross::TypedID.414", align 4
  %172 = alloca %"class.spirv_cross::TypedID.413", align 4
  %173 = alloca i32, align 4
  %174 = alloca %"class.spirv_cross::TypedID.413", align 4
  %175 = alloca i32, align 4
  %176 = alloca %"struct.spirv_cross::SPIRType", align 8
  %177 = alloca %"class.spirv_cross::TypedID.414", align 4
  %178 = alloca %"class.spirv_cross::TypedID.413", align 4
  %179 = alloca i32, align 4
  %180 = alloca %"class.spirv_cross::TypedID.413", align 4
  %181 = alloca %"class.std::__cxx11::basic_string", align 8
  %182 = alloca %"class.std::allocator.71", align 1
  %183 = alloca i32, align 4
  %184 = alloca %"struct.spirv_cross::SPIRType", align 8
  %185 = alloca %"struct.spirv_cross::SPIRType", align 8
  %186 = alloca %"class.spirv_cross::TypedID.414", align 4
  %187 = alloca %"class.spirv_cross::TypedID.413", align 4
  %188 = alloca i32, align 4
  %189 = alloca %"class.spirv_cross::TypedID.413", align 4
  %190 = alloca %"class.std::__cxx11::basic_string", align 8
  %191 = alloca %"class.std::allocator.71", align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2) #6
  %192 = getelementptr inbounds i8, ptr %0, i64 2680
  %193 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 19)
  %194 = zext i1 %193 to i8
  store i8 %194, ptr %2, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #6
  %195 = getelementptr inbounds i8, ptr %0, i64 11188
  %196 = load i8, ptr %195, align 4, !tbaa !9, !range !173, !noundef !174
  %197 = trunc nuw i8 %196 to i1
  br i1 %197, label %198, label %205

198:                                              ; preds = %1
  %199 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %200 = icmp eq i32 %199, 0
  br i1 %200, label %201, label %205

201:                                              ; preds = %198
  %202 = getelementptr inbounds i8, ptr %0, i64 10151
  %203 = load i8, ptr %202, align 1, !tbaa !175, !range !173, !noundef !174
  %204 = xor i8 %203, 1
  br label %205

205:                                              ; preds = %201, %198, %1
  %206 = phi i8 [ 0, %198 ], [ 0, %1 ], [ %204, %201 ]
  store i8 %206, ptr %3, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #6
  %207 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tesc_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %208 = zext i1 %207 to i8
  store i8 %208, ptr %4, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #6
  %209 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %210 = getelementptr inbounds i8, ptr %0, i64 10150
  %211 = load i8, ptr %210, align 2, !range !173
  %212 = select i1 %209, i8 %211, i8 0
  store i8 %212, ptr %5, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #6
  %213 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4416)
  br i1 %213, label %222, label %214

214:                                              ; preds = %205
  %215 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4417)
  br i1 %215, label %222, label %216

216:                                              ; preds = %214
  %217 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4418)
  br i1 %217, label %222, label %218

218:                                              ; preds = %216
  %219 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4419)
  br i1 %219, label %222, label %220

220:                                              ; preds = %218
  %221 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4420)
  br label %222

222:                                              ; preds = %220, %218, %216, %214, %205
  %223 = phi i1 [ true, %218 ], [ true, %216 ], [ true, %214 ], [ true, %205 ], [ %221, %220 ]
  %224 = zext i1 %223 to i8
  store i8 %224, ptr %6, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #6
  %225 = getelementptr inbounds i8, ptr %0, i64 10036
  %226 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137) %225)
  br i1 %226, label %231, label %227

227:                                              ; preds = %222
  %228 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4417)
  br i1 %228, label %231, label %229

229:                                              ; preds = %227
  %230 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4418)
  br label %231

231:                                              ; preds = %227, %229, %222
  %232 = phi i1 [ false, %222 ], [ true, %227 ], [ %230, %229 ]
  %233 = zext i1 %232 to i8
  store i8 %233, ptr %7, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  %234 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %250

236:                                              ; preds = %231
  %237 = getelementptr inbounds i8, ptr %0, i64 10125
  %238 = load i8, ptr %237, align 1, !tbaa !176, !range !173, !noundef !174
  %239 = trunc nuw i8 %238 to i1
  br i1 %239, label %250, label %240

240:                                              ; preds = %236
  %241 = getelementptr inbounds i8, ptr %0, i64 10124
  %242 = load i8, ptr %241, align 4, !tbaa !177, !range !173, !noundef !174
  %243 = trunc nuw i8 %242 to i1
  br i1 %243, label %244, label %250

244:                                              ; preds = %240
  %245 = getelementptr inbounds i8, ptr %0, i64 10123
  %246 = load i8, ptr %245, align 1, !tbaa !178, !range !173, !noundef !174
  %247 = trunc nuw i8 %246 to i1
  br i1 %247, label %250, label %248

248:                                              ; preds = %244
  %249 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4440)
  br label %250

250:                                              ; preds = %244, %248, %240, %236, %231
  %251 = phi i1 [ false, %240 ], [ false, %236 ], [ false, %231 ], [ true, %244 ], [ %249, %248 ]
  %252 = zext i1 %251 to i8
  store i8 %252, ptr %8, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #6
  %253 = getelementptr inbounds i8, ptr %0, i64 10126
  %254 = load i8, ptr %253, align 2, !tbaa !179, !range !173, !noundef !174
  %255 = trunc nuw i8 %254 to i1
  br i1 %255, label %256, label %263

256:                                              ; preds = %250
  %257 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %258 = icmp eq i32 %257, 5
  br i1 %258, label %259, label %263

259:                                              ; preds = %256
  %260 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 26)
  br i1 %260, label %263, label %261

261:                                              ; preds = %259
  %262 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 28)
  br label %263

263:                                              ; preds = %259, %261, %256, %250
  %264 = phi i1 [ false, %256 ], [ false, %250 ], [ true, %259 ], [ %262, %261 ]
  %265 = zext i1 %264 to i8
  store i8 %265, ptr %9, align 1, !tbaa !5
  %266 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %267 = icmp eq i32 %266, 0
  %268 = getelementptr inbounds i8, ptr %0, i64 10151
  %269 = load i8, ptr %268, align 1, !range !173
  %270 = trunc nuw i8 %269 to i1
  %271 = select i1 %267, i1 %270, i1 false
  br i1 %271, label %272, label %284

272:                                              ; preds = %263
  %273 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 5)
  br i1 %273, label %284, label %274

274:                                              ; preds = %272
  %275 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 42)
  br i1 %275, label %284, label %276

276:                                              ; preds = %274
  %277 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4424)
  br i1 %277, label %284, label %278

278:                                              ; preds = %276
  %279 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 6)
  br i1 %279, label %284, label %280

280:                                              ; preds = %278
  %281 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 43)
  br i1 %281, label %284, label %282

282:                                              ; preds = %280
  %283 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 4425)
  br label %284

284:                                              ; preds = %272, %274, %276, %278, %280, %282, %263
  %285 = phi i1 [ false, %263 ], [ true, %280 ], [ true, %278 ], [ true, %276 ], [ true, %274 ], [ true, %272 ], [ %283, %282 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #6
  %286 = getelementptr inbounds i8, ptr %0, i64 10154
  %287 = load i8, ptr %286, align 2, !tbaa !180, !range !173, !noundef !174
  %288 = trunc nuw i8 %287 to i1
  br i1 %288, label %289, label %291

289:                                              ; preds = %284
  %290 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 40)
  br i1 %290, label %293, label %291

291:                                              ; preds = %289, %284
  %292 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br label %293

293:                                              ; preds = %291, %289
  %294 = phi i1 [ true, %289 ], [ %292, %291 ]
  %295 = zext i1 %294 to i8
  store i8 %295, ptr %10, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #6
  %296 = load i8, ptr %286, align 2, !tbaa !180, !range !173, !noundef !174
  %297 = trunc nuw i8 %296 to i1
  br i1 %297, label %298, label %300

298:                                              ; preds = %293
  %299 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %192, i32 noundef 38)
  br label %300

300:                                              ; preds = %298, %293
  %301 = phi i1 [ false, %293 ], [ %299, %298 ]
  %302 = zext i1 %301 to i8
  store i8 %302, ptr %11, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  %303 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %304 = icmp eq i32 %303, 4
  br i1 %304, label %305, label %318

305:                                              ; preds = %300
  %306 = tail call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL33uses_explicit_early_fragment_testEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %306, label %318, label %307

307:                                              ; preds = %305
  %308 = getelementptr inbounds i8, ptr %0, i64 2880
  %309 = load i8, ptr %308, align 8, !tbaa !181, !range !173, !noundef !174
  %310 = trunc nuw i8 %309 to i1
  br i1 %310, label %311, label %318

311:                                              ; preds = %307
  %312 = getelementptr inbounds i8, ptr %0, i64 10117
  %313 = load i8, ptr %312, align 1, !tbaa !182, !range !173, !noundef !174
  %314 = trunc nuw i8 %313 to i1
  br i1 %314, label %315, label %318

315:                                              ; preds = %311
  %316 = getelementptr inbounds i8, ptr %0, i64 10172
  %317 = load i8, ptr %316, align 4, !tbaa !183, !range !173, !noundef !174
  br label %318

318:                                              ; preds = %315, %311, %307, %305, %300
  %319 = phi i8 [ 0, %311 ], [ 0, %307 ], [ 0, %305 ], [ 0, %300 ], [ %317, %315 ]
  store i8 %319, ptr %12, align 1, !tbaa !5
  %320 = getelementptr inbounds i8, ptr %0, i64 2880
  %321 = load i8, ptr %320, align 8, !tbaa !181, !range !173, !noundef !174
  %322 = trunc nuw i8 %321 to i1
  %brmerge376 = or i1 %193, %322
  %brmerge377 = or i1 %brmerge376, %223
  %323 = trunc nuw i8 %206 to i1
  %brmerge378 = or i1 %207, %323
  %or.cond382 = select i1 %brmerge377, i1 true, i1 %brmerge378
  br i1 %or.cond382, label %351, label %324

324:                                              ; preds = %318
  %325 = trunc nuw i8 %212 to i1
  %326 = or i1 %264, %325
  %327 = or i1 %326, %285
  %328 = or i1 %327, %271
  %or.cond = or i1 %328, %251
  br i1 %or.cond, label %351, label %329

329:                                              ; preds = %324
  %330 = getelementptr inbounds i8, ptr %0, i64 11194
  %331 = load i8, ptr %330, align 2, !tbaa !184, !range !173, !noundef !174
  %332 = trunc nuw i8 %331 to i1
  br i1 %332, label %351, label %333

333:                                              ; preds = %329
  %334 = getelementptr inbounds i8, ptr %0, i64 11192
  %335 = load i8, ptr %334, align 8, !tbaa !185, !range !173, !noundef !174
  %336 = trunc nuw i8 %335 to i1
  br i1 %336, label %351, label %337

337:                                              ; preds = %333
  %338 = getelementptr inbounds i8, ptr %0, i64 11193
  %339 = load i8, ptr %338, align 1, !tbaa !186, !range !173, !noundef !174
  %340 = trunc nuw i8 %339 to i1
  br i1 %340, label %351, label %341

341:                                              ; preds = %337
  %342 = getelementptr inbounds i8, ptr %0, i64 11195
  %343 = load i8, ptr %342, align 1, !tbaa !187, !range !173, !noundef !174
  %344 = trunc nuw i8 %343 to i1
  br i1 %344, label %351, label %345

345:                                              ; preds = %341
  %346 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL32has_additional_fixed_sample_maskEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %brmerge380 = or i1 %346, %294
  %brmerge381 = or i1 %brmerge380, %301
  br i1 %brmerge381, label %351, label %347

347:                                              ; preds = %345
  %348 = trunc nuw i8 %319 to i1
  br i1 %348, label %351, label %349

349:                                              ; preds = %347
  %350 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %350, label %351, label %1260

351:                                              ; preds = %345, %324, %318, %349, %347, %341, %337, %333, %329
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #6
  store i8 0, ptr %13, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #6
  store i8 0, ptr %14, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #6
  store i8 0, ptr %15, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #6
  store i8 0, ptr %16, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #6
  store i8 0, ptr %17, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #6
  store i8 0, ptr %18, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #6
  store i8 0, ptr %19, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #6
  store i8 0, ptr %20, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #6
  store i8 0, ptr %21, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #6
  store i8 0, ptr %22, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #6
  store i8 0, ptr %23, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #6
  store i8 0, ptr %24, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #6
  store i8 0, ptr %25, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #6
  store i8 0, ptr %26, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #6
  store i8 0, ptr %27, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #6
  store i8 0, ptr %28, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #6
  store i32 0, ptr %29, align 4, !tbaa !188
  %352 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 232, ptr nonnull %30) #6
  store ptr %0, ptr %30, align 8, !tbaa !189
  %353 = getelementptr inbounds i8, ptr %30, i64 8
  store ptr %12, ptr %353, align 8, !tbaa !191
  %354 = getelementptr inbounds i8, ptr %30, i64 16
  store ptr %28, ptr %354, align 8, !tbaa !191
  %355 = getelementptr inbounds i8, ptr %30, i64 24
  store ptr %13, ptr %355, align 8, !tbaa !191
  %356 = getelementptr inbounds i8, ptr %30, i64 32
  store ptr %24, ptr %356, align 8, !tbaa !191
  %357 = getelementptr inbounds i8, ptr %30, i64 40
  store ptr %23, ptr %357, align 8, !tbaa !191
  %358 = getelementptr inbounds i8, ptr %30, i64 48
  store ptr %2, ptr %358, align 8, !tbaa !191
  %359 = getelementptr inbounds i8, ptr %30, i64 56
  store ptr %14, ptr %359, align 8, !tbaa !191
  %360 = getelementptr inbounds i8, ptr %30, i64 64
  store ptr %3, ptr %360, align 8, !tbaa !191
  %361 = getelementptr inbounds i8, ptr %30, i64 72
  store ptr %15, ptr %361, align 8, !tbaa !191
  %362 = getelementptr inbounds i8, ptr %30, i64 80
  store ptr %16, ptr %362, align 8, !tbaa !191
  %363 = getelementptr inbounds i8, ptr %30, i64 88
  store ptr %17, ptr %363, align 8, !tbaa !191
  %364 = getelementptr inbounds i8, ptr %30, i64 96
  store ptr %18, ptr %364, align 8, !tbaa !191
  %365 = getelementptr inbounds i8, ptr %30, i64 104
  store ptr %4, ptr %365, align 8, !tbaa !191
  %366 = getelementptr inbounds i8, ptr %30, i64 112
  store ptr %19, ptr %366, align 8, !tbaa !191
  %367 = getelementptr inbounds i8, ptr %30, i64 120
  store ptr %5, ptr %367, align 8, !tbaa !191
  %368 = getelementptr inbounds i8, ptr %30, i64 128
  store ptr %20, ptr %368, align 8, !tbaa !191
  %369 = getelementptr inbounds i8, ptr %30, i64 136
  store ptr %6, ptr %369, align 8, !tbaa !191
  %370 = getelementptr inbounds i8, ptr %30, i64 144
  store ptr %21, ptr %370, align 8, !tbaa !191
  %371 = getelementptr inbounds i8, ptr %30, i64 152
  store ptr %7, ptr %371, align 8, !tbaa !191
  %372 = getelementptr inbounds i8, ptr %30, i64 160
  store ptr %22, ptr %372, align 8, !tbaa !191
  %373 = getelementptr inbounds i8, ptr %30, i64 168
  store ptr %8, ptr %373, align 8, !tbaa !191
  %374 = getelementptr inbounds i8, ptr %30, i64 176
  store ptr %25, ptr %374, align 8, !tbaa !191
  %375 = getelementptr inbounds i8, ptr %30, i64 184
  store ptr %10, ptr %375, align 8, !tbaa !191
  %376 = getelementptr inbounds i8, ptr %30, i64 192
  store ptr %26, ptr %376, align 8, !tbaa !191
  %377 = getelementptr inbounds i8, ptr %30, i64 200
  store ptr %11, ptr %377, align 8, !tbaa !191
  %378 = getelementptr inbounds i8, ptr %30, i64 208
  store ptr %27, ptr %378, align 8, !tbaa !191
  %379 = getelementptr inbounds i8, ptr %30, i64 216
  store ptr %9, ptr %379, align 8, !tbaa !191
  %380 = getelementptr inbounds i8, ptr %30, i64 224
  store ptr %29, ptr %380, align 8, !tbaa !191
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL23build_implicit_builtinsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %352, ptr noundef nonnull align 8 dereferenceable(232) %30)
  call void @llvm.lifetime.end.p0(i64 232, ptr nonnull %30) #6
  %381 = load i8, ptr %13, align 1, !tbaa !5, !range !173, !noundef !174
  %382 = trunc nuw i8 %381 to i1
  br i1 %382, label %383, label %396

383:                                              ; preds = %351
  %384 = getelementptr inbounds i8, ptr %0, i64 10123
  %385 = load i8, ptr %384, align 1, !tbaa !178, !range !173, !noundef !174
  %386 = trunc nuw i8 %385 to i1
  br i1 %386, label %387, label %.thread

387:                                              ; preds = %383
  %388 = load i8, ptr %23, align 1, !tbaa !5, !range !173, !noundef !174
  %389 = trunc nuw i8 %388 to i1
  br i1 %389, label %534, label %396

.thread:                                          ; preds = %383
  %390 = getelementptr inbounds i8, ptr %0, i64 10152
  %391 = load i8, ptr %390, align 8, !tbaa !192, !range !173, !noundef !174
  %392 = trunc nuw i8 %391 to i1
  br i1 %392, label %393, label %534

393:                                              ; preds = %.thread
  %394 = load i8, ptr %24, align 1, !tbaa !5, !range !173, !noundef !174
  %395 = trunc nuw i8 %394 to i1
  br i1 %395, label %534, label %396

396:                                              ; preds = %393, %387, %351
  %397 = getelementptr inbounds i8, ptr %0, i64 10140
  %398 = load i8, ptr %397, align 4, !tbaa !193, !range !173, !noundef !174
  %399 = trunc nuw i8 %398 to i1
  br i1 %399, label %534, label %400

400:                                              ; preds = %396
  %401 = load i8, ptr %320, align 8, !tbaa !181, !range !173, !noundef !174
  %402 = trunc nuw i8 %401 to i1
  br i1 %402, label %403, label %534

403:                                              ; preds = %400
  br i1 %382, label %444, label %404

404:                                              ; preds = %403
  %405 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #6
  %406 = add i32 %405, 1
  store i32 %406, ptr %31, align 4, !tbaa !188
  %407 = add i32 %405, 2
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %32) #6
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %32, i32 noundef 23)
  %408 = getelementptr inbounds i8, ptr %32, i64 16
  store i32 13, ptr %408, align 8, !tbaa !194
  %409 = getelementptr inbounds i8, ptr %32, i64 20
  store i32 32, ptr %409, align 4, !tbaa !207
  %410 = getelementptr inbounds i8, ptr %32, i64 24
  store i32 4, ptr %410, align 8, !tbaa !208
  %411 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %405, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %412 unwind label %433

412:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %33) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %33, ptr noundef nonnull align 8 dereferenceable(336) %32)
          to label %413 unwind label %435

413:                                              ; preds = %412
  %414 = getelementptr inbounds i8, ptr %33, i64 12
  store i32 32, ptr %414, align 4, !tbaa !209
  %415 = getelementptr inbounds i8, ptr %33, i64 124
  store i8 1, ptr %415, align 4, !tbaa !210
  %416 = getelementptr inbounds i8, ptr %33, i64 120
  %417 = load i32, ptr %416, align 8, !tbaa !211
  %418 = add i32 %417, 1
  store i32 %418, ptr %416, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %34, i32 noundef %405)
  %419 = getelementptr inbounds i8, ptr %33, i64 276
  %420 = load i32, ptr %34, align 4, !tbaa !188
  store i32 %420, ptr %419, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  %421 = getelementptr inbounds i8, ptr %33, i64 128
  store i32 1, ptr %421, align 8, !tbaa !212
  %422 = load i32, ptr %31, align 4, !tbaa !188
  %423 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %422, ptr noundef nonnull align 8 dereferenceable(336) %33)
          to label %424 unwind label %437

424:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef %405)
  %425 = getelementptr inbounds i8, ptr %423, i64 8
  %426 = load i32, ptr %35, align 4, !tbaa !188
  store i32 %426, ptr %425, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #6
  store i32 1, ptr %36, align 4, !tbaa !213
  %427 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %407, ptr noundef nonnull align 4 dereferenceable(4) %31, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %428 unwind label %439

428:                                              ; preds = %424
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %407)
  %429 = load i32, ptr %37, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %429, i32 noundef 11, i32 noundef 15)
          to label %430 unwind label %437

430:                                              ; preds = %428
  %431 = getelementptr inbounds i8, ptr %0, i64 9904
  store i32 %407, ptr %431, align 8, !tbaa !214
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 15, i32 noundef %407)
          to label %432 unwind label %437

432:                                              ; preds = %430
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %33) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %33) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %32) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  br label %444

433:                                              ; preds = %404
  %434 = landingpad { ptr, i32 }
          cleanup
  br label %443

435:                                              ; preds = %412
  %436 = landingpad { ptr, i32 }
          cleanup
  br label %442

437:                                              ; preds = %430, %428, %413
  %438 = landingpad { ptr, i32 }
          cleanup
  br label %441

439:                                              ; preds = %424
  %440 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  br label %441

441:                                              ; preds = %439, %437
  %.pn = phi { ptr, i32 } [ %438, %437 ], [ %440, %439 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %33) #6
  br label %442

442:                                              ; preds = %441, %435
  %.pn.pn = phi { ptr, i32 } [ %.pn, %441 ], [ %436, %435 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %33) #6
  br label %443

443:                                              ; preds = %442, %433
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %442 ], [ %434, %433 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %32) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  br label %1259

444:                                              ; preds = %432, %403
  %445 = load i8, ptr %24, align 1, !tbaa !5, !range !173, !noundef !174
  %446 = trunc nuw i8 %445 to i1
  br i1 %446, label %491, label %447

447:                                              ; preds = %444
  %448 = getelementptr inbounds i8, ptr %0, i64 10152
  %449 = load i8, ptr %448, align 8, !tbaa !192, !range !173, !noundef !174
  %450 = trunc nuw i8 %449 to i1
  br i1 %450, label %451, label %491

451:                                              ; preds = %447
  %452 = getelementptr inbounds i8, ptr %0, i64 10123
  %453 = load i8, ptr %452, align 1, !tbaa !178, !range !173, !noundef !174
  %454 = trunc nuw i8 %453 to i1
  br i1 %454, label %491, label %455

455:                                              ; preds = %451
  %456 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #6
  store i32 %456, ptr %38, align 4, !tbaa !188
  %457 = add i32 %456, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %39) #6
  %458 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %39, ptr noundef nonnull align 8 dereferenceable(336) %458)
  %459 = getelementptr inbounds i8, ptr %39, i64 12
  store i32 32, ptr %459, align 4, !tbaa !209
  %460 = getelementptr inbounds i8, ptr %39, i64 124
  store i8 1, ptr %460, align 4, !tbaa !210
  %461 = getelementptr inbounds i8, ptr %39, i64 120
  %462 = load i32, ptr %461, align 8, !tbaa !211
  %463 = add i32 %462, 1
  store i32 %463, ptr %461, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #6
  %464 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %465 unwind label %482

465:                                              ; preds = %455
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %464)
  %466 = getelementptr inbounds i8, ptr %39, i64 276
  %467 = load i32, ptr %40, align 4, !tbaa !188
  store i32 %467, ptr %466, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #6
  %468 = getelementptr inbounds i8, ptr %39, i64 128
  store i32 1, ptr %468, align 8, !tbaa !212
  %469 = load i32, ptr %38, align 4, !tbaa !188
  %470 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %469, ptr noundef nonnull align 8 dereferenceable(336) %39)
          to label %471 unwind label %484

471:                                              ; preds = %465
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #6
  %472 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %473 unwind label %486

473:                                              ; preds = %471
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %472)
  %474 = getelementptr inbounds i8, ptr %470, i64 8
  %475 = load i32, ptr %41, align 4, !tbaa !188
  store i32 %475, ptr %474, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #6
  store i32 1, ptr %42, align 4, !tbaa !213
  %476 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %457, ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %477 unwind label %488

477:                                              ; preds = %473
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %457)
  %478 = load i32, ptr %43, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %478, i32 noundef 11, i32 noundef 9)
          to label %479 unwind label %484

479:                                              ; preds = %477
  %480 = getelementptr inbounds i8, ptr %0, i64 9940
  store i32 %457, ptr %480, align 4, !tbaa !215
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 9, i32 noundef %457)
          to label %481 unwind label %484

481:                                              ; preds = %479
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #6
  br label %491

482:                                              ; preds = %455
  %483 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #6
  br label %490

484:                                              ; preds = %479, %477, %465
  %485 = landingpad { ptr, i32 }
          cleanup
  br label %490

486:                                              ; preds = %471
  %487 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #6
  br label %490

488:                                              ; preds = %473
  %489 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #6
  br label %490

490:                                              ; preds = %484, %486, %488, %482
  %.pn274.pn = phi { ptr, i32 } [ %483, %482 ], [ %485, %484 ], [ %489, %488 ], [ %487, %486 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #6
  br label %1259

491:                                              ; preds = %481, %451, %447, %444
  %492 = load i8, ptr %23, align 1, !tbaa !5, !range !173, !noundef !174
  %493 = trunc nuw i8 %492 to i1
  br i1 %493, label %534, label %494

494:                                              ; preds = %491
  %495 = getelementptr inbounds i8, ptr %0, i64 10123
  %496 = load i8, ptr %495, align 1, !tbaa !178, !range !173, !noundef !174
  %497 = trunc nuw i8 %496 to i1
  br i1 %497, label %498, label %534

498:                                              ; preds = %494
  %499 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #6
  store i32 %499, ptr %44, align 4, !tbaa !188
  %500 = add i32 %499, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %45) #6
  %501 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %45, ptr noundef nonnull align 8 dereferenceable(336) %501)
  %502 = getelementptr inbounds i8, ptr %45, i64 12
  store i32 32, ptr %502, align 4, !tbaa !209
  %503 = getelementptr inbounds i8, ptr %45, i64 124
  store i8 1, ptr %503, align 4, !tbaa !210
  %504 = getelementptr inbounds i8, ptr %45, i64 120
  %505 = load i32, ptr %504, align 8, !tbaa !211
  %506 = add i32 %505, 1
  store i32 %506, ptr %504, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #6
  %507 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %508 unwind label %525

508:                                              ; preds = %498
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %46, i32 noundef %507)
  %509 = getelementptr inbounds i8, ptr %45, i64 276
  %510 = load i32, ptr %46, align 4, !tbaa !188
  store i32 %510, ptr %509, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #6
  %511 = getelementptr inbounds i8, ptr %45, i64 128
  store i32 1, ptr %511, align 8, !tbaa !212
  %512 = load i32, ptr %44, align 4, !tbaa !188
  %513 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %512, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %514 unwind label %527

514:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #6
  %515 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %516 unwind label %529

516:                                              ; preds = %514
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %47, i32 noundef %515)
  %517 = getelementptr inbounds i8, ptr %513, i64 8
  %518 = load i32, ptr %47, align 4, !tbaa !188
  store i32 %518, ptr %517, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %48) #6
  store i32 1, ptr %48, align 4, !tbaa !213
  %519 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %500, ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %520 unwind label %531

520:                                              ; preds = %516
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %49, i32 noundef %500)
  %521 = load i32, ptr %49, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %521, i32 noundef 11, i32 noundef 4440)
          to label %522 unwind label %527

522:                                              ; preds = %520
  %523 = getelementptr inbounds i8, ptr %0, i64 9936
  store i32 %500, ptr %523, align 8, !tbaa !216
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 4440, i32 noundef %500)
          to label %524 unwind label %527

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

525:                                              ; preds = %498
  %526 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #6
  br label %533

527:                                              ; preds = %522, %520, %508
  %528 = landingpad { ptr, i32 }
          cleanup
  br label %533

529:                                              ; preds = %514
  %530 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #6
  br label %533

531:                                              ; preds = %516
  %532 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #6
  br label %533

533:                                              ; preds = %527, %529, %531, %525
  %.pn277.pn = phi { ptr, i32 } [ %526, %525 ], [ %528, %527 ], [ %532, %531 ], [ %530, %529 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %45) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #6
  br label %1259

534:                                              ; preds = %387, %.thread, %491, %494, %524, %400, %396, %393
  %535 = load i8, ptr %14, align 1, !tbaa !5, !range !173, !noundef !174
  %536 = trunc nuw i8 %535 to i1
  br i1 %536, label %580, label %537

537:                                              ; preds = %534
  %538 = load i8, ptr %2, align 1, !tbaa !5, !range !173, !noundef !174
  %539 = trunc nuw i8 %538 to i1
  br i1 %539, label %544, label %540

540:                                              ; preds = %537
  %541 = getelementptr inbounds i8, ptr %0, i64 11194
  %542 = load i8, ptr %541, align 2, !tbaa !184, !range !173, !noundef !174
  %543 = trunc nuw i8 %542 to i1
  br i1 %543, label %544, label %580

544:                                              ; preds = %540, %537
  %545 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %50) #6
  store i32 %545, ptr %50, align 4, !tbaa !188
  %546 = add i32 %545, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %51) #6
  %547 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %51, ptr noundef nonnull align 8 dereferenceable(336) %547)
  %548 = getelementptr inbounds i8, ptr %51, i64 12
  store i32 32, ptr %548, align 4, !tbaa !209
  %549 = getelementptr inbounds i8, ptr %51, i64 124
  store i8 1, ptr %549, align 4, !tbaa !210
  %550 = getelementptr inbounds i8, ptr %51, i64 120
  %551 = load i32, ptr %550, align 8, !tbaa !211
  %552 = add i32 %551, 1
  store i32 %552, ptr %550, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %52) #6
  %553 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %554 unwind label %571

554:                                              ; preds = %544
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %52, i32 noundef %553)
  %555 = getelementptr inbounds i8, ptr %51, i64 276
  %556 = load i32, ptr %52, align 4, !tbaa !188
  store i32 %556, ptr %555, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #6
  %557 = getelementptr inbounds i8, ptr %51, i64 128
  store i32 1, ptr %557, align 8, !tbaa !212
  %558 = load i32, ptr %50, align 4, !tbaa !188
  %559 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %558, ptr noundef nonnull align 8 dereferenceable(336) %51)
          to label %560 unwind label %573

560:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %53) #6
  %561 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %562 unwind label %575

562:                                              ; preds = %560
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %53, i32 noundef %561)
  %563 = getelementptr inbounds i8, ptr %559, i64 8
  %564 = load i32, ptr %53, align 4, !tbaa !188
  store i32 %564, ptr %563, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %53) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #6
  store i32 1, ptr %54, align 4, !tbaa !213
  %565 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %546, ptr noundef nonnull align 4 dereferenceable(4) %50, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %566 unwind label %577

566:                                              ; preds = %562
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %55, i32 noundef %546)
  %567 = load i32, ptr %55, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %567, i32 noundef 11, i32 noundef 18)
          to label %568 unwind label %573

568:                                              ; preds = %566
  %569 = getelementptr inbounds i8, ptr %0, i64 9908
  store i32 %546, ptr %569, align 4, !tbaa !217
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 18, i32 noundef %546)
          to label %570 unwind label %573

570:                                              ; preds = %568
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %51) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #6
  br label %580

571:                                              ; preds = %544
  %572 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #6
  br label %579

573:                                              ; preds = %568, %566, %554
  %574 = landingpad { ptr, i32 }
          cleanup
  br label %579

575:                                              ; preds = %560
  %576 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %53) #6
  br label %579

577:                                              ; preds = %562
  %578 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #6
  br label %579

579:                                              ; preds = %573, %575, %577, %571
  %.pn280.pn = phi { ptr, i32 } [ %572, %571 ], [ %574, %573 ], [ %578, %577 ], [ %576, %575 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %51) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #6
  br label %1259

580:                                              ; preds = %570, %540, %534
  %581 = load i8, ptr %3, align 1, !tbaa !5, !range !173, !noundef !174
  %582 = trunc nuw i8 %581 to i1
  br i1 %582, label %583, label %595

583:                                              ; preds = %580
  %584 = load i8, ptr %15, align 1, !tbaa !5, !range !173, !noundef !174
  %585 = trunc nuw i8 %584 to i1
  br i1 %585, label %586, label %607

586:                                              ; preds = %583
  %587 = load i8, ptr %16, align 1, !tbaa !5, !range !173, !noundef !174
  %588 = trunc nuw i8 %587 to i1
  br i1 %588, label %589, label %607

589:                                              ; preds = %586
  %590 = load i8, ptr %17, align 1, !tbaa !5, !range !173, !noundef !174
  %591 = trunc nuw i8 %590 to i1
  br i1 %591, label %592, label %607

592:                                              ; preds = %589
  %593 = load i8, ptr %18, align 1, !tbaa !5, !range !173, !noundef !174
  %594 = trunc nuw i8 %593 to i1
  br i1 %594, label %595, label %607

595:                                              ; preds = %592, %580
  %596 = load i8, ptr %8, align 1, !tbaa !5, !range !173, !noundef !174
  %597 = trunc nuw i8 %596 to i1
  br i1 %597, label %598, label %768

598:                                              ; preds = %595
  %599 = load i8, ptr %17, align 1, !tbaa !5, !range !173, !noundef !174
  %600 = trunc nuw i8 %599 to i1
  br i1 %600, label %601, label %607

601:                                              ; preds = %598
  %602 = load i8, ptr %18, align 1, !tbaa !5, !range !173, !noundef !174
  %603 = trunc nuw i8 %602 to i1
  br i1 %603, label %604, label %607

604:                                              ; preds = %601
  %605 = load i8, ptr %23, align 1, !tbaa !5, !range !173, !noundef !174
  %606 = trunc nuw i8 %605 to i1
  br i1 %606, label %768, label %607

607:                                              ; preds = %604, %601, %598, %592, %589, %586, %583
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %56) #6
  %608 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
  store i32 %608, ptr %56, align 4, !tbaa !188
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %57) #6
  %609 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %57, ptr noundef nonnull align 8 dereferenceable(336) %609)
  %610 = getelementptr inbounds i8, ptr %57, i64 12
  store i32 32, ptr %610, align 4, !tbaa !209
  %611 = getelementptr inbounds i8, ptr %57, i64 124
  store i8 1, ptr %611, align 4, !tbaa !210
  %612 = getelementptr inbounds i8, ptr %57, i64 120
  %613 = load i32, ptr %612, align 8, !tbaa !211
  %614 = add i32 %613, 1
  store i32 %614, ptr %612, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %58) #6
  %615 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %616 unwind label %640

616:                                              ; preds = %607
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %58, i32 noundef %615)
  %617 = getelementptr inbounds i8, ptr %57, i64 276
  %618 = load i32, ptr %58, align 4, !tbaa !188
  store i32 %618, ptr %617, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %58) #6
  %619 = getelementptr inbounds i8, ptr %57, i64 128
  store i32 1, ptr %619, align 8, !tbaa !212
  %620 = load i32, ptr %56, align 4, !tbaa !188
  %621 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %620, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %622 unwind label %642

622:                                              ; preds = %616
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %59) #6
  %623 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %624 unwind label %644

624:                                              ; preds = %622
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %59, i32 noundef %623)
  %625 = getelementptr inbounds i8, ptr %621, i64 8
  %626 = load i32, ptr %59, align 4, !tbaa !188
  store i32 %626, ptr %625, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #6
  %627 = load i8, ptr %3, align 1, !tbaa !5, !range !173, !noundef !174
  %628 = trunc nuw i8 %627 to i1
  br i1 %628, label %629, label %650

629:                                              ; preds = %624
  %630 = load i8, ptr %15, align 1, !tbaa !5, !range !173, !noundef !174
  %631 = trunc nuw i8 %630 to i1
  br i1 %631, label %650, label %632

632:                                              ; preds = %629
  %633 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %634 unwind label %646

634:                                              ; preds = %632
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %60) #6
  store i32 1, ptr %60, align 4, !tbaa !213
  %635 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %633, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %60)
          to label %636 unwind label %648

636:                                              ; preds = %634
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %61, i32 noundef %633)
  %637 = load i32, ptr %61, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %637, i32 noundef 11, i32 noundef 42)
          to label %638 unwind label %646

638:                                              ; preds = %636
  %639 = getelementptr inbounds i8, ptr %0, i64 9920
  store i32 %633, ptr %639, align 8, !tbaa !218
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 42, i32 noundef %633)
          to label %._crit_edge unwind label %646

._crit_edge:                                      ; preds = %638
  %.pre = load i8, ptr %3, align 1, !tbaa !5, !range !173
  br label %650

640:                                              ; preds = %607
  %641 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %58) #6
  br label %767

642:                                              ; preds = %616
  %643 = landingpad { ptr, i32 }
          cleanup
  br label %767

644:                                              ; preds = %622
  %645 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #6
  br label %767

646:                                              ; preds = %638, %636, %632
  %647 = landingpad { ptr, i32 }
          cleanup
  br label %767

648:                                              ; preds = %634
  %649 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #6
  br label %767

650:                                              ; preds = %._crit_edge, %629, %624
  %651 = phi i8 [ %.pre, %._crit_edge ], [ %627, %629 ], [ %627, %624 ]
  %652 = trunc nuw i8 %651 to i1
  br i1 %652, label %653, label %668

653:                                              ; preds = %650
  %654 = load i8, ptr %16, align 1, !tbaa !5, !range !173, !noundef !174
  %655 = trunc nuw i8 %654 to i1
  br i1 %655, label %668, label %656

656:                                              ; preds = %653
  %657 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %658 unwind label %664

658:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %62) #6
  store i32 1, ptr %62, align 4, !tbaa !213
  %659 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %657, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %62)
          to label %660 unwind label %666

660:                                              ; preds = %658
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %63, i32 noundef %657)
  %661 = load i32, ptr %63, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %661, i32 noundef 11, i32 noundef 4424)
          to label %662 unwind label %664

662:                                              ; preds = %660
  %663 = getelementptr inbounds i8, ptr %0, i64 9924
  store i32 %657, ptr %663, align 4, !tbaa !219
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 4424, i32 noundef %657)
          to label %668 unwind label %664

664:                                              ; preds = %662, %660, %656
  %665 = landingpad { ptr, i32 }
          cleanup
  br label %767

666:                                              ; preds = %658
  %667 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #6
  br label %767

668:                                              ; preds = %662, %653, %650
  %669 = load i8, ptr %17, align 1, !tbaa !5, !range !173, !noundef !174
  %670 = trunc nuw i8 %669 to i1
  br i1 %670, label %683, label %671

671:                                              ; preds = %668
  %672 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %673 unwind label %679

673:                                              ; preds = %671
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %64) #6
  store i32 1, ptr %64, align 4, !tbaa !213
  %674 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %672, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %64)
          to label %675 unwind label %681

675:                                              ; preds = %673
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %64) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %65, i32 noundef %672)
  %676 = load i32, ptr %65, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %676, i32 noundef 11, i32 noundef 43)
          to label %677 unwind label %679

677:                                              ; preds = %675
  %678 = getelementptr inbounds i8, ptr %0, i64 9928
  store i32 %672, ptr %678, align 8, !tbaa !220
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 43, i32 noundef %672)
          to label %683 unwind label %679

679:                                              ; preds = %677, %675, %671
  %680 = landingpad { ptr, i32 }
          cleanup
  br label %767

681:                                              ; preds = %673
  %682 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %64) #6
  br label %767

683:                                              ; preds = %677, %668
  %684 = load i8, ptr %18, align 1, !tbaa !5, !range !173, !noundef !174
  %685 = trunc nuw i8 %684 to i1
  br i1 %685, label %698, label %686

686:                                              ; preds = %683
  %687 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %688 unwind label %694

688:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %66) #6
  store i32 1, ptr %66, align 4, !tbaa !213
  %689 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %687, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %690 unwind label %696

690:                                              ; preds = %688
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %66) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %687)
  %691 = load i32, ptr %67, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %691, i32 noundef 11, i32 noundef 4425)
          to label %692 unwind label %694

692:                                              ; preds = %690
  %693 = getelementptr inbounds i8, ptr %0, i64 9932
  store i32 %687, ptr %693, align 4, !tbaa !221
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 4425, i32 noundef %687)
          to label %698 unwind label %694

694:                                              ; preds = %692, %690, %686
  %695 = landingpad { ptr, i32 }
          cleanup
  br label %767

696:                                              ; preds = %688
  %697 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %66) #6
  br label %767

698:                                              ; preds = %692, %683
  %699 = load i8, ptr %8, align 1, !tbaa !5, !range !173, !noundef !174
  %700 = trunc nuw i8 %699 to i1
  br i1 %700, label %701, label %748

701:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %68) #6
  %702 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
          to label %703 unwind label %731

703:                                              ; preds = %701
  store i32 %702, ptr %68, align 4, !tbaa !188
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %69) #6
  %704 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %705 unwind label %733

705:                                              ; preds = %703
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %69, ptr noundef nonnull align 8 dereferenceable(336) %704)
          to label %706 unwind label %733

706:                                              ; preds = %705
  store i32 32, ptr %610, align 4, !tbaa !209
  %707 = getelementptr inbounds i8, ptr %69, i64 124
  store i8 1, ptr %707, align 4, !tbaa !210
  %708 = getelementptr inbounds i8, ptr %69, i64 120
  %709 = load i32, ptr %708, align 8, !tbaa !211
  %710 = add i32 %709, 1
  store i32 %710, ptr %708, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %70) #6
  %711 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %712 unwind label %735

712:                                              ; preds = %706
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %70, i32 noundef %711)
  %713 = getelementptr inbounds i8, ptr %69, i64 276
  %714 = load i32, ptr %70, align 4, !tbaa !188
  store i32 %714, ptr %713, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %70) #6
  %715 = getelementptr inbounds i8, ptr %69, i64 128
  store i32 3, ptr %715, align 8, !tbaa !212
  %716 = load i32, ptr %68, align 4, !tbaa !188
  %717 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %716, ptr noundef nonnull align 8 dereferenceable(336) %69)
          to label %718 unwind label %737

718:                                              ; preds = %712
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %71) #6
  %719 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %720 unwind label %739

720:                                              ; preds = %718
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %71, i32 noundef %719)
  %721 = getelementptr inbounds i8, ptr %717, i64 8
  %722 = load i32, ptr %71, align 4, !tbaa !188
  store i32 %722, ptr %721, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #6
  %723 = load i32, ptr %68, align 4, !tbaa !188
  %724 = add i32 %723, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %72) #6
  store i32 3, ptr %72, align 4, !tbaa !213
  %725 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %724, ptr noundef nonnull align 4 dereferenceable(4) %68, ptr noundef nonnull align 4 dereferenceable(4) %72)
          to label %726 unwind label %741

726:                                              ; preds = %720
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %73, i32 noundef %724)
  %727 = load i32, ptr %73, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %727, i32 noundef 11, i32 noundef 9)
          to label %728 unwind label %743

728:                                              ; preds = %726
  %729 = getelementptr inbounds i8, ptr %0, i64 9940
  store i32 %724, ptr %729, align 4, !tbaa !215
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 3, i32 noundef 9, i32 noundef %724)
          to label %730 unwind label %743

730:                                              ; preds = %728
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %69) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %69) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %68) #6
  %.pre375 = load i8, ptr %8, align 1, !tbaa !5, !range !173
  br label %748

731:                                              ; preds = %701
  %732 = landingpad { ptr, i32 }
          cleanup
  br label %747

733:                                              ; preds = %705, %703
  %734 = landingpad { ptr, i32 }
          cleanup
  br label %746

735:                                              ; preds = %706
  %736 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %70) #6
  br label %745

737:                                              ; preds = %712
  %738 = landingpad { ptr, i32 }
          cleanup
  br label %745

739:                                              ; preds = %718
  %740 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #6
  br label %745

741:                                              ; preds = %720
  %742 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #6
  br label %745

743:                                              ; preds = %728, %726
  %744 = landingpad { ptr, i32 }
          cleanup
  br label %745

745:                                              ; preds = %737, %739, %743, %741, %735
  %.pn291.pn.pn = phi { ptr, i32 } [ %736, %735 ], [ %740, %739 ], [ %738, %737 ], [ %744, %743 ], [ %742, %741 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %69) #6
  br label %746

746:                                              ; preds = %745, %733
  %.pn291.pn.pn.pn = phi { ptr, i32 } [ %.pn291.pn.pn, %745 ], [ %734, %733 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %69) #6
  br label %747

747:                                              ; preds = %746, %731
  %.pn291.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn291.pn.pn.pn, %746 ], [ %732, %731 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %68) #6
  br label %767

748:                                              ; preds = %730, %698
  %749 = phi i8 [ %.pre375, %730 ], [ %699, %698 ]
  %750 = trunc nuw i8 %749 to i1
  br i1 %750, label %751, label %766

751:                                              ; preds = %748
  %752 = load i8, ptr %23, align 1, !tbaa !5, !range !173, !noundef !174
  %753 = trunc nuw i8 %752 to i1
  br i1 %753, label %766, label %754

754:                                              ; preds = %751
  %755 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %756 unwind label %762

756:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %74) #6
  store i32 1, ptr %74, align 4, !tbaa !213
  %757 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %755, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %74)
          to label %758 unwind label %764

758:                                              ; preds = %756
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %74) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %75, i32 noundef %755)
  %759 = load i32, ptr %75, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %759, i32 noundef 11, i32 noundef 4440)
          to label %760 unwind label %762

760:                                              ; preds = %758
  %761 = getelementptr inbounds i8, ptr %0, i64 9936
  store i32 %755, ptr %761, align 8, !tbaa !216
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 4440, i32 noundef %755)
          to label %766 unwind label %762

762:                                              ; preds = %760, %758, %754
  %763 = landingpad { ptr, i32 }
          cleanup
  br label %767

764:                                              ; preds = %756
  %765 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %74) #6
  br label %767

766:                                              ; preds = %760, %751, %748
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br label %768

767:                                              ; preds = %642, %644, %747, %648, %646, %666, %664, %681, %679, %696, %694, %764, %762, %640
  %.pn297.pn.pn = phi { ptr, i32 } [ %641, %640 ], [ %.pn291.pn.pn.pn.pn, %747 ], [ %645, %644 ], [ %643, %642 ], [ %647, %646 ], [ %649, %648 ], [ %665, %664 ], [ %667, %666 ], [ %680, %679 ], [ %682, %681 ], [ %695, %694 ], [ %697, %696 ], [ %763, %762 ], [ %765, %764 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #6
  br label %1259

768:                                              ; preds = %766, %604, %595
  %769 = load i8, ptr %4, align 1, !tbaa !5, !range !173, !noundef !174
  %770 = trunc nuw i8 %769 to i1
  br i1 %770, label %771, label %781

771:                                              ; preds = %768
  %772 = getelementptr inbounds i8, ptr %0, i64 10149
  %773 = load i8, ptr %772, align 1, !tbaa !222, !range !173, !noundef !174
  %774 = trunc nuw i8 %773 to i1
  br i1 %774, label %788, label %775

775:                                              ; preds = %771
  %776 = load i8, ptr %19, align 1, !tbaa !5, !range !173, !noundef !174
  %777 = trunc nuw i8 %776 to i1
  br i1 %777, label %778, label %788

778:                                              ; preds = %775
  %779 = load i8, ptr %20, align 1, !tbaa !5, !range !173, !noundef !174
  %780 = trunc nuw i8 %779 to i1
  br i1 %780, label %781, label %788

781:                                              ; preds = %778, %768
  %782 = load i8, ptr %5, align 1, !tbaa !5, !range !173, !noundef !174
  %783 = trunc nuw i8 %782 to i1
  br i1 %783, label %784, label %787

784:                                              ; preds = %781
  %785 = load i8, ptr %20, align 1, !tbaa !5, !range !173, !noundef !174
  %786 = trunc nuw i8 %785 to i1
  %.not = xor i1 %786, true
  %brmerge365 = or i1 %271, %.not
  br i1 %brmerge365, label %788, label %901

787:                                              ; preds = %781
  br i1 %271, label %788, label %901

788:                                              ; preds = %784, %787, %778, %775, %771
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %76) #6
  %789 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
  store i32 %789, ptr %76, align 4, !tbaa !188
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %77) #6
  %790 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %77, ptr noundef nonnull align 8 dereferenceable(336) %790)
  %791 = getelementptr inbounds i8, ptr %77, i64 12
  store i32 32, ptr %791, align 4, !tbaa !209
  %792 = getelementptr inbounds i8, ptr %77, i64 124
  store i8 1, ptr %792, align 4, !tbaa !210
  %793 = getelementptr inbounds i8, ptr %77, i64 120
  %794 = load i32, ptr %793, align 8, !tbaa !211
  %795 = add i32 %794, 1
  store i32 %795, ptr %793, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %78) #6
  %796 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %797 unwind label %823

797:                                              ; preds = %788
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %78, i32 noundef %796)
  %798 = getelementptr inbounds i8, ptr %77, i64 276
  %799 = load i32, ptr %78, align 4, !tbaa !188
  store i32 %799, ptr %798, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %78) #6
  %800 = getelementptr inbounds i8, ptr %77, i64 128
  store i32 1, ptr %800, align 8, !tbaa !212
  %801 = load i32, ptr %76, align 4, !tbaa !188
  %802 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %801, ptr noundef nonnull align 8 dereferenceable(336) %77)
          to label %803 unwind label %825

803:                                              ; preds = %797
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %79) #6
  %804 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %805 unwind label %827

805:                                              ; preds = %803
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %79, i32 noundef %804)
  %806 = getelementptr inbounds i8, ptr %802, i64 8
  %807 = load i32, ptr %79, align 4, !tbaa !188
  store i32 %807, ptr %806, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %79) #6
  %808 = load i8, ptr %4, align 1, !tbaa !5, !range !173, !noundef !174
  %809 = trunc nuw i8 %808 to i1
  br i1 %809, label %810, label %814

810:                                              ; preds = %805
  %811 = getelementptr inbounds i8, ptr %0, i64 10149
  %812 = load i8, ptr %811, align 1, !tbaa !222, !range !173, !noundef !174
  %813 = trunc nuw i8 %812 to i1
  %brmerge366 = or i1 %271, %813
  br i1 %brmerge366, label %815, label %833

814:                                              ; preds = %805
  br i1 %271, label %815, label %848

815:                                              ; preds = %810, %814
  %816 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %817 unwind label %829

817:                                              ; preds = %815
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %80) #6
  store i32 1, ptr %80, align 4, !tbaa !213
  %818 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %816, ptr noundef nonnull align 4 dereferenceable(4) %76, ptr noundef nonnull align 4 dereferenceable(4) %80)
          to label %819 unwind label %831

819:                                              ; preds = %817
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %80) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %81, i32 noundef %816)
  %820 = load i32, ptr %81, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %820, i32 noundef 11, i32 noundef 28)
          to label %821 unwind label %829

821:                                              ; preds = %819
  %822 = getelementptr inbounds i8, ptr %0, i64 9944
  store i32 %816, ptr %822, align 8, !tbaa !223
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 28, i32 noundef %816)
          to label %848 unwind label %829

823:                                              ; preds = %788
  %824 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %78) #6
  br label %900

825:                                              ; preds = %797
  %826 = landingpad { ptr, i32 }
          cleanup
  br label %900

827:                                              ; preds = %803
  %828 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %79) #6
  br label %900

829:                                              ; preds = %821, %819, %815
  %830 = landingpad { ptr, i32 }
          cleanup
  br label %900

831:                                              ; preds = %817
  %832 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %80) #6
  br label %900

833:                                              ; preds = %810
  %834 = load i8, ptr %19, align 1, !tbaa !5, !range !173, !noundef !174
  %835 = trunc nuw i8 %834 to i1
  br i1 %835, label %848, label %836

836:                                              ; preds = %833
  %837 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %838 unwind label %844

838:                                              ; preds = %836
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %82) #6
  store i32 1, ptr %82, align 4, !tbaa !213
  %839 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %837, ptr noundef nonnull align 4 dereferenceable(4) %76, ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %840 unwind label %846

840:                                              ; preds = %838
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %82) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %83, i32 noundef %837)
  %841 = load i32, ptr %83, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %841, i32 noundef 11, i32 noundef 8)
          to label %842 unwind label %844

842:                                              ; preds = %840
  %843 = getelementptr inbounds i8, ptr %0, i64 9944
  store i32 %837, ptr %843, align 8, !tbaa !223
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 8, i32 noundef %837)
          to label %848 unwind label %844

844:                                              ; preds = %842, %840, %836
  %845 = landingpad { ptr, i32 }
          cleanup
  br label %900

846:                                              ; preds = %838
  %847 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %82) #6
  br label %900

848:                                              ; preds = %814, %842, %821, %833
  %849 = load i8, ptr %4, align 1, !tbaa !5, !range !173, !noundef !174
  %850 = trunc nuw i8 %849 to i1
  br i1 %850, label %854, label %851

851:                                              ; preds = %848
  %852 = load i8, ptr %5, align 1, !tbaa !5, !range !173, !noundef !174
  %853 = trunc nuw i8 %852 to i1
  br i1 %853, label %854, label %869

854:                                              ; preds = %851, %848
  %855 = load i8, ptr %20, align 1, !tbaa !5, !range !173, !noundef !174
  %856 = trunc nuw i8 %855 to i1
  br i1 %856, label %869, label %857

857:                                              ; preds = %854
  %858 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %859 unwind label %865

859:                                              ; preds = %857
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %84) #6
  store i32 1, ptr %84, align 4, !tbaa !213
  %860 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %858, ptr noundef nonnull align 4 dereferenceable(4) %76, ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %861 unwind label %867

861:                                              ; preds = %859
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %84) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %85, i32 noundef %858)
  %862 = load i32, ptr %85, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %862, i32 noundef 11, i32 noundef 7)
          to label %863 unwind label %865

863:                                              ; preds = %861
  %864 = getelementptr inbounds i8, ptr %0, i64 9948
  store i32 %858, ptr %864, align 4, !tbaa !224
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 7, i32 noundef %858)
          to label %869 unwind label %865

865:                                              ; preds = %863, %861, %857
  %866 = landingpad { ptr, i32 }
          cleanup
  br label %900

867:                                              ; preds = %859
  %868 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %84) #6
  br label %900

869:                                              ; preds = %863, %854, %851
  br i1 %271, label %870, label %899

870:                                              ; preds = %869
  %871 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
          to label %872 unwind label %887

872:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %86) #6
  %873 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %874 unwind label %889

874:                                              ; preds = %872
  %875 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %873, i32 noundef 3, i32 noundef 0)
          to label %876 unwind label %889

876:                                              ; preds = %874
  store i32 %875, ptr %86, align 4, !tbaa !188
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %87) #6
  store i32 1, ptr %87, align 4, !tbaa !213
  %877 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %871, ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 4 dereferenceable(4) %87)
          to label %878 unwind label %891

878:                                              ; preds = %876
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %87) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %86) #6
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %871, i32 noundef 13, i32 noundef 0)
          to label %879 unwind label %887

879:                                              ; preds = %878
  %880 = invoke noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %881 unwind label %887

881:                                              ; preds = %879
  %882 = getelementptr inbounds i8, ptr %880, i64 72
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %88) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %88, i32 noundef %871)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %882, ptr noundef nonnull align 4 dereferenceable(4) %88) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %88) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %89, i32 noundef %871)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %90) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %91) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %91) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef nonnull @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %91)
          to label %883 unwind label %894

883:                                              ; preds = %881
  %884 = load i32, ptr %89, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %884, ptr noundef nonnull align 8 dereferenceable(32) %90)
          to label %885 unwind label %896

885:                                              ; preds = %883
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %91) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %91) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #6
  %886 = getelementptr inbounds i8, ptr %0, i64 9964
  store i32 %871, ptr %886, align 4, !tbaa !225
  br label %899

887:                                              ; preds = %879, %878, %870
  %888 = landingpad { ptr, i32 }
          cleanup
  br label %900

889:                                              ; preds = %874, %872
  %890 = landingpad { ptr, i32 }
          cleanup
  br label %893

891:                                              ; preds = %876
  %892 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %87) #6
  br label %893

893:                                              ; preds = %891, %889
  %.pn307 = phi { ptr, i32 } [ %892, %891 ], [ %890, %889 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %86) #6
  br label %900

894:                                              ; preds = %881
  %895 = landingpad { ptr, i32 }
          cleanup
  br label %898

896:                                              ; preds = %883
  %897 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #6
  br label %898

898:                                              ; preds = %896, %894
  %.pn309 = phi { ptr, i32 } [ %897, %896 ], [ %895, %894 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %91) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %91) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #6
  br label %900

899:                                              ; preds = %885, %869
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %77) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %77) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %76) #6
  br label %901

900:                                              ; preds = %825, %827, %831, %829, %846, %844, %867, %865, %898, %893, %887, %823
  %.pn309.pn.pn.pn = phi { ptr, i32 } [ %824, %823 ], [ %828, %827 ], [ %826, %825 ], [ %830, %829 ], [ %832, %831 ], [ %845, %844 ], [ %847, %846 ], [ %866, %865 ], [ %868, %867 ], [ %.pn309, %898 ], [ %888, %887 ], [ %.pn307, %893 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %77) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %77) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %76) #6
  br label %1259

901:                                              ; preds = %784, %899, %787
  %902 = load i8, ptr %21, align 1, !tbaa !5, !range !173, !noundef !174
  %903 = trunc nuw i8 %902 to i1
  br i1 %903, label %947, label %904

904:                                              ; preds = %901
  %905 = load i8, ptr %6, align 1, !tbaa !5, !range !173, !noundef !174
  %906 = trunc nuw i8 %905 to i1
  br i1 %906, label %911, label %907

907:                                              ; preds = %904
  %908 = getelementptr inbounds i8, ptr %0, i64 11192
  %909 = load i8, ptr %908, align 8, !tbaa !185, !range !173, !noundef !174
  %910 = trunc nuw i8 %909 to i1
  br i1 %910, label %911, label %947

911:                                              ; preds = %907, %904
  %912 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %92) #6
  store i32 %912, ptr %92, align 4, !tbaa !188
  %913 = add i32 %912, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %93) #6
  %914 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %93, ptr noundef nonnull align 8 dereferenceable(336) %914)
  %915 = getelementptr inbounds i8, ptr %93, i64 12
  store i32 32, ptr %915, align 4, !tbaa !209
  %916 = getelementptr inbounds i8, ptr %93, i64 124
  store i8 1, ptr %916, align 4, !tbaa !210
  %917 = getelementptr inbounds i8, ptr %93, i64 120
  %918 = load i32, ptr %917, align 8, !tbaa !211
  %919 = add i32 %918, 1
  store i32 %919, ptr %917, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %94) #6
  %920 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %921 unwind label %938

921:                                              ; preds = %911
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %94, i32 noundef %920)
  %922 = getelementptr inbounds i8, ptr %93, i64 276
  %923 = load i32, ptr %94, align 4, !tbaa !188
  store i32 %923, ptr %922, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %94) #6
  %924 = getelementptr inbounds i8, ptr %93, i64 128
  store i32 1, ptr %924, align 8, !tbaa !212
  %925 = load i32, ptr %92, align 4, !tbaa !188
  %926 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %925, ptr noundef nonnull align 8 dereferenceable(336) %93)
          to label %927 unwind label %940

927:                                              ; preds = %921
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %95) #6
  %928 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %929 unwind label %942

929:                                              ; preds = %927
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %95, i32 noundef %928)
  %930 = getelementptr inbounds i8, ptr %926, i64 8
  %931 = load i32, ptr %95, align 4, !tbaa !188
  store i32 %931, ptr %930, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %95) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %96) #6
  store i32 1, ptr %96, align 4, !tbaa !213
  %932 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %913, ptr noundef nonnull align 4 dereferenceable(4) %92, ptr noundef nonnull align 4 dereferenceable(4) %96)
          to label %933 unwind label %944

933:                                              ; preds = %929
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %96) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef %913)
  %934 = load i32, ptr %97, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %934, i32 noundef 11, i32 noundef 41)
          to label %935 unwind label %940

935:                                              ; preds = %933
  %936 = getelementptr inbounds i8, ptr %0, i64 9952
  store i32 %913, ptr %936, align 8, !tbaa !226
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 41, i32 noundef %913)
          to label %937 unwind label %940

937:                                              ; preds = %935
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %93) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %93) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %92) #6
  br label %947

938:                                              ; preds = %911
  %939 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %94) #6
  br label %946

940:                                              ; preds = %935, %933, %921
  %941 = landingpad { ptr, i32 }
          cleanup
  br label %946

942:                                              ; preds = %927
  %943 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %95) #6
  br label %946

944:                                              ; preds = %929
  %945 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %96) #6
  br label %946

946:                                              ; preds = %940, %942, %944, %938
  %.pn314.pn = phi { ptr, i32 } [ %939, %938 ], [ %941, %940 ], [ %945, %944 ], [ %943, %942 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %93) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %93) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %92) #6
  br label %1259

947:                                              ; preds = %937, %907, %901
  %948 = load i8, ptr %22, align 1, !tbaa !5, !range !173, !noundef !174
  %949 = trunc nuw i8 %948 to i1
  br i1 %949, label %993, label %950

950:                                              ; preds = %947
  %951 = load i8, ptr %7, align 1, !tbaa !5, !range !173, !noundef !174
  %952 = trunc nuw i8 %951 to i1
  br i1 %952, label %957, label %953

953:                                              ; preds = %950
  %954 = getelementptr inbounds i8, ptr %0, i64 11193
  %955 = load i8, ptr %954, align 1, !tbaa !186, !range !173, !noundef !174
  %956 = trunc nuw i8 %955 to i1
  br i1 %956, label %957, label %993

957:                                              ; preds = %953, %950
  %958 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %98) #6
  store i32 %958, ptr %98, align 4, !tbaa !188
  %959 = add i32 %958, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %99) #6
  %960 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %99, ptr noundef nonnull align 8 dereferenceable(336) %960)
  %961 = getelementptr inbounds i8, ptr %99, i64 12
  store i32 32, ptr %961, align 4, !tbaa !209
  %962 = getelementptr inbounds i8, ptr %99, i64 124
  store i8 1, ptr %962, align 4, !tbaa !210
  %963 = getelementptr inbounds i8, ptr %99, i64 120
  %964 = load i32, ptr %963, align 8, !tbaa !211
  %965 = add i32 %964, 1
  store i32 %965, ptr %963, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %100) #6
  %966 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %967 unwind label %984

967:                                              ; preds = %957
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %100, i32 noundef %966)
  %968 = getelementptr inbounds i8, ptr %99, i64 276
  %969 = load i32, ptr %100, align 4, !tbaa !188
  store i32 %969, ptr %968, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %100) #6
  %970 = getelementptr inbounds i8, ptr %99, i64 128
  store i32 1, ptr %970, align 8, !tbaa !212
  %971 = load i32, ptr %98, align 4, !tbaa !188
  %972 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %971, ptr noundef nonnull align 8 dereferenceable(336) %99)
          to label %973 unwind label %986

973:                                              ; preds = %967
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %101) #6
  %974 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %975 unwind label %988

975:                                              ; preds = %973
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %101, i32 noundef %974)
  %976 = getelementptr inbounds i8, ptr %972, i64 8
  %977 = load i32, ptr %101, align 4, !tbaa !188
  store i32 %977, ptr %976, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %101) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %102) #6
  store i32 1, ptr %102, align 4, !tbaa !213
  %978 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %959, ptr noundef nonnull align 4 dereferenceable(4) %98, ptr noundef nonnull align 4 dereferenceable(4) %102)
          to label %979 unwind label %990

979:                                              ; preds = %975
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %102) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %103, i32 noundef %959)
  %980 = load i32, ptr %103, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %980, i32 noundef 11, i32 noundef 36)
          to label %981 unwind label %986

981:                                              ; preds = %979
  %982 = getelementptr inbounds i8, ptr %0, i64 9956
  store i32 %959, ptr %982, align 4, !tbaa !227
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 36, i32 noundef %959)
          to label %983 unwind label %986

983:                                              ; preds = %981
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %99) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %99) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %98) #6
  br label %993

984:                                              ; preds = %957
  %985 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %100) #6
  br label %992

986:                                              ; preds = %981, %979, %967
  %987 = landingpad { ptr, i32 }
          cleanup
  br label %992

988:                                              ; preds = %973
  %989 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %101) #6
  br label %992

990:                                              ; preds = %975
  %991 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %102) #6
  br label %992

992:                                              ; preds = %986, %988, %990, %984
  %.pn317.pn = phi { ptr, i32 } [ %985, %984 ], [ %987, %986 ], [ %991, %990 ], [ %989, %988 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %99) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %99) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %98) #6
  br label %1259

993:                                              ; preds = %983, %953, %947
  %994 = load i8, ptr %9, align 1, !tbaa !5, !range !173, !noundef !174
  %995 = trunc nuw i8 %994 to i1
  %brmerge367 = or i1 %285, %995
  br i1 %brmerge367, label %996, label %1043

996:                                              ; preds = %993
  %997 = load i32, ptr %29, align 4, !tbaa !188
  %998 = icmp eq i32 %997, 0
  br i1 %998, label %999, label %1002

999:                                              ; preds = %996
  %1000 = call noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %1001 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1000, i32 noundef 3, i32 noundef 0)
  store i32 %1001, ptr %29, align 4, !tbaa !188
  br label %1002

1002:                                             ; preds = %999, %996
  %1003 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %225, i32 noundef 1, i32 noundef 2, i32 noundef 0)
  br i1 %1003, label %1004, label %1009

1004:                                             ; preds = %1002
  %1005 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %104) #6
  store i32 1, ptr %104, align 4, !tbaa !213
  %1006 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1005, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %104)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %104) #6
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1005, i32 noundef 11, i32 noundef 0)
  %1007 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %1008 = getelementptr inbounds i8, ptr %1007, i64 72
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %105) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %105, i32 noundef %1005)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1008, ptr noundef nonnull align 4 dereferenceable(4) %105) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %105) #6
  br label %1033

1009:                                             ; preds = %1002
  %1010 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %106) #6
  %1011 = add i32 %1010, 1
  store i32 %1011, ptr %106, align 4, !tbaa !188
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %107) #6
  %1012 = load i32, ptr %29, align 4, !tbaa !188
  %1013 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1012)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %107, ptr noundef nonnull align 8 dereferenceable(336) %1013)
  %1014 = getelementptr inbounds i8, ptr %107, i64 128
  store i32 2, ptr %1014, align 8, !tbaa !212
  %1015 = load i32, ptr %106, align 4, !tbaa !188
  %1016 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1015, ptr noundef nonnull align 8 dereferenceable(336) %107)
          to label %1017 unwind label %1028

1017:                                             ; preds = %1009
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %108) #6
  store i32 2, ptr %108, align 4, !tbaa !213
  %1018 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1010, ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 4 dereferenceable(4) %108)
          to label %1019 unwind label %1030

1019:                                             ; preds = %1017
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %108) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %109, i32 noundef %1010)
  %1020 = load i32, ptr %109, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1020, i32 noundef 34, i32 noundef -6)
          to label %1021 unwind label %1028

1021:                                             ; preds = %1019
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %110, i32 noundef %1010)
  %1022 = getelementptr inbounds i8, ptr %0, i64 10060
  %1023 = load i32, ptr %1022, align 4, !tbaa !228
  %1024 = load i32, ptr %110, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1024, i32 noundef 33, i32 noundef %1023)
          to label %1025 unwind label %1028

1025:                                             ; preds = %1021
  %1026 = load i32, ptr %1022, align 4, !tbaa !228
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1010, i32 noundef 6, i32 noundef %1026)
          to label %1027 unwind label %1028

1027:                                             ; preds = %1025
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %107) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %107) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %106) #6
  br label %1033

1028:                                             ; preds = %1025, %1021, %1019, %1009
  %1029 = landingpad { ptr, i32 }
          cleanup
  br label %1032

1030:                                             ; preds = %1017
  %1031 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %108) #6
  br label %1032

1032:                                             ; preds = %1030, %1028
  %.pn320 = phi { ptr, i32 } [ %1029, %1028 ], [ %1031, %1030 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %107) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %107) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %106) #6
  br label %1259

1033:                                             ; preds = %1027, %1004
  %.0269 = phi i32 [ %1005, %1004 ], [ %1010, %1027 ]
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %111, i32 noundef %.0269)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %112) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %113) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %113)
          to label %1034 unwind label %1038

1034:                                             ; preds = %1033
  %1035 = load i32, ptr %111, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1035, ptr noundef nonnull align 8 dereferenceable(32) %112)
          to label %1036 unwind label %1040

1036:                                             ; preds = %1034
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %113) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #6
  %1037 = getelementptr inbounds i8, ptr %0, i64 9960
  store i32 %.0269, ptr %1037, align 8, !tbaa !229
  br label %1043

1038:                                             ; preds = %1033
  %1039 = landingpad { ptr, i32 }
          cleanup
  br label %1042

1040:                                             ; preds = %1034
  %1041 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #6
  br label %1042

1042:                                             ; preds = %1040, %1038
  %.pn322 = phi { ptr, i32 } [ %1041, %1040 ], [ %1039, %1038 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %113) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #6
  br label %1259

1043:                                             ; preds = %993, %1036
  %1044 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL32has_additional_fixed_sample_maskEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1044, label %1045, label %1085

1045:                                             ; preds = %1043
  %1046 = getelementptr inbounds i8, ptr %0, i64 10032
  %1047 = load i8, ptr %1046, align 8, !tbaa !230, !range !173, !noundef !174
  %1048 = trunc nuw i8 %1047 to i1
  br i1 %1048, label %1085, label %1049

1049:                                             ; preds = %1045
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %114) #6
  %1050 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  store i32 %1050, ptr %114, align 4, !tbaa !188
  %1051 = add i32 %1050, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %115) #6
  %1052 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %115, ptr noundef nonnull align 8 dereferenceable(336) %1052)
  %1053 = getelementptr inbounds i8, ptr %115, i64 12
  store i32 32, ptr %1053, align 4, !tbaa !209
  %1054 = getelementptr inbounds i8, ptr %115, i64 124
  store i8 1, ptr %1054, align 4, !tbaa !210
  %1055 = getelementptr inbounds i8, ptr %115, i64 120
  %1056 = load i32, ptr %1055, align 8, !tbaa !211
  %1057 = add i32 %1056, 1
  store i32 %1057, ptr %1055, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %116) #6
  %1058 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %1059 unwind label %1076

1059:                                             ; preds = %1049
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %116, i32 noundef %1058)
  %1060 = getelementptr inbounds i8, ptr %115, i64 276
  %1061 = load i32, ptr %116, align 4, !tbaa !188
  store i32 %1061, ptr %1060, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %116) #6
  %1062 = getelementptr inbounds i8, ptr %115, i64 128
  store i32 3, ptr %1062, align 8, !tbaa !212
  %1063 = load i32, ptr %114, align 4, !tbaa !188
  %1064 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1063, ptr noundef nonnull align 8 dereferenceable(336) %115)
          to label %1065 unwind label %1078

1065:                                             ; preds = %1059
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %117) #6
  %1066 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %1067 unwind label %1080

1067:                                             ; preds = %1065
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %117, i32 noundef %1066)
  %1068 = getelementptr inbounds i8, ptr %1064, i64 8
  %1069 = load i32, ptr %117, align 4, !tbaa !188
  store i32 %1069, ptr %1068, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %117) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %118) #6
  store i32 3, ptr %118, align 4, !tbaa !213
  %1070 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1051, ptr noundef nonnull align 4 dereferenceable(4) %114, ptr noundef nonnull align 4 dereferenceable(4) %118)
          to label %1071 unwind label %1082

1071:                                             ; preds = %1067
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %118) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %119, i32 noundef %1051)
  %1072 = load i32, ptr %119, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1072, i32 noundef 11, i32 noundef 20)
          to label %1073 unwind label %1078

1073:                                             ; preds = %1071
  %1074 = getelementptr inbounds i8, ptr %0, i64 9912
  store i32 %1051, ptr %1074, align 8, !tbaa !231
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 3, i32 noundef 20, i32 noundef %1051)
          to label %1075 unwind label %1078

1075:                                             ; preds = %1073
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %115) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %115) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %114) #6
  br label %1085

1076:                                             ; preds = %1049
  %1077 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %116) #6
  br label %1084

1078:                                             ; preds = %1073, %1071, %1059
  %1079 = landingpad { ptr, i32 }
          cleanup
  br label %1084

1080:                                             ; preds = %1065
  %1081 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %117) #6
  br label %1084

1082:                                             ; preds = %1067
  %1083 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %118) #6
  br label %1084

1084:                                             ; preds = %1078, %1080, %1082, %1076
  %.pn325.pn = phi { ptr, i32 } [ %1077, %1076 ], [ %1079, %1078 ], [ %1083, %1082 ], [ %1081, %1080 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %115) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %115) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %114) #6
  br label %1259

1085:                                             ; preds = %1075, %1045, %1043
  %1086 = load i8, ptr %25, align 1, !tbaa !5, !range !173, !noundef !174
  %1087 = trunc nuw i8 %1086 to i1
  br i1 %1087, label %1132, label %1088

1088:                                             ; preds = %1085
  %1089 = getelementptr inbounds i8, ptr %0, i64 11195
  %1090 = load i8, ptr %1089, align 1, !tbaa !187, !range !173, !noundef !174
  %1091 = trunc nuw i8 %1090 to i1
  br i1 %1091, label %1092, label %1132

1092:                                             ; preds = %1088
  %1093 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %120) #6
  %1094 = add i32 %1093, 1
  store i32 %1094, ptr %120, align 4, !tbaa !188
  %1095 = add i32 %1093, 2
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %121) #6
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %121, i32 noundef 20)
  %1096 = getelementptr inbounds i8, ptr %121, i64 16
  store i32 2, ptr %1096, align 8, !tbaa !194
  %1097 = getelementptr inbounds i8, ptr %121, i64 20
  store i32 8, ptr %1097, align 4, !tbaa !207
  %1098 = getelementptr inbounds i8, ptr %121, i64 24
  store i32 1, ptr %1098, align 8, !tbaa !208
  %1099 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1093, ptr noundef nonnull align 8 dereferenceable(336) %121)
          to label %1100 unwind label %1121

1100:                                             ; preds = %1092
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %122) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %122, ptr noundef nonnull align 8 dereferenceable(336) %121)
          to label %1101 unwind label %1123

1101:                                             ; preds = %1100
  %1102 = getelementptr inbounds i8, ptr %122, i64 12
  store i32 32, ptr %1102, align 4, !tbaa !209
  %1103 = getelementptr inbounds i8, ptr %122, i64 124
  store i8 1, ptr %1103, align 4, !tbaa !210
  %1104 = getelementptr inbounds i8, ptr %122, i64 120
  %1105 = load i32, ptr %1104, align 8, !tbaa !211
  %1106 = add i32 %1105, 1
  store i32 %1106, ptr %1104, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %123) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %123, i32 noundef %1093)
  %1107 = getelementptr inbounds i8, ptr %122, i64 276
  %1108 = load i32, ptr %123, align 4, !tbaa !188
  store i32 %1108, ptr %1107, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %123) #6
  %1109 = getelementptr inbounds i8, ptr %122, i64 128
  store i32 1, ptr %1109, align 8, !tbaa !212
  %1110 = load i32, ptr %120, align 4, !tbaa !188
  %1111 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1110, ptr noundef nonnull align 8 dereferenceable(336) %122)
          to label %1112 unwind label %1125

1112:                                             ; preds = %1101
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %124) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %124, i32 noundef %1093)
  %1113 = getelementptr inbounds i8, ptr %1111, i64 8
  %1114 = load i32, ptr %124, align 4, !tbaa !188
  store i32 %1114, ptr %1113, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %124) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %125) #6
  store i32 1, ptr %125, align 4, !tbaa !213
  %1115 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1095, ptr noundef nonnull align 4 dereferenceable(4) %120, ptr noundef nonnull align 4 dereferenceable(4) %125)
          to label %1116 unwind label %1127

1116:                                             ; preds = %1112
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %125) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %126, i32 noundef %1095)
  %1117 = load i32, ptr %126, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1117, i32 noundef 11, i32 noundef 23)
          to label %1118 unwind label %1125

1118:                                             ; preds = %1116
  %1119 = getelementptr inbounds i8, ptr %0, i64 9916
  store i32 %1095, ptr %1119, align 4, !tbaa !232
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 23, i32 noundef %1095)
          to label %1120 unwind label %1125

1120:                                             ; preds = %1118
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %122) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %122) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %121) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %121) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %120) #6
  br label %1132

1121:                                             ; preds = %1092
  %1122 = landingpad { ptr, i32 }
          cleanup
  br label %1131

1123:                                             ; preds = %1100
  %1124 = landingpad { ptr, i32 }
          cleanup
  br label %1130

1125:                                             ; preds = %1118, %1116, %1101
  %1126 = landingpad { ptr, i32 }
          cleanup
  br label %1129

1127:                                             ; preds = %1112
  %1128 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %125) #6
  br label %1129

1129:                                             ; preds = %1127, %1125
  %.pn328 = phi { ptr, i32 } [ %1126, %1125 ], [ %1128, %1127 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %122) #6
  br label %1130

1130:                                             ; preds = %1129, %1123
  %.pn328.pn = phi { ptr, i32 } [ %.pn328, %1129 ], [ %1124, %1123 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %122) #6
  br label %1131

1131:                                             ; preds = %1130, %1121
  %.pn328.pn.pn = phi { ptr, i32 } [ %.pn328.pn, %1130 ], [ %1122, %1121 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %121) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %121) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %120) #6
  br label %1259

1132:                                             ; preds = %1120, %1088, %1085
  %1133 = load i8, ptr %10, align 1, !tbaa !5, !range !173, !noundef !174
  %1134 = trunc nuw i8 %1133 to i1
  br i1 %1134, label %1135, label %1174

1135:                                             ; preds = %1132
  %1136 = load i8, ptr %26, align 1, !tbaa !5, !range !173, !noundef !174
  %1137 = trunc nuw i8 %1136 to i1
  br i1 %1137, label %1174, label %1138

1138:                                             ; preds = %1135
  %1139 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %127) #6
  store i32 %1139, ptr %127, align 4, !tbaa !188
  %1140 = add i32 %1139, 1
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %128) #6
  %1141 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross11CompilerMSL13get_uint_typeEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %128, ptr noundef nonnull align 8 dereferenceable(336) %1141)
  %1142 = getelementptr inbounds i8, ptr %128, i64 12
  store i32 32, ptr %1142, align 4, !tbaa !209
  %1143 = getelementptr inbounds i8, ptr %128, i64 124
  store i8 1, ptr %1143, align 4, !tbaa !210
  %1144 = getelementptr inbounds i8, ptr %128, i64 120
  %1145 = load i32, ptr %1144, align 8, !tbaa !211
  %1146 = add i32 %1145, 1
  store i32 %1146, ptr %1144, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %129) #6
  %1147 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %1148 unwind label %1165

1148:                                             ; preds = %1138
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %129, i32 noundef %1147)
  %1149 = getelementptr inbounds i8, ptr %128, i64 276
  %1150 = load i32, ptr %129, align 4, !tbaa !188
  store i32 %1150, ptr %1149, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %129) #6
  %1151 = getelementptr inbounds i8, ptr %128, i64 128
  store i32 1, ptr %1151, align 8, !tbaa !212
  %1152 = load i32, ptr %127, align 4, !tbaa !188
  %1153 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1152, ptr noundef nonnull align 8 dereferenceable(336) %128)
          to label %1154 unwind label %1167

1154:                                             ; preds = %1148
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %130) #6
  %1155 = invoke noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %1156 unwind label %1169

1156:                                             ; preds = %1154
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %130, i32 noundef %1155)
  %1157 = getelementptr inbounds i8, ptr %1153, i64 8
  %1158 = load i32, ptr %130, align 4, !tbaa !188
  store i32 %1158, ptr %1157, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %130) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %131) #6
  store i32 1, ptr %131, align 4, !tbaa !213
  %1159 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1140, ptr noundef nonnull align 4 dereferenceable(4) %127, ptr noundef nonnull align 4 dereferenceable(4) %131)
          to label %1160 unwind label %1171

1160:                                             ; preds = %1156
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %131) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %132, i32 noundef %1140)
  %1161 = load i32, ptr %132, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1161, i32 noundef 11, i32 noundef 29)
          to label %1162 unwind label %1167

1162:                                             ; preds = %1160
  %1163 = getelementptr inbounds i8, ptr %0, i64 9968
  store i32 %1140, ptr %1163, align 8, !tbaa !233
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 29, i32 noundef %1140)
          to label %1164 unwind label %1167

1164:                                             ; preds = %1162
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %128) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %128) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %127) #6
  br label %1174

1165:                                             ; preds = %1138
  %1166 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %129) #6
  br label %1173

1167:                                             ; preds = %1162, %1160, %1148
  %1168 = landingpad { ptr, i32 }
          cleanup
  br label %1173

1169:                                             ; preds = %1154
  %1170 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %130) #6
  br label %1173

1171:                                             ; preds = %1156
  %1172 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %131) #6
  br label %1173

1173:                                             ; preds = %1167, %1169, %1171, %1165
  %.pn332.pn = phi { ptr, i32 } [ %1166, %1165 ], [ %1168, %1167 ], [ %1172, %1171 ], [ %1170, %1169 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %128) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %128) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %127) #6
  br label %1259

1174:                                             ; preds = %1164, %1135, %1132
  %1175 = load i8, ptr %11, align 1, !tbaa !5, !range !173, !noundef !174
  %1176 = trunc nuw i8 %1175 to i1
  br i1 %1176, label %1177, label %1210

1177:                                             ; preds = %1174
  %1178 = load i8, ptr %27, align 1, !tbaa !5, !range !173, !noundef !174
  %1179 = trunc nuw i8 %1178 to i1
  br i1 %1179, label %1210, label %1180

1180:                                             ; preds = %1177
  %1181 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %133) #6
  store i32 %1181, ptr %133, align 4, !tbaa !188
  %1182 = add i32 %1181, 1
  %1183 = call noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %1184 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1183, i32 noundef 3, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %134) #6
  %1185 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1184)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %134, ptr noundef nonnull align 8 dereferenceable(336) %1185)
  %1186 = getelementptr inbounds i8, ptr %134, i64 12
  store i32 32, ptr %1186, align 4, !tbaa !209
  %1187 = getelementptr inbounds i8, ptr %134, i64 124
  store i8 1, ptr %1187, align 4, !tbaa !210
  %1188 = getelementptr inbounds i8, ptr %134, i64 120
  %1189 = load i32, ptr %1188, align 8, !tbaa !211
  %1190 = add i32 %1189, 1
  store i32 %1190, ptr %1188, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %135) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %135, i32 noundef %1184)
  %1191 = getelementptr inbounds i8, ptr %134, i64 276
  %1192 = load i32, ptr %135, align 4, !tbaa !188
  store i32 %1192, ptr %1191, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %135) #6
  %1193 = getelementptr inbounds i8, ptr %134, i64 128
  store i32 1, ptr %1193, align 8, !tbaa !212
  %1194 = load i32, ptr %133, align 4, !tbaa !188
  %1195 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1194, ptr noundef nonnull align 8 dereferenceable(336) %134)
          to label %1196 unwind label %1205

1196:                                             ; preds = %1180
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %136) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %136, i32 noundef %1184)
  %1197 = getelementptr inbounds i8, ptr %1195, i64 8
  %1198 = load i32, ptr %136, align 4, !tbaa !188
  store i32 %1198, ptr %1197, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %136) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %137) #6
  store i32 1, ptr %137, align 4, !tbaa !213
  %1199 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1182, ptr noundef nonnull align 4 dereferenceable(4) %133, ptr noundef nonnull align 4 dereferenceable(4) %137)
          to label %1200 unwind label %1207

1200:                                             ; preds = %1196
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %137) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %138, i32 noundef %1182)
  %1201 = load i32, ptr %138, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1201, i32 noundef 11, i32 noundef 25)
          to label %1202 unwind label %1205

1202:                                             ; preds = %1200
  %1203 = getelementptr inbounds i8, ptr %0, i64 9972
  store i32 %1182, ptr %1203, align 4, !tbaa !234
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 1, i32 noundef 25, i32 noundef %1182)
          to label %1204 unwind label %1205

1204:                                             ; preds = %1202
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %134) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %134) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %133) #6
  br label %1210

1205:                                             ; preds = %1202, %1200, %1180
  %1206 = landingpad { ptr, i32 }
          cleanup
  br label %1209

1207:                                             ; preds = %1196
  %1208 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %137) #6
  br label %1209

1209:                                             ; preds = %1207, %1205
  %.pn335 = phi { ptr, i32 } [ %1206, %1205 ], [ %1208, %1207 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %134) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %134) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %133) #6
  br label %1259

1210:                                             ; preds = %1204, %1177, %1174
  %1211 = load i8, ptr %28, align 1, !tbaa !5, !range !173, !noundef !174
  %1212 = trunc nuw i8 %1211 to i1
  br i1 %1212, label %1258, label %1213

1213:                                             ; preds = %1210
  %1214 = load i8, ptr %12, align 1, !tbaa !5, !range !173, !noundef !174
  %1215 = trunc nuw i8 %1214 to i1
  br i1 %1215, label %1216, label %1258

1216:                                             ; preds = %1213
  %1217 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %352, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %139) #6
  %1218 = add i32 %1217, 1
  store i32 %1218, ptr %139, align 4, !tbaa !188
  %1219 = add i32 %1217, 2
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %140) #6
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %140, i32 noundef 22)
  %1220 = getelementptr inbounds i8, ptr %140, i64 16
  store i32 13, ptr %1220, align 8, !tbaa !194
  %1221 = getelementptr inbounds i8, ptr %140, i64 20
  store i32 32, ptr %1221, align 4, !tbaa !207
  %1222 = getelementptr inbounds i8, ptr %140, i64 24
  store i32 1, ptr %1222, align 8, !tbaa !208
  %1223 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1217, ptr noundef nonnull align 8 dereferenceable(336) %140)
          to label %1224 unwind label %1247

1224:                                             ; preds = %1216
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %141) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %141, ptr noundef nonnull align 8 dereferenceable(336) %140)
          to label %1225 unwind label %1249

1225:                                             ; preds = %1224
  %1226 = getelementptr inbounds i8, ptr %141, i64 12
  store i32 32, ptr %1226, align 4, !tbaa !209
  %1227 = getelementptr inbounds i8, ptr %141, i64 124
  store i8 1, ptr %1227, align 4, !tbaa !210
  %1228 = getelementptr inbounds i8, ptr %141, i64 120
  %1229 = load i32, ptr %1228, align 8, !tbaa !211
  %1230 = add i32 %1229, 1
  store i32 %1230, ptr %1228, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %142) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %142, i32 noundef %1217)
  %1231 = getelementptr inbounds i8, ptr %141, i64 276
  %1232 = load i32, ptr %142, align 4, !tbaa !188
  store i32 %1232, ptr %1231, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %142) #6
  %1233 = getelementptr inbounds i8, ptr %141, i64 128
  store i32 3, ptr %1233, align 8, !tbaa !212
  %1234 = load i32, ptr %139, align 4, !tbaa !188
  %1235 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1234, ptr noundef nonnull align 8 dereferenceable(336) %141)
          to label %1236 unwind label %1251

1236:                                             ; preds = %1225
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %143) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %143, i32 noundef %1217)
  %1237 = getelementptr inbounds i8, ptr %1235, i64 8
  %1238 = load i32, ptr %143, align 4, !tbaa !188
  store i32 %1238, ptr %1237, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %143) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %144) #6
  store i32 3, ptr %144, align 4, !tbaa !213
  %1239 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1219, ptr noundef nonnull align 4 dereferenceable(4) %139, ptr noundef nonnull align 4 dereferenceable(4) %144)
          to label %1240 unwind label %1253

1240:                                             ; preds = %1236
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %144) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %145, i32 noundef %1219)
  %1241 = load i32, ptr %145, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1241, i32 noundef 11, i32 noundef 22)
          to label %1242 unwind label %1251

1242:                                             ; preds = %1240
  %1243 = getelementptr inbounds i8, ptr %0, i64 9988
  store i32 %1219, ptr %1243, align 4, !tbaa !235
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 3, i32 noundef 22, i32 noundef %1219)
          to label %1244 unwind label %1251

1244:                                             ; preds = %1242
  %1245 = getelementptr inbounds i8, ptr %0, i64 2744
  invoke void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %1245, i32 noundef 22)
          to label %1246 unwind label %1251

1246:                                             ; preds = %1244
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %141) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %141) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %140) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %140) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %139) #6
  br label %1258

1247:                                             ; preds = %1216
  %1248 = landingpad { ptr, i32 }
          cleanup
  br label %1257

1249:                                             ; preds = %1224
  %1250 = landingpad { ptr, i32 }
          cleanup
  br label %1256

1251:                                             ; preds = %1244, %1242, %1240, %1225
  %1252 = landingpad { ptr, i32 }
          cleanup
  br label %1255

1253:                                             ; preds = %1236
  %1254 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %144) #6
  br label %1255

1255:                                             ; preds = %1253, %1251
  %.pn337 = phi { ptr, i32 } [ %1252, %1251 ], [ %1254, %1253 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %141) #6
  br label %1256

1256:                                             ; preds = %1255, %1249
  %.pn337.pn = phi { ptr, i32 } [ %.pn337, %1255 ], [ %1250, %1249 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %141) #6
  br label %1257

1257:                                             ; preds = %1256, %1247
  %.pn337.pn.pn = phi { ptr, i32 } [ %.pn337.pn, %1256 ], [ %1248, %1247 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %140) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %140) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %139) #6
  br label %1259

1258:                                             ; preds = %1246, %1213, %1210
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  br label %1260

1259:                                             ; preds = %1032, %1042, %1257, %1209, %1173, %1131, %1084, %992, %946, %900, %767, %579, %533, %490, %443
  %.pn337.pn.pn.pn = phi { ptr, i32 } [ %.pn337.pn.pn, %1257 ], [ %.pn335, %1209 ], [ %.pn332.pn, %1173 ], [ %.pn328.pn.pn, %1131 ], [ %.pn325.pn, %1084 ], [ %.pn317.pn, %992 ], [ %.pn314.pn, %946 ], [ %.pn309.pn.pn.pn, %900 ], [ %.pn297.pn.pn, %767 ], [ %.pn280.pn, %579 ], [ %.pn277.pn, %533 ], [ %.pn274.pn, %490 ], [ %.pn.pn.pn, %443 ], [ %.pn322, %1042 ], [ %.pn320, %1032 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  br label %1477

1260:                                             ; preds = %1258, %349
  %1261 = getelementptr inbounds i8, ptr %0, i64 11189
  %1262 = load i8, ptr %1261, align 1, !tbaa !236, !range !173, !noundef !174
  %1263 = trunc nuw i8 %1262 to i1
  br i1 %1263, label %1264, label %1280

1264:                                             ; preds = %1260
  %1265 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %146, i32 noundef %1265)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %147) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %148) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull @.str.18, ptr noundef nonnull align 1 dereferenceable(1) %148)
          to label %1266 unwind label %1275

1266:                                             ; preds = %1264
  %1267 = load i32, ptr %146, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1267, ptr noundef nonnull align 8 dereferenceable(32) %147)
          to label %1268 unwind label %1277

1268:                                             ; preds = %1266
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %148) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %149, i32 noundef %1265)
  %1269 = load i32, ptr %149, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1269, i32 noundef 34, i32 noundef -2)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %150, i32 noundef %1265)
  %1270 = getelementptr inbounds i8, ptr %0, i64 10056
  %1271 = load i32, ptr %1270, align 8, !tbaa !237
  %1272 = load i32, ptr %150, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1272, i32 noundef 33, i32 noundef %1271)
  %1273 = load i32, ptr %1270, align 8, !tbaa !237
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1265, i32 noundef 6, i32 noundef %1273)
  %1274 = getelementptr inbounds i8, ptr %0, i64 9992
  store i32 %1265, ptr %1274, align 8, !tbaa !238
  br label %1280

1275:                                             ; preds = %1264
  %1276 = landingpad { ptr, i32 }
          cleanup
  br label %1279

1277:                                             ; preds = %1266
  %1278 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #6
  br label %1279

1279:                                             ; preds = %1277, %1275
  %.pn342 = phi { ptr, i32 } [ %1278, %1277 ], [ %1276, %1275 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %148) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #6
  br label %1477

1280:                                             ; preds = %1268, %1260
  %1281 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL24needs_buffer_size_bufferEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1281, label %1282, label %1298

1282:                                             ; preds = %1280
  %1283 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %151, i32 noundef %1283)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %152) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %153) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef nonnull @.str.19, ptr noundef nonnull align 1 dereferenceable(1) %153)
          to label %1284 unwind label %1293

1284:                                             ; preds = %1282
  %1285 = load i32, ptr %151, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1285, ptr noundef nonnull align 8 dereferenceable(32) %152)
          to label %1286 unwind label %1295

1286:                                             ; preds = %1284
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %153) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %154, i32 noundef %1283)
  %1287 = load i32, ptr %154, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1287, i32 noundef 34, i32 noundef -3)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %155, i32 noundef %1283)
  %1288 = getelementptr inbounds i8, ptr %0, i64 10076
  %1289 = load i32, ptr %1288, align 4, !tbaa !239
  %1290 = load i32, ptr %155, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1290, i32 noundef 33, i32 noundef %1289)
  %1291 = load i32, ptr %1288, align 4, !tbaa !239
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1283, i32 noundef 6, i32 noundef %1291)
  %1292 = getelementptr inbounds i8, ptr %0, i64 9996
  store i32 %1283, ptr %1292, align 4, !tbaa !240
  br label %1298

1293:                                             ; preds = %1282
  %1294 = landingpad { ptr, i32 }
          cleanup
  br label %1297

1295:                                             ; preds = %1284
  %1296 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #6
  br label %1297

1297:                                             ; preds = %1295, %1293
  %.pn344 = phi { ptr, i32 } [ %1296, %1295 ], [ %1294, %1293 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %153) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #6
  br label %1477

1298:                                             ; preds = %1286, %1280
  %1299 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL22needs_view_mask_bufferEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1299, label %1300, label %1316

1300:                                             ; preds = %1298
  %1301 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %156, i32 noundef %1301)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %157) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %158) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %158) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef nonnull @.str.20, ptr noundef nonnull align 1 dereferenceable(1) %158)
          to label %1302 unwind label %1311

1302:                                             ; preds = %1300
  %1303 = load i32, ptr %156, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1303, ptr noundef nonnull align 8 dereferenceable(32) %157)
          to label %1304 unwind label %1313

1304:                                             ; preds = %1302
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %158) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %158) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %159, i32 noundef %1301)
  %1305 = load i32, ptr %159, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1305, i32 noundef 34, i32 noundef -5)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %160, i32 noundef %1301)
  %1306 = getelementptr inbounds i8, ptr %0, i64 10080
  %1307 = load i32, ptr %1306, align 8, !tbaa !241
  %1308 = load i32, ptr %160, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1308, i32 noundef 33, i32 noundef %1307)
  %1309 = load i32, ptr %1306, align 8, !tbaa !241
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1301, i32 noundef 6, i32 noundef %1309)
  %1310 = getelementptr inbounds i8, ptr %0, i64 10000
  store i32 %1301, ptr %1310, align 8, !tbaa !242
  br label %1316

1311:                                             ; preds = %1300
  %1312 = landingpad { ptr, i32 }
          cleanup
  br label %1315

1313:                                             ; preds = %1302
  %1314 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #6
  br label %1315

1315:                                             ; preds = %1313, %1311
  %.pn346 = phi { ptr, i32 } [ %1314, %1313 ], [ %1312, %1311 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %158) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %158) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #6
  br label %1477

1316:                                             ; preds = %1304, %1298
  %1317 = getelementptr inbounds i8, ptr %0, i64 12280
  %1318 = call noundef zeroext i1 @_ZNKSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(48) %1317) #6
  br i1 %1318, label %1335, label %1319

1319:                                             ; preds = %1316
  %1320 = call noundef i32 @_ZN11spirv_cross11CompilerMSL33build_constant_uint_array_pointerEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %161, i32 noundef %1320)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %162) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %163) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %163) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull @.str.21, ptr noundef nonnull align 1 dereferenceable(1) %163)
          to label %1321 unwind label %1330

1321:                                             ; preds = %1319
  %1322 = load i32, ptr %161, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1322, ptr noundef nonnull align 8 dereferenceable(32) %162)
          to label %1323 unwind label %1332

1323:                                             ; preds = %1321
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %163) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %163) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %164, i32 noundef %1320)
  %1324 = load i32, ptr %164, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1324, i32 noundef 34, i32 noundef -6)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %165, i32 noundef %1320)
  %1325 = getelementptr inbounds i8, ptr %0, i64 10084
  %1326 = load i32, ptr %1325, align 4, !tbaa !243
  %1327 = load i32, ptr %165, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1327, i32 noundef 33, i32 noundef %1326)
  %1328 = load i32, ptr %1325, align 4, !tbaa !243
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1320, i32 noundef 6, i32 noundef %1328)
  %1329 = getelementptr inbounds i8, ptr %0, i64 10004
  store i32 %1320, ptr %1329, align 4, !tbaa !244
  br label %1335

1330:                                             ; preds = %1319
  %1331 = landingpad { ptr, i32 }
          cleanup
  br label %1334

1332:                                             ; preds = %1321
  %1333 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #6
  br label %1334

1334:                                             ; preds = %1332, %1330
  %.pn348 = phi { ptr, i32 } [ %1333, %1332 ], [ %1331, %1330 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %163) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %163) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #6
  br label %1477

1335:                                             ; preds = %1323, %1316
  %1336 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %1337 = icmp eq i32 %1336, 0
  br i1 %1337, label %1340, label %1338

1338:                                             ; preds = %1335
  %1339 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_tese_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1339, label %1340, label %.thread372

1340:                                             ; preds = %1338, %1335
  %1341 = load i8, ptr %195, align 4, !tbaa !9, !range !173, !noundef !174
  %1342 = trunc nuw i8 %1341 to i1
  br i1 %1342, label %.thread372, label %1343

1343:                                             ; preds = %1340
  %1344 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL29get_is_rasterization_disabledEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1344, label %.thread372, label %1345

1345:                                             ; preds = %1343
  %1346 = getelementptr inbounds i8, ptr %0, i64 2744
  %1347 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %1346, i32 noundef 0)
  br i1 %1347, label %.thread372, label %1348

1348:                                             ; preds = %1345
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %166) #6
  store i8 0, ptr %166, align 1, !tbaa !5
  %1349 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %167) #6
  store ptr %0, ptr %167, align 8, !tbaa !245
  %1350 = getelementptr inbounds i8, ptr %167, i64 8
  store ptr %166, ptr %1350, align 8, !tbaa !191
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL23build_implicit_builtinsEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %1349, ptr noundef nonnull align 8 dereferenceable(16) %167)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %167) #6
  %1351 = load i8, ptr %166, align 1, !tbaa !5, !range !173, !noundef !174
  %1352 = trunc nuw i8 %1351 to i1
  br i1 %1352, label %1353, label %.thread374

.thread374:                                       ; preds = %1348
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %166) #6
  br label %.thread372

1353:                                             ; preds = %1348
  %1354 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %1346, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %166) #6
  br i1 %1354, label %.thread372, label %1355

1355:                                             ; preds = %1353
  %1356 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1349, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %168) #6
  %1357 = add i32 %1356, 1
  store i32 %1357, ptr %168, align 4, !tbaa !188
  %1358 = add i32 %1356, 2
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %169) #6
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %169, i32 noundef 23)
  %1359 = getelementptr inbounds i8, ptr %169, i64 16
  store i32 13, ptr %1359, align 8, !tbaa !194
  %1360 = getelementptr inbounds i8, ptr %169, i64 20
  store i32 32, ptr %1360, align 4, !tbaa !207
  %1361 = getelementptr inbounds i8, ptr %169, i64 24
  store i32 4, ptr %1361, align 8, !tbaa !208
  %1362 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1356, ptr noundef nonnull align 8 dereferenceable(336) %169)
          to label %1363 unwind label %1383

1363:                                             ; preds = %1355
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %170) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %170, ptr noundef nonnull align 8 dereferenceable(336) %169)
          to label %1364 unwind label %1385

1364:                                             ; preds = %1363
  %1365 = getelementptr inbounds i8, ptr %170, i64 12
  store i32 32, ptr %1365, align 4, !tbaa !209
  %1366 = getelementptr inbounds i8, ptr %170, i64 124
  store i8 1, ptr %1366, align 4, !tbaa !210
  %1367 = getelementptr inbounds i8, ptr %170, i64 120
  %1368 = load i32, ptr %1367, align 8, !tbaa !211
  %1369 = add i32 %1368, 1
  store i32 %1369, ptr %1367, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %171) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %171, i32 noundef %1356)
  %1370 = getelementptr inbounds i8, ptr %170, i64 276
  %1371 = load i32, ptr %171, align 4, !tbaa !188
  store i32 %1371, ptr %1370, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %171) #6
  %1372 = getelementptr inbounds i8, ptr %170, i64 128
  store i32 3, ptr %1372, align 8, !tbaa !212
  %1373 = load i32, ptr %168, align 4, !tbaa !188
  %1374 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1373, ptr noundef nonnull align 8 dereferenceable(336) %170)
          to label %1375 unwind label %1387

1375:                                             ; preds = %1364
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %172) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %172, i32 noundef %1356)
  %1376 = getelementptr inbounds i8, ptr %1374, i64 8
  %1377 = load i32, ptr %172, align 4, !tbaa !188
  store i32 %1377, ptr %1376, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %172) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %173) #6
  store i32 3, ptr %173, align 4, !tbaa !213
  %1378 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1358, ptr noundef nonnull align 4 dereferenceable(4) %168, ptr noundef nonnull align 4 dereferenceable(4) %173)
          to label %1379 unwind label %1389

1379:                                             ; preds = %1375
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %173) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %174, i32 noundef %1358)
  %1380 = load i32, ptr %174, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1380, i32 noundef 11, i32 noundef 0)
          to label %1381 unwind label %1387

1381:                                             ; preds = %1379
  invoke void @_ZN11spirv_cross11CompilerMSL21mark_implicit_builtinEN3spv12StorageClassENS1_7BuiltInEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 3, i32 noundef 0, i32 noundef %1358)
          to label %1382 unwind label %1387

1382:                                             ; preds = %1381
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %170) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %170) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %169) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %169) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %168) #6
  br label %.thread372

1383:                                             ; preds = %1355
  %1384 = landingpad { ptr, i32 }
          cleanup
  br label %1393

1385:                                             ; preds = %1363
  %1386 = landingpad { ptr, i32 }
          cleanup
  br label %1392

1387:                                             ; preds = %1381, %1379, %1364
  %1388 = landingpad { ptr, i32 }
          cleanup
  br label %1391

1389:                                             ; preds = %1375
  %1390 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %173) #6
  br label %1391

1391:                                             ; preds = %1389, %1387
  %.pn350 = phi { ptr, i32 } [ %1388, %1387 ], [ %1390, %1389 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %170) #6
  br label %1392

1392:                                             ; preds = %1391, %1385
  %.pn350.pn = phi { ptr, i32 } [ %.pn350, %1391 ], [ %1386, %1385 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %170) #6
  br label %1393

1393:                                             ; preds = %1392, %1383
  %.pn350.pn.pn = phi { ptr, i32 } [ %.pn350.pn, %1392 ], [ %1384, %1383 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %169) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %169) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %168) #6
  br label %1477

.thread372:                                       ; preds = %1338, %1340, %1343, %1345, %.thread374, %1382, %1353
  %1394 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL14is_mesh_shaderEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1394, label %1395, label %1430

1395:                                             ; preds = %.thread372
  %1396 = getelementptr inbounds i8, ptr %0, i64 8
  %1397 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1396, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %175) #6
  store i32 %1397, ptr %175, align 4, !tbaa !188
  %1398 = add i32 %1397, 1
  %1399 = call noundef i32 @_ZN11spirv_cross11CompilerMSL16get_uint_type_idEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  %1400 = call noundef i32 @_ZN11spirv_cross11CompilerMSL26build_extended_vector_typeEjjNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1399, i32 noundef 2, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %176) #6
  %1401 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1400)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %176, ptr noundef nonnull align 8 dereferenceable(336) %1401)
  %1402 = getelementptr inbounds i8, ptr %176, i64 12
  store i32 32, ptr %1402, align 4, !tbaa !209
  %1403 = getelementptr inbounds i8, ptr %176, i64 124
  store i8 1, ptr %1403, align 4, !tbaa !210
  %1404 = getelementptr inbounds i8, ptr %176, i64 120
  %1405 = load i32, ptr %1404, align 8, !tbaa !211
  %1406 = add i32 %1405, 1
  store i32 %1406, ptr %1404, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %177) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %177, i32 noundef %1400)
  %1407 = getelementptr inbounds i8, ptr %176, i64 276
  %1408 = load i32, ptr %177, align 4, !tbaa !188
  store i32 %1408, ptr %1407, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %177) #6
  %1409 = getelementptr inbounds i8, ptr %176, i64 128
  store i32 4, ptr %1409, align 8, !tbaa !212
  %1410 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1397, ptr noundef nonnull align 8 dereferenceable(336) %176)
          to label %1411 unwind label %1420

1411:                                             ; preds = %1395
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %178) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %178, i32 noundef %1400)
  %1412 = getelementptr inbounds i8, ptr %1410, i64 8
  %1413 = load i32, ptr %178, align 4, !tbaa !188
  store i32 %1413, ptr %1412, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %178) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %179) #6
  store i32 4, ptr %179, align 4, !tbaa !213
  %1414 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1398, ptr noundef nonnull align 4 dereferenceable(4) %175, ptr noundef nonnull align 4 dereferenceable(4) %179)
          to label %1415 unwind label %1422

1415:                                             ; preds = %1411
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %179) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %180, i32 noundef %1398)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %181) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %182) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %182) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %181, ptr noundef nonnull @.str.22, ptr noundef nonnull align 1 dereferenceable(1) %182)
          to label %1416 unwind label %1424

1416:                                             ; preds = %1415
  %1417 = load i32, ptr %180, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1417, ptr noundef nonnull align 8 dereferenceable(32) %181)
          to label %1418 unwind label %1426

1418:                                             ; preds = %1416
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %182) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %182) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %181) #6
  %1419 = getelementptr inbounds i8, ptr %0, i64 9980
  store i32 %1398, ptr %1419, align 4, !tbaa !247
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %176) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %176) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %175) #6
  br label %1430

1420:                                             ; preds = %1395
  %1421 = landingpad { ptr, i32 }
          cleanup
  br label %1429

1422:                                             ; preds = %1411
  %1423 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %179) #6
  br label %1429

1424:                                             ; preds = %1415
  %1425 = landingpad { ptr, i32 }
          cleanup
  br label %1428

1426:                                             ; preds = %1416
  %1427 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #6
  br label %1428

1428:                                             ; preds = %1426, %1424
  %.pn354 = phi { ptr, i32 } [ %1427, %1426 ], [ %1425, %1424 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %182) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %182) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %181) #6
  br label %1429

1429:                                             ; preds = %1428, %1422, %1420
  %.pn354.pn = phi { ptr, i32 } [ %.pn354, %1428 ], [ %1423, %1422 ], [ %1421, %1420 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %176) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %176) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %175) #6
  br label %1477

1430:                                             ; preds = %1418, %.thread372
  %1431 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %1432 = icmp eq i32 %1431, 5364
  br i1 %1432, label %1433, label %1476

1433:                                             ; preds = %1430
  %1434 = getelementptr inbounds i8, ptr %0, i64 8
  %1435 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1434, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %183) #6
  %1436 = add i32 %1435, 1
  store i32 %1436, ptr %183, align 4, !tbaa !188
  %1437 = add i32 %1435, 2
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %184) #6
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %184, i32 noundef 30)
  %1438 = getelementptr inbounds i8, ptr %184, i64 16
  store i32 24, ptr %1438, align 8, !tbaa !194
  %1439 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1435, ptr noundef nonnull align 8 dereferenceable(336) %184)
          to label %1440 unwind label %1460

1440:                                             ; preds = %1433
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %185) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %185, ptr noundef nonnull align 8 dereferenceable(336) %184)
          to label %1441 unwind label %1462

1441:                                             ; preds = %1440
  %1442 = getelementptr inbounds i8, ptr %185, i64 12
  store i32 32, ptr %1442, align 4, !tbaa !209
  %1443 = getelementptr inbounds i8, ptr %185, i64 124
  store i8 1, ptr %1443, align 4, !tbaa !210
  %1444 = getelementptr inbounds i8, ptr %185, i64 120
  %1445 = load i32, ptr %1444, align 8, !tbaa !211
  %1446 = add i32 %1445, 1
  store i32 %1446, ptr %1444, align 8, !tbaa !211
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %186) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %186, i32 noundef %1435)
  %1447 = getelementptr inbounds i8, ptr %185, i64 276
  %1448 = load i32, ptr %186, align 4, !tbaa !188
  store i32 %1448, ptr %1447, align 4, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %186) #6
  %1449 = getelementptr inbounds i8, ptr %185, i64 128
  store i32 3, ptr %1449, align 8, !tbaa !212
  %1450 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1436, ptr noundef nonnull align 8 dereferenceable(336) %185)
          to label %1451 unwind label %1464

1451:                                             ; preds = %1441
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %187) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %187, i32 noundef %1435)
  %1452 = getelementptr inbounds i8, ptr %1450, i64 8
  %1453 = load i32, ptr %187, align 4, !tbaa !188
  store i32 %1453, ptr %1452, align 8, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %187) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %188) #6
  store i32 3, ptr %188, align 4, !tbaa !213
  %1454 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1437, ptr noundef nonnull align 4 dereferenceable(4) %183, ptr noundef nonnull align 4 dereferenceable(4) %188)
          to label %1455 unwind label %1466

1455:                                             ; preds = %1451
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %188) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %189, i32 noundef %1437)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %190) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %191) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %190, ptr noundef nonnull @.str.23, ptr noundef nonnull align 1 dereferenceable(1) %191)
          to label %1456 unwind label %1468

1456:                                             ; preds = %1455
  %1457 = load i32, ptr %189, align 4
  invoke void @_ZN11spirv_cross8Compiler8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1457, ptr noundef nonnull align 8 dereferenceable(32) %190)
          to label %1458 unwind label %1470

1458:                                             ; preds = %1456
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %191) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %190) #6
  %1459 = getelementptr inbounds i8, ptr %0, i64 9984
  store i32 %1437, ptr %1459, align 8, !tbaa !248
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %185) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %185) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %184) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %184) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %183) #6
  br label %1476

1460:                                             ; preds = %1433
  %1461 = landingpad { ptr, i32 }
          cleanup
  br label %1475

1462:                                             ; preds = %1440
  %1463 = landingpad { ptr, i32 }
          cleanup
  br label %1474

1464:                                             ; preds = %1441
  %1465 = landingpad { ptr, i32 }
          cleanup
  br label %1473

1466:                                             ; preds = %1451
  %1467 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %188) #6
  br label %1473

1468:                                             ; preds = %1455
  %1469 = landingpad { ptr, i32 }
          cleanup
  br label %1472

1470:                                             ; preds = %1456
  %1471 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #6
  br label %1472

1472:                                             ; preds = %1470, %1468
  %.pn357 = phi { ptr, i32 } [ %1471, %1470 ], [ %1469, %1468 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %191) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %190) #6
  br label %1473

1473:                                             ; preds = %1472, %1466, %1464
  %.pn357.pn = phi { ptr, i32 } [ %.pn357, %1472 ], [ %1467, %1466 ], [ %1465, %1464 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %185) #6
  br label %1474

1474:                                             ; preds = %1473, %1462
  %.pn357.pn.pn = phi { ptr, i32 } [ %.pn357.pn, %1473 ], [ %1463, %1462 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %185) #6
  br label %1475

1475:                                             ; preds = %1474, %1460
  %.pn357.pn.pn.pn = phi { ptr, i32 } [ %.pn357.pn.pn, %1474 ], [ %1461, %1460 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %184) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %184) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %183) #6
  br label %1477

1476:                                             ; preds = %1458, %1430
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2) #6
  ret void

1477:                                             ; preds = %1393, %1429, %1475, %1334, %1315, %1297, %1279, %1259
  %.pn357.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn348, %1334 ], [ %.pn346, %1315 ], [ %.pn344, %1297 ], [ %.pn342, %1279 ], [ %.pn337.pn.pn.pn, %1259 ], [ %.pn357.pn.pn.pn, %1475 ], [ %.pn354.pn, %1429 ], [ %.pn350.pn.pn, %1393 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2) #6
  resume { ptr, i32 } %.pn357.pn.pn.pn.pn.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) local_unnamed_addr #3 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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_11CompilerMSL23build_implicit_builtinsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(232)) 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 void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"bool", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 11188}
!10 = !{!"_ZTSN11spirv_cross11CompilerMSLE", !11, i64 0, !120, i64 9848, !53, i64 9904, !53, i64 9908, !53, i64 9912, !53, i64 9916, !53, i64 9920, !53, i64 9924, !53, i64 9928, !53, i64 9932, !53, i64 9936, !53, i64 9940, !53, i64 9944, !53, i64 9948, !53, i64 9952, !53, i64 9956, !53, i64 9960, !53, i64 9964, !53, i64 9968, !53, i64 9972, !53, i64 9976, !53, i64 9980, !53, i64 9984, !53, i64 9988, !53, i64 9992, !53, i64 9996, !53, i64 10000, !53, i64 10004, !53, i64 10008, !53, i64 10012, !53, i64 10016, !53, i64 10020, !53, i64 10024, !53, i64 10028, !6, i64 10032, !6, i64 10033, !122, i64 10036, !126, i64 10176, !134, i64 10224, !139, i64 10272, !134, i64 10328, !139, i64 10376, !60, i64 10432, !60, i64 10488, !60, i64 10544, !60, i64 10600, !99, i64 10656, !99, i64 10712, !99, i64 10768, !141, i64 10824, !141, i64 10872, !62, i64 10920, !146, i64 10976, !148, i64 11032, !53, i64 11088, !53, i64 11092, !53, i64 11096, !7, i64 11100, !150, i64 11132, !150, i64 11136, !150, i64 11140, !150, i64 11144, !150, i64 11148, !150, i64 11152, !150, i64 11156, !150, i64 11160, !150, i64 11164, !150, i64 11168, !150, i64 11172, !151, i64 11176, !151, i64 11180, !6, i64 11184, !6, i64 11185, !6, i64 11186, !6, i64 11187, !6, i64 11188, !6, i64 11189, !6, i64 11190, !6, i64 11191, !6, i64 11192, !6, i64 11193, !6, i64 11194, !6, i64 11195, !6, i64 11196, !57, i64 11200, !57, i64 11232, !57, i64 11264, !57, i64 11296, !57, i64 11328, !57, i64 11360, !57, i64 11392, !57, i64 11424, !57, i64 11456, !57, i64 11488, !57, i64 11520, !57, i64 11552, !57, i64 11584, !57, i64 11616, !57, i64 11648, !57, i64 11680, !152, i64 11712, !153, i64 11720, !158, i64 11768, !60, i64 11824, !160, i64 11880, !62, i64 11968, !60, i64 12024, !60, i64 12080, !60, i64 12136, !163, i64 12192, !166, i64 12280, !62, i64 12328, !171, i64 12384, !7, i64 12440, !53, i64 12472, !53, i64 12476, !6, i64 12480, !6, i64 12481}
!11 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !12, i64 0, !20, i64 3176, !78, i64 3184, !6, i64 3272, !81, i64 3280, !20, i64 7616, !20, i64 7624, !6, i64 7632, !6, i64 7633, !86, i64 7636, !90, i64 7680, !90, i64 7736, !90, i64 7792, !90, i64 7848, !90, i64 7904, !90, i64 7960, !90, i64 8016, !92, i64 8072, !76, i64 8128, !6, i64 8184, !94, i64 8192, !53, i64 8416, !60, i64 8424, !60, i64 8480, !60, i64 8536, !96, i64 8592, !98, i64 8648, !99, i64 8656, !42, i64 8712, !42, i64 8992, !99, i64 9272, !101, i64 9328, !53, i64 9384, !53, i64 9388, !53, i64 9392, !6, i64 9396, !6, i64 9397, !104, i64 9400, !104, i64 9424, !108, i64 9448, !112, i64 9472, !99, i64 9496, !60, i64 9552, !60, i64 9608, !7, i64 9664, !116, i64 9672, !60, i64 9728, !20, i64 9784, !118, i64 9792}
!12 = !{!"_ZTSN11spirv_cross8CompilerE", !13, i64 8, !62, i64 1928, !62, i64 1984, !20, i64 2040, !20, i64 2048, !53, i64 2056, !65, i64 2064, !6, i64 2120, !60, i64 2128, !6, i64 2184, !6, i64 2185, !67, i64 2192, !62, i64 2312, !70, i64 2368, !60, i64 2400, !60, i64 2456, !60, i64 2512, !60, i64 2568, !60, i64 2624, !59, i64 2680, !59, i64 2744, !53, i64 2808, !53, i64 2812, !6, i64 2816, !60, i64 2824, !6, i64 2880, !6, i64 2881, !53, i64 2884, !72, i64 2888, !62, i64 2944, !74, i64 3000, !60, i64 3056, !6, i64 3112, !76, i64 3120}
!13 = !{!"_ZTSN11spirv_cross8ParsedIRE", !14, i64 0, !21, i64 8, !25, i64 32, !29, i64 248, !7, i64 304, !34, i64 1088, !34, i64 1144, !37, i64 1200, !39, i64 1256, !42, i64 1312, !45, i64 1592, !48, i64 1624, !50, i64 1680, !52, i64 1736, !54, i64 1740, !55, i64 1748, !56, i64 1752, !53, i64 1756, !53, i64 1760, !57, i64 1768, !59, i64 1800, !60, i64 1864}
!14 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !15, i64 0}
!15 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !16, i64 0}
!16 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !18, i64 0}
!18 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !19, i64 0}
!19 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !20, i64 0}
!20 = !{!"any pointer", !7, i64 0}
!21 = !{!"_ZTSSt6vectorIjSaIjEE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !26, i64 0, !27, i64 16, !28, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !20, i64 0, !27, i64 8}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!29 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !30, i64 0}
!30 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!31 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !20, i64 0}
!32 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !33, i64 0, !27, i64 8}
!33 = !{!"float", !7, i64 0}
!34 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !35, i64 0, !27, i64 16, !36, i64 24}
!35 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !20, i64 0, !27, i64 8}
!36 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!37 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !38, i64 0}
!38 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!39 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !40, i64 0, !27, i64 16, !41, i64 24}
!40 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !20, i64 0, !27, i64 8}
!41 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!42 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !43, i64 0, !27, i64 16, !44, i64 24}
!43 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !20, i64 0, !27, i64 8}
!44 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!45 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !46, i64 0, !27, i64 16, !47, i64 24}
!46 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !20, i64 0, !27, i64 8}
!47 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!48 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !49, i64 0}
!49 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!50 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !51, i64 0}
!51 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!52 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !53, i64 0}
!53 = !{!"int", !7, i64 0}
!54 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !53, i64 0, !6, i64 4, !6, i64 5, !6, i64 6}
!55 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!56 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!57 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !58, i64 0, !27, i64 8, !7, i64 16}
!58 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !20, i64 0}
!59 = !{!"_ZTSN11spirv_cross6BitsetE", !27, i64 0, !60, i64 8}
!60 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !61, i64 0}
!61 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!62 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !63, i64 0, !27, i64 16, !64, i64 24}
!63 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !20, i64 0, !27, i64 8}
!64 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!65 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !66, i64 0}
!66 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!67 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !68, i64 0, !27, i64 16, !69, i64 24}
!68 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !20, i64 0, !27, i64 8}
!69 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!70 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !71, i64 0, !20, i64 24}
!71 = !{!"_ZTSSt14_Function_base", !7, i64 0, !20, i64 16}
!72 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !73, i64 0}
!73 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!74 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !75, i64 0}
!75 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!76 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !77, i64 0}
!77 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!78 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !79, i64 0, !27, i64 16, !80, i64 24}
!79 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !20, i64 0, !27, i64 8}
!80 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!81 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !82, i64 0, !7, i64 24, !83, i64 4120}
!82 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !20, i64 0, !27, i64 8, !27, i64 16}
!83 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !84, i64 0, !27, i64 16, !85, i64 24}
!84 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !20, i64 0, !27, i64 8}
!85 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!86 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !53, i64 0, !6, i64 4, !6, i64 5, !53, i64 8, !6, i64 12, !6, i64 13, !6, i64 14, !6, i64 15, !6, i64 16, !6, i64 17, !6, i64 18, !6, i64 19, !6, i64 20, !6, i64 21, !6, i64 22, !6, i64 23, !53, i64 24, !87, i64 28, !88, i64 32}
!87 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !6, i64 0, !6, i64 1, !6, i64 2}
!88 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !89, i64 0, !89, i64 4}
!89 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!90 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !91, i64 0}
!91 = !{!"_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", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!92 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !93, i64 0}
!93 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!94 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !57, i64 0, !57, i64 32, !57, i64 64, !6, i64 96, !6, i64 97, !6, i64 98, !6, i64 99, !20, i64 104, !20, i64 112, !20, i64 120, !20, i64 128, !20, i64 136, !20, i64 144, !20, i64 152, !20, i64 160, !20, i64 168, !20, i64 176, !95, i64 184, !6, i64 188, !6, i64 189, !6, i64 190, !6, i64 191, !6, i64 192, !6, i64 193, !6, i64 194, !6, i64 195, !6, i64 196, !6, i64 197, !6, i64 198, !6, i64 199, !6, i64 200, !6, i64 201, !6, i64 202, !6, i64 203, !6, i64 204, !6, i64 205, !6, i64 206, !6, i64 207, !6, i64 208, !6, i64 209, !6, i64 210, !6, i64 211, !6, i64 212, !6, i64 213, !6, i64 214, !6, i64 215, !6, i64 216, !6, i64 217, !6, i64 218, !6, i64 219}
!95 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!96 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !97, i64 0}
!97 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!98 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !53, i64 0}
!99 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !100, i64 0}
!100 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!101 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !102, i64 0, !27, i64 16, !103, i64 24}
!102 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !20, i64 0, !27, i64 8}
!103 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!104 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !105, i64 0}
!105 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !106, i64 0}
!106 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !107, i64 0}
!107 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!108 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !109, i64 0}
!109 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !110, i64 0}
!110 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !111, i64 0}
!111 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!112 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !113, i64 0}
!113 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !114, i64 0}
!114 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !115, i64 0}
!115 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!116 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !117, i64 0}
!117 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!118 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !119, i64 0}
!119 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!120 = !{!"_ZTSSt13unordered_mapIjSt3setIjSt4lessIjESaIjEESt4hashIjESt8equal_toIjESaISt4pairIKjS4_EEE", !121, i64 0}
!121 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt3setIjSt4lessIjESaIjEEESaIS7_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!122 = !{!"_ZTSN11spirv_cross11CompilerMSL7OptionsE", !123, i64 0, !53, i64 4, !53, i64 8, !53, i64 12, !53, i64 16, !53, i64 20, !53, i64 24, !53, i64 28, !53, i64 32, !53, i64 36, !53, i64 40, !53, i64 44, !53, i64 48, !53, i64 52, !53, i64 56, !53, i64 60, !53, i64 64, !53, i64 68, !53, i64 72, !53, i64 76, !6, i64 80, !6, i64 81, !6, i64 82, !6, i64 83, !6, i64 84, !6, i64 85, !6, i64 86, !6, i64 87, !6, i64 88, !6, i64 89, !6, i64 90, !6, i64 91, !6, i64 92, !124, i64 96, !6, i64 100, !6, i64 101, !6, i64 102, !6, i64 103, !6, i64 104, !6, i64 105, !6, i64 106, !6, i64 107, !6, i64 108, !6, i64 109, !6, i64 110, !6, i64 111, !6, i64 112, !6, i64 113, !6, i64 114, !6, i64 115, !6, i64 116, !6, i64 117, !6, i64 118, !53, i64 120, !125, i64 124, !6, i64 128, !6, i64 129, !6, i64 130, !6, i64 131, !6, i64 132, !6, i64 133, !6, i64 134, !6, i64 135, !6, i64 136}
!123 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options8PlatformE", !7, i64 0}
!124 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options19ArgumentBuffersTierE", !7, i64 0}
!125 = !{!"_ZTSN11spirv_cross11CompilerMSL7Options9IndexTypeE", !7, i64 0}
!126 = !{!"_ZTSSt3setIN11spirv_cross11CompilerMSL11SPVFuncImplESt4lessIS2_ESaIS2_EE", !127, i64 0}
!127 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE", !128, i64 0}
!128 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross11CompilerMSL11SPVFuncImplES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !129, i64 0, !131, i64 8}
!129 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEEE", !130, i64 0}
!130 = !{!"_ZTSSt4lessIN11spirv_cross11CompilerMSL11SPVFuncImplEE"}
!131 = !{!"_ZTSSt15_Rb_tree_header", !132, i64 0, !27, i64 32}
!132 = !{!"_ZTSSt18_Rb_tree_node_base", !133, i64 0, !20, i64 8, !20, i64 16, !20, i64 24}
!133 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!134 = !{!"_ZTSSt3mapIN11spirv_cross21LocationComponentPairENS0_26MSLShaderInterfaceVariableESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !135, i64 0}
!135 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !136, i64 0}
!136 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross21LocationComponentPairESt4pairIKS1_NS0_26MSLShaderInterfaceVariableEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !137, i64 0, !131, i64 8}
!137 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross21LocationComponentPairEEE", !138, i64 0}
!138 = !{!"_ZTSSt4lessIN11spirv_cross21LocationComponentPairEE"}
!139 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross26MSLShaderInterfaceVariableESt4hashIjESt8equal_toIjESaISt4pairIKjS1_EEE", !140, i64 0}
!140 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross26MSLShaderInterfaceVariableEESaIS4_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!141 = !{!"_ZTSSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE", !142, i64 0}
!142 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE", !143, i64 0}
!143 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !144, i64 0, !131, i64 8}
!144 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !145, i64 0}
!145 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!146 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_18MSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !147, i64 0}
!147 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_S2_INS0_18MSLResourceBindingEbEESaIS6_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!148 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingEjNS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_jEEE", !149, i64 0}
!149 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_jESaIS4_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS6_18_Mod_range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!150 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !53, i64 0}
!151 = !{!"_ZTSN11spirv_cross11CompilerMSL8TriStateE", !7, i64 0}
!152 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!153 = !{!"_ZTSSt3mapIjN11spirv_cross19MSLConstexprSamplerESt4lessIjESaISt4pairIKjS1_EEE", !154, i64 0}
!154 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !155, i64 0}
!155 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjN11spirv_cross19MSLConstexprSamplerEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !156, i64 0, !131, i64 8}
!156 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !157, i64 0}
!157 = !{!"_ZTSSt4lessIjE"}
!158 = !{!"_ZTSSt13unordered_mapIN11spirv_cross14SetBindingPairENS0_19MSLConstexprSamplerENS0_14InternalHasherESt8equal_toIS1_ESaISt4pairIKS1_S2_EEE", !159, i64 0}
!159 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairESt4pairIKS1_NS0_19MSLConstexprSamplerEESaIS5_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb0ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!160 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !161, i64 0, !27, i64 16, !162, i64 24}
!161 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !20, i64 0, !27, i64 8}
!162 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!163 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_12SPIRVariableELm8EEE", !164, i64 0, !27, i64 16, !165, i64 24}
!164 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_12SPIRVariableEEE", !20, i64 0, !27, i64 8}
!165 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_12SPIRVariableELm8EEE", !7, i64 0}
!166 = !{!"_ZTSSt3mapIN11spirv_cross14SetBindingPairESt4pairIjjESt4lessIS1_ESaIS2_IKS1_S3_EEE", !167, i64 0}
!167 = !{!"_ZTSSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !168, i64 0}
!168 = !{!"_ZTSNSt8_Rb_treeIN11spirv_cross14SetBindingPairESt4pairIKS1_S2_IjjEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !169, i64 0, !131, i64 8}
!169 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN11spirv_cross14SetBindingPairEEE", !170, i64 0}
!170 = !{!"_ZTSSt4lessIN11spirv_cross14SetBindingPairEE"}
!171 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !172, i64 0}
!172 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !20, i64 0, !27, i64 8, !31, i64 16, !27, i64 24, !32, i64 32, !20, i64 48}
!173 = !{i8 0, i8 2}
!174 = !{}
!175 = !{!10, !6, i64 10151}
!176 = !{!10, !6, i64 10125}
!177 = !{!10, !6, i64 10124}
!178 = !{!10, !6, i64 10123}
!179 = !{!10, !6, i64 10126}
!180 = !{!10, !6, i64 10154}
!181 = !{!12, !6, i64 2880}
!182 = !{!10, !6, i64 10117}
!183 = !{!10, !6, i64 10172}
!184 = !{!10, !6, i64 11194}
!185 = !{!10, !6, i64 11192}
!186 = !{!10, !6, i64 11193}
!187 = !{!10, !6, i64 11195}
!188 = !{!53, !53, i64 0}
!189 = !{!190, !20, i64 0}
!190 = !{!"_ZTSZN11spirv_cross11CompilerMSL23build_implicit_builtinsEvE3$_0", !20, i64 0, !20, i64 8, !20, i64 16, !20, i64 24, !20, i64 32, !20, i64 40, !20, i64 48, !20, i64 56, !20, i64 64, !20, i64 72, !20, i64 80, !20, i64 88, !20, i64 96, !20, i64 104, !20, i64 112, !20, i64 120, !20, i64 128, !20, i64 136, !20, i64 144, !20, i64 152, !20, i64 160, !20, i64 168, !20, i64 176, !20, i64 184, !20, i64 192, !20, i64 200, !20, i64 208, !20, i64 216, !20, i64 224}
!191 = !{!20, !20, i64 0}
!192 = !{!10, !6, i64 10152}
!193 = !{!10, !6, i64 10140}
!194 = !{!195, !95, i64 16}
!195 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !196, i64 0, !152, i64 12, !95, i64 16, !53, i64 20, !53, i64 24, !53, i64 28, !62, i64 32, !198, i64 88, !53, i64 120, !6, i64 124, !6, i64 125, !201, i64 128, !101, i64 136, !62, i64 192, !202, i64 248, !203, i64 272, !203, i64 276, !90, i64 280}
!196 = !{!"_ZTSN11spirv_cross8IVariantE", !197, i64 8}
!197 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !53, i64 0}
!198 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !199, i64 0, !27, i64 16, !200, i64 24}
!199 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !20, i64 0, !27, i64 8}
!200 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!201 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!202 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !203, i64 0, !204, i64 4, !6, i64 8, !6, i64 9, !6, i64 10, !53, i64 12, !205, i64 16, !206, i64 20}
!203 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !53, i64 0}
!204 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!205 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!206 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!207 = !{!195, !53, i64 20}
!208 = !{!195, !53, i64 24}
!209 = !{!195, !152, i64 12}
!210 = !{!195, !6, i64 124}
!211 = !{!195, !53, i64 120}
!212 = !{!195, !201, i64 128}
!213 = !{!201, !201, i64 0}
!214 = !{!10, !53, i64 9904}
!215 = !{!10, !53, i64 9940}
!216 = !{!10, !53, i64 9936}
!217 = !{!10, !53, i64 9908}
!218 = !{!10, !53, i64 9920}
!219 = !{!10, !53, i64 9924}
!220 = !{!10, !53, i64 9928}
!221 = !{!10, !53, i64 9932}
!222 = !{!10, !6, i64 10149}
!223 = !{!10, !53, i64 9944}
!224 = !{!10, !53, i64 9948}
!225 = !{!10, !53, i64 9964}
!226 = !{!10, !53, i64 9952}
!227 = !{!10, !53, i64 9956}
!228 = !{!10, !53, i64 10060}
!229 = !{!10, !53, i64 9960}
!230 = !{!10, !6, i64 10032}
!231 = !{!10, !53, i64 9912}
!232 = !{!10, !53, i64 9916}
!233 = !{!10, !53, i64 9968}
!234 = !{!10, !53, i64 9972}
!235 = !{!10, !53, i64 9988}
!236 = !{!10, !6, i64 11189}
!237 = !{!10, !53, i64 10056}
!238 = !{!10, !53, i64 9992}
!239 = !{!10, !53, i64 10076}
!240 = !{!10, !53, i64 9996}
!241 = !{!10, !53, i64 10080}
!242 = !{!10, !53, i64 10000}
!243 = !{!10, !53, i64 10084}
!244 = !{!10, !53, i64 10004}
!245 = !{!246, !20, i64 0}
!246 = !{!"_ZTSZN11spirv_cross11CompilerMSL23build_implicit_builtinsEvE3$_1", !20, i64 0, !20, i64 8}
!247 = !{!10, !53, i64 9980}
!248 = !{!10, !53, i64 9984}


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