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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments" = type <{ %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [6 x i8] }>
%"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments" = type <{ %"class.spirv_cross::TypedID.350", [4 x i8], ptr, i8, i8, i8, [5 x i8] }>
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", i32, i32, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.415", i8, i8, i8, ptr }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"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.spirv_cross::TypedID.415" = type { i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"struct.spirv_cross::MSLConstexprSampler" = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, i32, i32, i32, i32, i32, i32, [4 x i32], i32, i32, i32, i8, i8, i8, i8 }
%"class.spirv_cross::CompilerMSL" = type <{ %"class.spirv_cross::CompilerGLSL", %"class.std::unordered_map.277", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [2 x i8], %"struct.spirv_cross::CompilerMSL::Options", %"class.std::set", %"class.std::map", %"class.std::unordered_map.299", %"class.std::map", %"class.std::unordered_map.299", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::unordered_map.213", %"class.std::set.313", %"class.std::set.313", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.319", %"class.std::unordered_map.336", i32, i32, i32, [8 x i32], %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350", i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8], %"class.std::map.351", %"class.std::unordered_map.357", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.374", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::SmallVector.377", %"class.std::map.380", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_set.386", [8 x i32], i32, i32, i8, i8, [6 x i8] }>
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.277" = type { %"class.std::_Hashtable.278" }
%"class.std::_Hashtable.278" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerMSL::Options" = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8], i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8] }>
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::CompilerMSL::SPVFuncImpl, spirv_cross::CompilerMSL::SPVFuncImpl, std::_Identity<spirv_cross::CompilerMSL::SPVFuncImpl>, std::less<spirv_cross::CompilerMSL::SPVFuncImpl>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree.294" }
%"class.std::_Rb_tree.294" = type { %"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<spirv_cross::LocationComponentPair, std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>, std::_Select1st<std::pair<const spirv_cross::LocationComponentPair, spirv_cross::MSLShaderInterfaceVariable>>, std::less<spirv_cross::LocationComponentPair>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.299" = type { %"class.std::_Hashtable.300" }
%"class.std::_Hashtable.300" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::set.313" = type { %"class.std::_Rb_tree.314" }
%"class.std::_Rb_tree.314" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::unordered_map.319" = type { %"class.std::_Hashtable.320" }
%"class.std::_Hashtable.320" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.336" = type { %"class.std::_Hashtable.337" }
%"class.std::_Hashtable.337" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.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.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.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::SPIRCombinedImageSampler" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::TypedID.350" }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.163 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.164 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.165 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1066 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1116 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1214 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1215 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1216 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1217 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1218 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1219 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1220 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1221 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1222 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1223 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1224 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1225 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1226 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1227 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1228 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1229 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1230 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1231 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1232 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1233 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1234 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.1235 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.1236 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1237 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1238 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1239 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1240 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1241 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1242 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1243 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1244 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1245 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1246 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1247 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1248 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1249 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1250 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1251 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1252 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1253 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1254 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1255 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1256 = external hidden unnamed_addr constant [10 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

; 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 nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

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

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

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

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

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

declare noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #6

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482), i8 noundef zeroext) #3 align 2

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #6

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

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

218:                                              ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %219 = load ptr, ptr %17, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %219, i32 0, i32 5
  %221 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %220)
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %223, label %226

223:                                              ; preds = %218
  %224 = load ptr, ptr %17, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %224, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %225, i64 4, i1 false), !tbaa.struct !9
  br label %229

226:                                              ; preds = %218
  %227 = load ptr, ptr %17, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %227, i32 0, i32 1
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %228)
  br label %229

229:                                              ; preds = %226, %223
  %230 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %18)
  %231 = call noundef ptr @_ZNK11spirv_cross11CompilerMSL22find_constexpr_samplerEj(ptr noundef nonnull align 8 dereferenceable(12482) %194, i32 noundef %230)
  store ptr %231, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  %232 = load ptr, ptr %17, align 8, !tbaa !5
  %233 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %232, i32 0, i32 1
  %234 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %233)
  %235 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %234, i32 noundef 12)
  %236 = zext i1 %235 to i8
  store i8 %236, ptr %16, align 1, !tbaa !21
  br label %237

237:                                              ; preds = %229, %4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  store i1 false, ptr %19, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #8
  store i8 1, ptr %20, align 1, !tbaa !21
  %238 = load i8, ptr %16, align 1, !tbaa !21, !range !22, !noundef !23
  %239 = trunc i8 %238 to i1
  br i1 %239, label %522, label %240

240:                                              ; preds = %237
  %241 = load ptr, ptr %15, align 8, !tbaa !5
  %242 = invoke noundef zeroext i1 @_ZL27needs_chroma_reconstructionPKN11spirv_cross19MSLConstexprSamplerE(ptr noundef %241)
          to label %243 unwind label %257

243:                                              ; preds = %240
  br i1 %242, label %244, label %296

244:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #8
  %245 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %246 unwind label %261

246:                                              ; preds = %244
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %245, i1 noundef zeroext true)
          to label %247 unwind label %261

247:                                              ; preds = %246
  %248 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %249 unwind label %265

249:                                              ; preds = %247
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 1, ptr %24, align 4, !tbaa !10
  br label %250

250:                                              ; preds = %278, %249
  %251 = load i32, ptr %24, align 4, !tbaa !10
  %252 = load ptr, ptr %15, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.spirv_cross::MSLConstexprSampler", ptr %252, i32 0, i32 12
  %254 = load i32, ptr %253, align 4, !tbaa !24
  %255 = icmp ult i32 %251, %254
  br i1 %255, label %270, label %256

256:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %295

257:                                              ; preds = %525, %491, %443, %376, %240
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %21, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %22, align 4
  br label %2590

261:                                              ; preds = %246, %244
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %21, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %22, align 4
  br label %269

265:                                              ; preds = %247
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %21, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  br label %269

269:                                              ; preds = %265, %261
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #8
  br label %2590

270:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #8
  %271 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %272 unwind label %281

272:                                              ; preds = %270
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %271, i1 noundef zeroext true)
          to label %273 unwind label %281

273:                                              ; preds = %272
  %274 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 94
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_RjEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %274, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %275 unwind label %285

275:                                              ; preds = %273
  %276 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %277 unwind label %289

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

278:                                              ; preds = %277
  %279 = load i32, ptr %24, align 4, !tbaa !10
  %280 = add i32 %279, 1
  store i32 %280, ptr %24, align 4, !tbaa !10
  br label %250, !llvm.loop !37

281:                                              ; preds = %272, %270
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %21, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %22, align 4
  br label %294

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

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

293:                                              ; preds = %289, %285
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %294

294:                                              ; preds = %293, %281
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %2590

295:                                              ; preds = %256
  br label %348

296:                                              ; preds = %243
  %297 = load ptr, ptr %15, align 8, !tbaa !5
  %298 = icmp ne ptr %297, null
  br i1 %298, label %299, label %304

299:                                              ; preds = %296
  %300 = load ptr, ptr %15, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.spirv_cross::MSLConstexprSampler", ptr %300, i32 0, i32 24
  %302 = load i8, ptr %301, align 1, !tbaa !39, !range !22, !noundef !23
  %303 = trunc i8 %302 to i1
  br i1 %303, label %347, label %304

304:                                              ; preds = %299, %296
  %305 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %306 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %305, i32 0, i32 25
  %307 = load i8, ptr %306, align 1, !tbaa !40, !range !22, !noundef !23
  %308 = trunc i8 %307 to i1
  br i1 %308, label %309, label %347

309:                                              ; preds = %304
  %310 = load ptr, ptr %7, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %310, i32 0, i32 0
  %312 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %311, i32 0, i32 4
  %313 = load i8, ptr %312, align 1, !tbaa !200, !range !22, !noundef !23
  %314 = trunc i8 %313 to i1
  br i1 %314, label %315, label %347

315:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %316 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %317 unwind label %333

317:                                              ; preds = %315
  %318 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %316)
          to label %319 unwind label %333

319:                                              ; preds = %317
  store ptr %318, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #8
  %320 = load ptr, ptr %27, align 8, !tbaa !5
  %321 = icmp ne ptr %320, null
  br i1 %321, label %322, label %325

322:                                              ; preds = %319
  %323 = load ptr, ptr %27, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %323, i32 0, i32 2
  br label %326

325:                                              ; preds = %319
  br label %326

326:                                              ; preds = %325, %322
  %327 = phi ptr [ %324, %322 ], [ %9, %325 ]
  %328 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %327)
          to label %329 unwind label %337

329:                                              ; preds = %326
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %328, i1 noundef zeroext true)
          to label %330 unwind label %337

330:                                              ; preds = %329
  %331 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %332 unwind label %341

332:                                              ; preds = %330
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %347

333:                                              ; preds = %317, %315
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %21, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %22, align 4
  br label %346

337:                                              ; preds = %329, %326
  %338 = landingpad { ptr, i32 }
          cleanup
  %339 = extractvalue { ptr, i32 } %338, 0
  store ptr %339, ptr %21, align 8
  %340 = extractvalue { ptr, i32 } %338, 1
  store i32 %340, ptr %22, align 4
  br label %345

341:                                              ; preds = %330
  %342 = landingpad { ptr, i32 }
          cleanup
  %343 = extractvalue { ptr, i32 } %342, 0
  store ptr %343, ptr %21, align 8
  %344 = extractvalue { ptr, i32 } %342, 1
  store i32 %344, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  br label %345

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

346:                                              ; preds = %345, %333
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %2590

347:                                              ; preds = %332, %309, %304, %299
  br label %348

348:                                              ; preds = %347, %295
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %349, i32 0, i32 14
  %351 = load i8, ptr %350, align 1, !tbaa !201, !range !22, !noundef !23
  %352 = trunc i8 %351 to i1
  br i1 %352, label %353, label %368

353:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %354 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %355 unwind label %359

355:                                              ; preds = %353
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %354, i1 noundef zeroext true)
          to label %356 unwind label %359

356:                                              ; preds = %355
  %357 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %358 unwind label %363

358:                                              ; preds = %356
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %368

359:                                              ; preds = %355, %353
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %21, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %22, align 4
  br label %367

363:                                              ; preds = %356
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %21, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %367

367:                                              ; preds = %363, %359
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %2590

368:                                              ; preds = %358, %348
  %369 = load ptr, ptr %7, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %369, i32 0, i32 0
  %371 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %370, i32 0, i32 3
  %372 = load i8, ptr %371, align 8, !tbaa !202, !range !22, !noundef !23
  %373 = trunc i8 %372 to i1
  br i1 %373, label %394, label %374

374:                                              ; preds = %368
  %375 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br i1 %375, label %379, label %376

376:                                              ; preds = %374
  %377 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.55)
          to label %378 unwind label %257

378:                                              ; preds = %376
  br label %379

379:                                              ; preds = %378, %374
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  %380 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %381 unwind label %385

381:                                              ; preds = %379
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(12482) %194, i32 noundef %380)
          to label %382 unwind label %385

382:                                              ; preds = %381
  %383 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %384 unwind label %389

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

385:                                              ; preds = %381, %379
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %21, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %22, align 4
  br label %393

389:                                              ; preds = %382
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %21, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %393

393:                                              ; preds = %389, %385
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %2590

394:                                              ; preds = %384, %368
  %395 = load ptr, ptr %15, align 8, !tbaa !5
  %396 = icmp ne ptr %395, null
  br i1 %396, label %397, label %402

397:                                              ; preds = %394
  %398 = load ptr, ptr %15, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.spirv_cross::MSLConstexprSampler", ptr %398, i32 0, i32 24
  %400 = load i8, ptr %399, align 1, !tbaa !39, !range !22, !noundef !23
  %401 = trunc i8 %400 to i1
  br i1 %401, label %435, label %402

402:                                              ; preds = %397, %394
  %403 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %404 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %403, i32 0, i32 25
  %405 = load i8, ptr %404, align 1, !tbaa !40, !range !22, !noundef !23
  %406 = trunc i8 %405 to i1
  br i1 %406, label %407, label %435

407:                                              ; preds = %402
  %408 = load ptr, ptr %7, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %408, i32 0, i32 0
  %410 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %409, i32 0, i32 4
  %411 = load i8, ptr %410, align 1, !tbaa !200, !range !22, !noundef !23
  %412 = trunc i8 %411 to i1
  br i1 %412, label %413, label %435

413:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %414 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %415 unwind label %421

415:                                              ; preds = %413
  invoke void @_ZN11spirv_cross11CompilerMSL21to_swizzle_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(12482) %194, i32 noundef %414)
          to label %416 unwind label %421

416:                                              ; preds = %415
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %417 unwind label %425

417:                                              ; preds = %416
  %418 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %419 unwind label %429

419:                                              ; preds = %417
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  %420 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 78
  store i8 1, ptr %420, align 2, !tbaa !203
  br label %435

421:                                              ; preds = %415, %413
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %21, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %22, align 4
  br label %434

425:                                              ; preds = %416
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %21, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %22, align 4
  br label %433

429:                                              ; preds = %417
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %21, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %433

433:                                              ; preds = %429, %425
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %434

434:                                              ; preds = %433, %421
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  br label %2590

435:                                              ; preds = %419, %407, %402, %397
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %436, i32 0, i32 14
  %438 = load i8, ptr %437, align 1, !tbaa !201, !range !22, !noundef !23
  %439 = trunc i8 %438 to i1
  br i1 %439, label %440, label %473

440:                                              ; preds = %435
  %441 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %442 = trunc i8 %441 to i1
  br i1 %442, label %443, label %449

443:                                              ; preds = %440
  %444 = load ptr, ptr %7, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %444, i32 0, i32 7
  %446 = load i32, ptr %445, align 8, !tbaa !204
  %447 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %446)
          to label %448 unwind label %257

448:                                              ; preds = %443
  br label %449

449:                                              ; preds = %448, %440
  %450 = phi i1 [ false, %440 ], [ %447, %448 ]
  %451 = zext i1 %450 to i8
  store i8 %451, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  %452 = load ptr, ptr %7, align 8, !tbaa !5
  %453 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %452, i32 0, i32 7
  %454 = load i32, ptr %453, align 8, !tbaa !204
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %454, i1 noundef zeroext true)
          to label %455 unwind label %459

455:                                              ; preds = %449
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %456 unwind label %463

456:                                              ; preds = %455
  %457 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %33)
          to label %458 unwind label %467

458:                                              ; preds = %456
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  br label %473

459:                                              ; preds = %449
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %21, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %22, align 4
  br label %472

463:                                              ; preds = %455
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %21, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %22, align 4
  br label %471

467:                                              ; preds = %456
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %21, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %471

471:                                              ; preds = %467, %463
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %472

472:                                              ; preds = %471, %459
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  br label %2590

473:                                              ; preds = %458, %435
  %474 = load ptr, ptr %7, align 8, !tbaa !5
  %475 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %474, i32 0, i32 9
  %476 = load i32, ptr %475, align 8, !tbaa !205
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %478, label %521

478:                                              ; preds = %473
  %479 = load ptr, ptr %7, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %479, i32 0, i32 14
  %481 = load i8, ptr %480, align 1, !tbaa !201, !range !22, !noundef !23
  %482 = trunc i8 %481 to i1
  br i1 %482, label %488, label %483

483:                                              ; preds = %478
  %484 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %485 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %484, i32 0, i32 25
  %486 = load i8, ptr %485, align 1, !tbaa !40, !range !22, !noundef !23
  %487 = trunc i8 %486 to i1
  br i1 %487, label %488, label %521

488:                                              ; preds = %483, %478
  %489 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %490 = trunc i8 %489 to i1
  br i1 %490, label %491, label %497

491:                                              ; preds = %488
  %492 = load ptr, ptr %7, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %492, i32 0, i32 9
  %494 = load i32, ptr %493, align 8, !tbaa !205
  %495 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %494)
          to label %496 unwind label %257

496:                                              ; preds = %491
  br label %497

497:                                              ; preds = %496, %488
  %498 = phi i1 [ false, %488 ], [ %495, %496 ]
  %499 = zext i1 %498 to i8
  store i8 %499, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #8
  %500 = load ptr, ptr %7, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %500, i32 0, i32 9
  %502 = load i32, ptr %501, align 8, !tbaa !205
  invoke void @_ZN11spirv_cross11CompilerMSL21to_component_argumentB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(12482) %194, i32 noundef %502)
          to label %503 unwind label %507

503:                                              ; preds = %497
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %504 unwind label %511

504:                                              ; preds = %503
  %505 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %506 unwind label %515

506:                                              ; preds = %504
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  br label %521

507:                                              ; preds = %497
  %508 = landingpad { ptr, i32 }
          cleanup
  %509 = extractvalue { ptr, i32 } %508, 0
  store ptr %509, ptr %21, align 8
  %510 = extractvalue { ptr, i32 } %508, 1
  store i32 %510, ptr %22, align 4
  br label %520

511:                                              ; preds = %503
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %21, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %22, align 4
  br label %519

515:                                              ; preds = %504
  %516 = landingpad { ptr, i32 }
          cleanup
  %517 = extractvalue { ptr, i32 } %516, 0
  store ptr %517, ptr %21, align 8
  %518 = extractvalue { ptr, i32 } %516, 1
  store i32 %518, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %519

519:                                              ; preds = %515, %511
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %520

520:                                              ; preds = %519, %507
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  br label %2590

521:                                              ; preds = %506, %483, %473
  br label %522

522:                                              ; preds = %521, %237
  %523 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %524 = trunc i8 %523 to i1
  br i1 %524, label %525, label %531

525:                                              ; preds = %522
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %526, i32 0, i32 1
  %528 = load i32, ptr %527, align 8, !tbaa !206
  %529 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %528)
          to label %530 unwind label %257

530:                                              ; preds = %525
  br label %531

531:                                              ; preds = %530, %522
  %532 = phi i1 [ false, %522 ], [ %529, %530 ]
  %533 = zext i1 %532 to i8
  store i8 %533, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #8
  %534 = load ptr, ptr %7, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %534, i32 0, i32 1
  %536 = load i32, ptr %535, align 8, !tbaa !206
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %536, i1 noundef zeroext true)
          to label %537 unwind label %552

537:                                              ; preds = %531
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %538 = load ptr, ptr %7, align 8, !tbaa !5
  %539 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %538, i32 0, i32 1
  %540 = load i32, ptr %539, align 8, !tbaa !206
  %541 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %540)
          to label %542 unwind label %556

542:                                              ; preds = %537
  store ptr %541, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #8
  %543 = load ptr, ptr %38, align 8, !tbaa !5
  %544 = invoke noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %543)
          to label %545 unwind label %560

545:                                              ; preds = %542
  %546 = zext i1 %544 to i8
  store i8 %546, ptr %39, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #8
  store i8 0, ptr %40, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %547 unwind label %564

547:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  store i32 0, ptr %42, align 4, !tbaa !10
  %548 = load ptr, ptr %10, align 8, !tbaa !5
  %549 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %548, i32 0, i32 14
  %550 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %549, i32 0, i32 1
  %551 = load i32, ptr %550, align 4, !tbaa !207
  switch i32 %551, label %1009 [
    i32 0, label %568
    i32 5, label %674
    i32 6, label %812
    i32 1, label %815
    i32 2, label %879
    i32 3, label %943
  ]

552:                                              ; preds = %531
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %21, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %22, align 4
  br label %2589

556:                                              ; preds = %537
  %557 = landingpad { ptr, i32 }
          cleanup
  %558 = extractvalue { ptr, i32 } %557, 0
  store ptr %558, ptr %21, align 8
  %559 = extractvalue { ptr, i32 } %557, 1
  store i32 %559, ptr %22, align 4
  br label %2588

560:                                              ; preds = %542
  %561 = landingpad { ptr, i32 }
          cleanup
  %562 = extractvalue { ptr, i32 } %561, 0
  store ptr %562, ptr %21, align 8
  %563 = extractvalue { ptr, i32 } %561, 1
  store i32 %563, ptr %22, align 4
  br label %2587

564:                                              ; preds = %545
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %21, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %22, align 4
  br label %2586

568:                                              ; preds = %547
  %569 = load ptr, ptr %38, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %569, i32 0, i32 4
  %571 = load i32, ptr %570, align 8, !tbaa !220
  %572 = icmp ugt i32 %571, 1
  br i1 %572, label %573, label %586

573:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %574 unwind label %577

574:                                              ; preds = %573
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str.163)
          to label %575 unwind label %581

575:                                              ; preds = %574
  %576 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  br label %586

577:                                              ; preds = %573
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %21, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %22, align 4
  br label %585

581:                                              ; preds = %574
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %21, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %585

585:                                              ; preds = %581, %577
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  br label %2585

586:                                              ; preds = %575, %568
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %587, i32 0, i32 0
  %589 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %588, i32 0, i32 3
  %590 = load i8, ptr %589, align 8, !tbaa !202, !range !22, !noundef !23
  %591 = trunc i8 %590 to i1
  br i1 %591, label %592, label %619

592:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %593 unwind label %600

593:                                              ; preds = %592
  %594 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %595 = trunc i8 %594 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %48, i1 noundef zeroext %595)
          to label %596 unwind label %604

596:                                              ; preds = %593
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %597 unwind label %608

597:                                              ; preds = %596
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef @.str.53)
          to label %598 unwind label %612

598:                                              ; preds = %597
  %599 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  br label %635

600:                                              ; preds = %592
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %21, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %22, align 4
  br label %618

604:                                              ; preds = %593
  %605 = landingpad { ptr, i32 }
          cleanup
  %606 = extractvalue { ptr, i32 } %605, 0
  store ptr %606, ptr %21, align 8
  %607 = extractvalue { ptr, i32 } %605, 1
  store i32 %607, ptr %22, align 4
  br label %617

608:                                              ; preds = %596
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %21, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %22, align 4
  br label %616

612:                                              ; preds = %597
  %613 = landingpad { ptr, i32 }
          cleanup
  %614 = extractvalue { ptr, i32 } %613, 0
  store ptr %614, ptr %21, align 8
  %615 = extractvalue { ptr, i32 } %613, 1
  store i32 %615, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %616

616:                                              ; preds = %612, %608
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %617

617:                                              ; preds = %616, %604
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %618

618:                                              ; preds = %617, %600
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  br label %2585

619:                                              ; preds = %586
  %620 = load ptr, ptr %38, align 8, !tbaa !5
  %621 = invoke noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %620)
          to label %622 unwind label %626

622:                                              ; preds = %619
  br i1 %621, label %623, label %634

623:                                              ; preds = %622
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #8
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef nonnull align 8 dereferenceable(32) %41, i32 noundef 1)
          to label %624 unwind label %630

624:                                              ; preds = %623
  %625 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  br label %634

626:                                              ; preds = %2227, %2219, %2213, %2122, %2113, %2089, %1858, %1852, %1848, %1800, %1751, %1563, %1557, %1542, %1534, %1516, %1484, %1339, %1337, %1219, %1160, %1024, %997, %949, %930, %866, %812, %619
  %627 = landingpad { ptr, i32 }
          cleanup
  %628 = extractvalue { ptr, i32 } %627, 0
  store ptr %628, ptr %21, align 8
  %629 = extractvalue { ptr, i32 } %627, 1
  store i32 %629, ptr %22, align 4
  br label %2585

630:                                              ; preds = %623
  %631 = landingpad { ptr, i32 }
          cleanup
  %632 = extractvalue { ptr, i32 } %631, 0
  store ptr %632, ptr %21, align 8
  %633 = extractvalue { ptr, i32 } %631, 1
  store i32 %633, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  br label %2585

634:                                              ; preds = %624, %622
  br label %635

635:                                              ; preds = %634, %598
  %636 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %637 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %636, i32 0, i32 31
  %638 = load i8, ptr %637, align 1, !tbaa !221, !range !22, !noundef !23
  %639 = trunc i8 %638 to i1
  br i1 %639, label %640, label %673

640:                                              ; preds = %635
  %641 = load ptr, ptr %7, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %641, i32 0, i32 0
  %643 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %642, i32 0, i32 3
  %644 = load i8, ptr %643, align 8, !tbaa !202, !range !22, !noundef !23
  %645 = trunc i8 %644 to i1
  br i1 %645, label %646, label %659

646:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %647 unwind label %650

647:                                              ; preds = %646
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef @.str.1116)
          to label %648 unwind label %654

648:                                              ; preds = %647
  %649 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  br label %672

650:                                              ; preds = %646
  %651 = landingpad { ptr, i32 }
          cleanup
  %652 = extractvalue { ptr, i32 } %651, 0
  store ptr %652, ptr %21, align 8
  %653 = extractvalue { ptr, i32 } %651, 1
  store i32 %653, ptr %22, align 4
  br label %658

654:                                              ; preds = %647
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %21, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %658

658:                                              ; preds = %654, %650
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  br label %2585

659:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %660 unwind label %663

660:                                              ; preds = %659
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef @.str.1215)
          to label %661 unwind label %667

661:                                              ; preds = %660
  %662 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  br label %672

663:                                              ; preds = %659
  %664 = landingpad { ptr, i32 }
          cleanup
  %665 = extractvalue { ptr, i32 } %664, 0
  store ptr %665, ptr %21, align 8
  %666 = extractvalue { ptr, i32 } %664, 1
  store i32 %666, ptr %22, align 4
  br label %671

667:                                              ; preds = %660
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %21, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %671

671:                                              ; preds = %667, %663
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  br label %2585

672:                                              ; preds = %661, %648
  br label %673

673:                                              ; preds = %672, %635
  store i32 1, ptr %42, align 4, !tbaa !10
  br label %1010

674:                                              ; preds = %547
  %675 = load ptr, ptr %38, align 8, !tbaa !5
  %676 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %675, i32 0, i32 4
  %677 = load i32, ptr %676, align 8, !tbaa !220
  %678 = icmp ugt i32 %677, 1
  br i1 %678, label %679, label %692

679:                                              ; preds = %674
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %680 unwind label %683

680:                                              ; preds = %679
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef @.str.163)
          to label %681 unwind label %687

681:                                              ; preds = %680
  %682 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  br label %692

683:                                              ; preds = %679
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %21, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %22, align 4
  br label %691

687:                                              ; preds = %680
  %688 = landingpad { ptr, i32 }
          cleanup
  %689 = extractvalue { ptr, i32 } %688, 0
  store ptr %689, ptr %21, align 8
  %690 = extractvalue { ptr, i32 } %688, 1
  store i32 %690, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %691

691:                                              ; preds = %687, %683
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  br label %2585

692:                                              ; preds = %681, %674
  %693 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %694 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %693, i32 0, i32 43
  %695 = load i8, ptr %694, align 4, !tbaa !222, !range !22, !noundef !23
  %696 = trunc i8 %695 to i1
  br i1 %696, label %697, label %724

697:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %698 unwind label %705

698:                                              ; preds = %697
  %699 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %700 = trunc i8 %699 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %59, i1 noundef zeroext %700)
          to label %701 unwind label %709

701:                                              ; preds = %698
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %702 unwind label %713

702:                                              ; preds = %701
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef @.str.53)
          to label %703 unwind label %717

703:                                              ; preds = %702
  %704 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  br label %811

705:                                              ; preds = %697
  %706 = landingpad { ptr, i32 }
          cleanup
  %707 = extractvalue { ptr, i32 } %706, 0
  store ptr %707, ptr %21, align 8
  %708 = extractvalue { ptr, i32 } %706, 1
  store i32 %708, ptr %22, align 4
  br label %723

709:                                              ; preds = %698
  %710 = landingpad { ptr, i32 }
          cleanup
  %711 = extractvalue { ptr, i32 } %710, 0
  store ptr %711, ptr %21, align 8
  %712 = extractvalue { ptr, i32 } %710, 1
  store i32 %712, ptr %22, align 4
  br label %722

713:                                              ; preds = %701
  %714 = landingpad { ptr, i32 }
          cleanup
  %715 = extractvalue { ptr, i32 } %714, 0
  store ptr %715, ptr %21, align 8
  %716 = extractvalue { ptr, i32 } %714, 1
  store i32 %716, ptr %22, align 4
  br label %721

717:                                              ; preds = %702
  %718 = landingpad { ptr, i32 }
          cleanup
  %719 = extractvalue { ptr, i32 } %718, 0
  store ptr %719, ptr %21, align 8
  %720 = extractvalue { ptr, i32 } %718, 1
  store i32 %720, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %721

721:                                              ; preds = %717, %713
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  br label %722

722:                                              ; preds = %721, %709
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %723

723:                                              ; preds = %722, %705
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  br label %2585

724:                                              ; preds = %692
  %725 = load ptr, ptr %7, align 8, !tbaa !5
  %726 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %725, i32 0, i32 0
  %727 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %726, i32 0, i32 3
  %728 = load i8, ptr %727, align 8, !tbaa !202, !range !22, !noundef !23
  %729 = trunc i8 %728 to i1
  br i1 %729, label %730, label %810

730:                                              ; preds = %724
  %731 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %732 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %731, i32 0, i32 2
  %733 = load i32, ptr %732, align 4, !tbaa !223
  %734 = icmp ugt i32 %733, 0
  br i1 %734, label %735, label %762

735:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %736 unwind label %743

736:                                              ; preds = %735
  %737 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %738 = trunc i8 %737 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %63, i1 noundef zeroext %738)
          to label %739 unwind label %747

739:                                              ; preds = %736
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef @.str.1216, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %740 unwind label %751

740:                                              ; preds = %739
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef @.str.53)
          to label %741 unwind label %755

741:                                              ; preds = %740
  %742 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  br label %809

743:                                              ; preds = %735
  %744 = landingpad { ptr, i32 }
          cleanup
  %745 = extractvalue { ptr, i32 } %744, 0
  store ptr %745, ptr %21, align 8
  %746 = extractvalue { ptr, i32 } %744, 1
  store i32 %746, ptr %22, align 4
  br label %761

747:                                              ; preds = %736
  %748 = landingpad { ptr, i32 }
          cleanup
  %749 = extractvalue { ptr, i32 } %748, 0
  store ptr %749, ptr %21, align 8
  %750 = extractvalue { ptr, i32 } %748, 1
  store i32 %750, ptr %22, align 4
  br label %760

751:                                              ; preds = %739
  %752 = landingpad { ptr, i32 }
          cleanup
  %753 = extractvalue { ptr, i32 } %752, 0
  store ptr %753, ptr %21, align 8
  %754 = extractvalue { ptr, i32 } %752, 1
  store i32 %754, ptr %22, align 4
  br label %759

755:                                              ; preds = %740
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %21, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %759

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

760:                                              ; preds = %759, %747
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %761

761:                                              ; preds = %760, %743
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  br label %2585

762:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %763 unwind label %775

763:                                              ; preds = %762
  %764 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %765 = trunc i8 %764 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %69, i1 noundef zeroext %765)
          to label %766 unwind label %779

766:                                              ; preds = %763
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef @.str.1216, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %767 unwind label %783

767:                                              ; preds = %766
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef @.str.55)
          to label %768 unwind label %787

768:                                              ; preds = %767
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #8
  %769 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %770 unwind label %791

770:                                              ; preds = %768
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %769, i1 noundef zeroext true)
          to label %771 unwind label %791

771:                                              ; preds = %770
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 8 dereferenceable(32) %70)
          to label %772 unwind label %795

772:                                              ; preds = %771
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef @.str.53)
          to label %773 unwind label %799

773:                                              ; preds = %772
  %774 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  br label %809

775:                                              ; preds = %762
  %776 = landingpad { ptr, i32 }
          cleanup
  %777 = extractvalue { ptr, i32 } %776, 0
  store ptr %777, ptr %21, align 8
  %778 = extractvalue { ptr, i32 } %776, 1
  store i32 %778, ptr %22, align 4
  br label %808

779:                                              ; preds = %763
  %780 = landingpad { ptr, i32 }
          cleanup
  %781 = extractvalue { ptr, i32 } %780, 0
  store ptr %781, ptr %21, align 8
  %782 = extractvalue { ptr, i32 } %780, 1
  store i32 %782, ptr %22, align 4
  br label %807

783:                                              ; preds = %766
  %784 = landingpad { ptr, i32 }
          cleanup
  %785 = extractvalue { ptr, i32 } %784, 0
  store ptr %785, ptr %21, align 8
  %786 = extractvalue { ptr, i32 } %784, 1
  store i32 %786, ptr %22, align 4
  br label %806

787:                                              ; preds = %767
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %21, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %22, align 4
  br label %805

791:                                              ; preds = %770, %768
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %21, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %22, align 4
  br label %804

795:                                              ; preds = %771
  %796 = landingpad { ptr, i32 }
          cleanup
  %797 = extractvalue { ptr, i32 } %796, 0
  store ptr %797, ptr %21, align 8
  %798 = extractvalue { ptr, i32 } %796, 1
  store i32 %798, ptr %22, align 4
  br label %803

799:                                              ; preds = %772
  %800 = landingpad { ptr, i32 }
          cleanup
  %801 = extractvalue { ptr, i32 } %800, 0
  store ptr %801, ptr %21, align 8
  %802 = extractvalue { ptr, i32 } %800, 1
  store i32 %802, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %803

803:                                              ; preds = %799, %795
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %804

804:                                              ; preds = %803, %791
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %805

805:                                              ; preds = %804, %787
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  br label %806

806:                                              ; preds = %805, %783
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  br label %807

807:                                              ; preds = %806, %779
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  br label %808

808:                                              ; preds = %807, %775
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  br label %2585

809:                                              ; preds = %773, %741
  br label %810

810:                                              ; preds = %809, %724
  br label %811

811:                                              ; preds = %810, %703
  store i32 1, ptr %42, align 4, !tbaa !10
  br label %1010

812:                                              ; preds = %547
  %813 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.1217)
          to label %814 unwind label %626

814:                                              ; preds = %812
  store i32 2, ptr %42, align 4, !tbaa !10
  br label %1010

815:                                              ; preds = %547
  %816 = load ptr, ptr %38, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %816, i32 0, i32 4
  %818 = load i32, ptr %817, align 8, !tbaa !220
  %819 = icmp ugt i32 %818, 2
  br i1 %819, label %820, label %833

820:                                              ; preds = %815
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %821 unwind label %824

821:                                              ; preds = %820
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef @.str.164)
          to label %822 unwind label %828

822:                                              ; preds = %821
  %823 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #8
  br label %833

824:                                              ; preds = %820
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %21, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %22, align 4
  br label %832

828:                                              ; preds = %821
  %829 = landingpad { ptr, i32 }
          cleanup
  %830 = extractvalue { ptr, i32 } %829, 0
  store ptr %830, ptr %21, align 8
  %831 = extractvalue { ptr, i32 } %829, 1
  store i32 %831, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  br label %832

832:                                              ; preds = %828, %824
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #8
  br label %2585

833:                                              ; preds = %822, %815
  %834 = load ptr, ptr %7, align 8, !tbaa !5
  %835 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %834, i32 0, i32 0
  %836 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %835, i32 0, i32 3
  %837 = load i8, ptr %836, align 8, !tbaa !202, !range !22, !noundef !23
  %838 = trunc i8 %837 to i1
  br i1 %838, label %839, label %866

839:                                              ; preds = %833
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %840 unwind label %847

840:                                              ; preds = %839
  %841 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %842 = trunc i8 %841 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %76, i1 noundef zeroext %842)
          to label %843 unwind label %851

843:                                              ; preds = %840
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %844 unwind label %855

844:                                              ; preds = %843
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef @.str.53)
          to label %845 unwind label %859

845:                                              ; preds = %844
  %846 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #8
  br label %878

847:                                              ; preds = %839
  %848 = landingpad { ptr, i32 }
          cleanup
  %849 = extractvalue { ptr, i32 } %848, 0
  store ptr %849, ptr %21, align 8
  %850 = extractvalue { ptr, i32 } %848, 1
  store i32 %850, ptr %22, align 4
  br label %865

851:                                              ; preds = %840
  %852 = landingpad { ptr, i32 }
          cleanup
  %853 = extractvalue { ptr, i32 } %852, 0
  store ptr %853, ptr %21, align 8
  %854 = extractvalue { ptr, i32 } %852, 1
  store i32 %854, ptr %22, align 4
  br label %864

855:                                              ; preds = %843
  %856 = landingpad { ptr, i32 }
          cleanup
  %857 = extractvalue { ptr, i32 } %856, 0
  store ptr %857, ptr %21, align 8
  %858 = extractvalue { ptr, i32 } %856, 1
  store i32 %858, ptr %22, align 4
  br label %863

859:                                              ; preds = %844
  %860 = landingpad { ptr, i32 }
          cleanup
  %861 = extractvalue { ptr, i32 } %860, 0
  store ptr %861, ptr %21, align 8
  %862 = extractvalue { ptr, i32 } %860, 1
  store i32 %862, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  br label %863

863:                                              ; preds = %859, %855
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  br label %864

864:                                              ; preds = %863, %851
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  br label %865

865:                                              ; preds = %864, %847
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #8
  br label %2585

866:                                              ; preds = %833
  %867 = load ptr, ptr %38, align 8, !tbaa !5
  %868 = invoke noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %867)
          to label %869 unwind label %626

869:                                              ; preds = %866
  br i1 %868, label %870, label %877

870:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #8
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef nonnull align 8 dereferenceable(32) %41, i32 noundef 2)
          to label %871 unwind label %873

871:                                              ; preds = %870
  %872 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #8
  br label %877

873:                                              ; preds = %870
  %874 = landingpad { ptr, i32 }
          cleanup
  %875 = extractvalue { ptr, i32 } %874, 0
  store ptr %875, ptr %21, align 8
  %876 = extractvalue { ptr, i32 } %874, 1
  store i32 %876, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #8
  br label %2585

877:                                              ; preds = %871, %869
  br label %878

878:                                              ; preds = %877, %845
  store i32 2, ptr %42, align 4, !tbaa !10
  br label %1010

879:                                              ; preds = %547
  %880 = load ptr, ptr %38, align 8, !tbaa !5
  %881 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %880, i32 0, i32 4
  %882 = load i32, ptr %881, align 8, !tbaa !220
  %883 = icmp ugt i32 %882, 3
  br i1 %883, label %884, label %897

884:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %885 unwind label %888

885:                                              ; preds = %884
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef @.str.165)
          to label %886 unwind label %892

886:                                              ; preds = %885
  %887 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  br label %897

888:                                              ; preds = %884
  %889 = landingpad { ptr, i32 }
          cleanup
  %890 = extractvalue { ptr, i32 } %889, 0
  store ptr %890, ptr %21, align 8
  %891 = extractvalue { ptr, i32 } %889, 1
  store i32 %891, ptr %22, align 4
  br label %896

892:                                              ; preds = %885
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %21, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %896

896:                                              ; preds = %892, %888
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  br label %2585

897:                                              ; preds = %886, %879
  %898 = load ptr, ptr %7, align 8, !tbaa !5
  %899 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %898, i32 0, i32 0
  %900 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %899, i32 0, i32 3
  %901 = load i8, ptr %900, align 8, !tbaa !202, !range !22, !noundef !23
  %902 = trunc i8 %901 to i1
  br i1 %902, label %903, label %930

903:                                              ; preds = %897
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %83, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %904 unwind label %911

904:                                              ; preds = %903
  %905 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %906 = trunc i8 %905 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %83, i1 noundef zeroext %906)
          to label %907 unwind label %915

907:                                              ; preds = %904
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef @.str.1218, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %908 unwind label %919

908:                                              ; preds = %907
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef @.str.53)
          to label %909 unwind label %923

909:                                              ; preds = %908
  %910 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  br label %942

911:                                              ; preds = %903
  %912 = landingpad { ptr, i32 }
          cleanup
  %913 = extractvalue { ptr, i32 } %912, 0
  store ptr %913, ptr %21, align 8
  %914 = extractvalue { ptr, i32 } %912, 1
  store i32 %914, ptr %22, align 4
  br label %929

915:                                              ; preds = %904
  %916 = landingpad { ptr, i32 }
          cleanup
  %917 = extractvalue { ptr, i32 } %916, 0
  store ptr %917, ptr %21, align 8
  %918 = extractvalue { ptr, i32 } %916, 1
  store i32 %918, ptr %22, align 4
  br label %928

919:                                              ; preds = %907
  %920 = landingpad { ptr, i32 }
          cleanup
  %921 = extractvalue { ptr, i32 } %920, 0
  store ptr %921, ptr %21, align 8
  %922 = extractvalue { ptr, i32 } %920, 1
  store i32 %922, ptr %22, align 4
  br label %927

923:                                              ; preds = %908
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %21, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  br label %927

927:                                              ; preds = %923, %919
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  br label %928

928:                                              ; preds = %927, %915
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  br label %929

929:                                              ; preds = %928, %911
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  br label %2585

930:                                              ; preds = %897
  %931 = load ptr, ptr %38, align 8, !tbaa !5
  %932 = invoke noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %931)
          to label %933 unwind label %626

933:                                              ; preds = %930
  br i1 %932, label %934, label %941

934:                                              ; preds = %933
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #8
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef nonnull align 8 dereferenceable(32) %41, i32 noundef 3)
          to label %935 unwind label %937

935:                                              ; preds = %934
  %936 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  br label %941

937:                                              ; preds = %934
  %938 = landingpad { ptr, i32 }
          cleanup
  %939 = extractvalue { ptr, i32 } %938, 0
  store ptr %939, ptr %21, align 8
  %940 = extractvalue { ptr, i32 } %938, 1
  store i32 %940, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  br label %2585

941:                                              ; preds = %935, %933
  br label %942

942:                                              ; preds = %941, %909
  store i32 3, ptr %42, align 4, !tbaa !10
  br label %1010

943:                                              ; preds = %547
  %944 = load ptr, ptr %7, align 8, !tbaa !5
  %945 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %944, i32 0, i32 0
  %946 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %945, i32 0, i32 3
  %947 = load i8, ptr %946, align 8, !tbaa !202, !range !22, !noundef !23
  %948 = trunc i8 %947 to i1
  br i1 %948, label %949, label %978

949:                                              ; preds = %943
  store i8 1, ptr %40, align 1, !tbaa !21
  %950 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.164)
          to label %951 unwind label %626

951:                                              ; preds = %949
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %88, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %952 unwind label %959

952:                                              ; preds = %951
  %953 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %954 = trunc i8 %953 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %88, i1 noundef zeroext %954)
          to label %955 unwind label %963

955:                                              ; preds = %952
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %87)
          to label %956 unwind label %967

956:                                              ; preds = %955
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef @.str.53)
          to label %957 unwind label %971

957:                                              ; preds = %956
  %958 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #8
  br label %997

959:                                              ; preds = %951
  %960 = landingpad { ptr, i32 }
          cleanup
  %961 = extractvalue { ptr, i32 } %960, 0
  store ptr %961, ptr %21, align 8
  %962 = extractvalue { ptr, i32 } %960, 1
  store i32 %962, ptr %22, align 4
  br label %977

963:                                              ; preds = %952
  %964 = landingpad { ptr, i32 }
          cleanup
  %965 = extractvalue { ptr, i32 } %964, 0
  store ptr %965, ptr %21, align 8
  %966 = extractvalue { ptr, i32 } %964, 1
  store i32 %966, ptr %22, align 4
  br label %976

967:                                              ; preds = %955
  %968 = landingpad { ptr, i32 }
          cleanup
  %969 = extractvalue { ptr, i32 } %968, 0
  store ptr %969, ptr %21, align 8
  %970 = extractvalue { ptr, i32 } %968, 1
  store i32 %970, ptr %22, align 4
  br label %975

971:                                              ; preds = %956
  %972 = landingpad { ptr, i32 }
          cleanup
  %973 = extractvalue { ptr, i32 } %972, 0
  store ptr %973, ptr %21, align 8
  %974 = extractvalue { ptr, i32 } %972, 1
  store i32 %974, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  br label %975

975:                                              ; preds = %971, %967
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  br label %976

976:                                              ; preds = %975, %963
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  br label %977

977:                                              ; preds = %976, %959
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #8
  br label %2585

978:                                              ; preds = %943
  %979 = load ptr, ptr %38, align 8, !tbaa !5
  %980 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %979, i32 0, i32 4
  %981 = load i32, ptr %980, align 8, !tbaa !220
  %982 = icmp ugt i32 %981, 3
  br i1 %982, label %983, label %996

983:                                              ; preds = %978
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %984 unwind label %987

984:                                              ; preds = %983
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef @.str.165)
          to label %985 unwind label %991

985:                                              ; preds = %984
  %986 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %89) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #8
  br label %996

987:                                              ; preds = %983
  %988 = landingpad { ptr, i32 }
          cleanup
  %989 = extractvalue { ptr, i32 } %988, 0
  store ptr %989, ptr %21, align 8
  %990 = extractvalue { ptr, i32 } %988, 1
  store i32 %990, ptr %22, align 4
  br label %995

991:                                              ; preds = %984
  %992 = landingpad { ptr, i32 }
          cleanup
  %993 = extractvalue { ptr, i32 } %992, 0
  store ptr %993, ptr %21, align 8
  %994 = extractvalue { ptr, i32 } %992, 1
  store i32 %994, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  br label %995

995:                                              ; preds = %991, %987
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #8
  br label %2585

996:                                              ; preds = %985, %978
  br label %997

997:                                              ; preds = %996, %957
  %998 = load ptr, ptr %38, align 8, !tbaa !5
  %999 = invoke noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %998)
          to label %1000 unwind label %626

1000:                                             ; preds = %997
  br i1 %999, label %1001, label %1008

1001:                                             ; preds = %1000
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #8
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef nonnull align 8 dereferenceable(32) %41, i32 noundef 3)
          to label %1002 unwind label %1004

1002:                                             ; preds = %1001
  %1003 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #8
  br label %1008

1004:                                             ; preds = %1001
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %21, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #8
  br label %2585

1008:                                             ; preds = %1002, %1000
  store i32 3, ptr %42, align 4, !tbaa !10
  br label %1010

1009:                                             ; preds = %547
  br label %1010

1010:                                             ; preds = %1009, %1008, %942, %878, %814, %811, %673
  %1011 = load ptr, ptr %7, align 8, !tbaa !5
  %1012 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1011, i32 0, i32 0
  %1013 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1012, i32 0, i32 3
  %1014 = load i8, ptr %1013, align 8, !tbaa !202, !range !22, !noundef !23
  %1015 = trunc i8 %1014 to i1
  br i1 %1015, label %1016, label %1154

1016:                                             ; preds = %1010
  %1017 = load ptr, ptr %7, align 8, !tbaa !5
  %1018 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1017, i32 0, i32 7
  %1019 = load i32, ptr %1018, align 8, !tbaa !204
  %1020 = icmp ne i32 %1019, 0
  br i1 %1020, label %1021, label %1154

1021:                                             ; preds = %1016
  %1022 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %1023 = trunc i8 %1022 to i1
  br i1 %1023, label %1024, label %1030

1024:                                             ; preds = %1021
  %1025 = load ptr, ptr %7, align 8, !tbaa !5
  %1026 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1025, i32 0, i32 7
  %1027 = load i32, ptr %1026, align 8, !tbaa !204
  %1028 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1027)
          to label %1029 unwind label %626

1029:                                             ; preds = %1024
  br label %1030

1030:                                             ; preds = %1029, %1021
  %1031 = phi i1 [ false, %1021 ], [ %1028, %1029 ]
  %1032 = zext i1 %1031 to i8
  store i8 %1032, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #8
  %1033 = load ptr, ptr %7, align 8, !tbaa !5
  %1034 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1033, i32 0, i32 7
  %1035 = load i32, ptr %1034, align 8, !tbaa !204
  %1036 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %1035)
          to label %1037 unwind label %1061

1037:                                             ; preds = %1030
  store ptr %1036, ptr %92, align 8, !tbaa !5
  %1038 = load ptr, ptr %10, align 8, !tbaa !5
  %1039 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1038, i32 0, i32 14
  %1040 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1039, i32 0, i32 1
  %1041 = load i32, ptr %1040, align 4, !tbaa !207
  %1042 = icmp eq i32 %1041, 0
  br i1 %1042, label %1043, label %1102

1043:                                             ; preds = %1037
  %1044 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1045 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1044, i32 0, i32 31
  %1046 = load i8, ptr %1045, align 1, !tbaa !221, !range !22, !noundef !23
  %1047 = trunc i8 %1046 to i1
  br i1 %1047, label %1048, label %1102

1048:                                             ; preds = %1043
  %1049 = load ptr, ptr %92, align 8, !tbaa !5
  %1050 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1049, i32 0, i32 2
  %1051 = load i32, ptr %1050, align 8, !tbaa !224
  %1052 = icmp ne i32 %1051, 8
  br i1 %1052, label %1053, label %1079

1053:                                             ; preds = %1048
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #8
  %1054 = load ptr, ptr %7, align 8, !tbaa !5
  %1055 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1054, i32 0, i32 7
  %1056 = load i32, ptr %1055, align 8, !tbaa !204
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef 8, i32 noundef %1056)
          to label %1057 unwind label %1065

1057:                                             ; preds = %1053
  invoke void @_ZN11spirv_cross4joinIJRA10_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 1 dereferenceable(10) @.str.1219, ptr noundef nonnull align 8 dereferenceable(32) %94, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %1058 unwind label %1069

1058:                                             ; preds = %1057
  %1059 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %93)
          to label %1060 unwind label %1073

1060:                                             ; preds = %1058
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #8
  br label %1101

1061:                                             ; preds = %1030
  %1062 = landingpad { ptr, i32 }
          cleanup
  %1063 = extractvalue { ptr, i32 } %1062, 0
  store ptr %1063, ptr %21, align 8
  %1064 = extractvalue { ptr, i32 } %1062, 1
  store i32 %1064, ptr %22, align 4
  br label %1153

1065:                                             ; preds = %1053
  %1066 = landingpad { ptr, i32 }
          cleanup
  %1067 = extractvalue { ptr, i32 } %1066, 0
  store ptr %1067, ptr %21, align 8
  %1068 = extractvalue { ptr, i32 } %1066, 1
  store i32 %1068, ptr %22, align 4
  br label %1078

1069:                                             ; preds = %1057
  %1070 = landingpad { ptr, i32 }
          cleanup
  %1071 = extractvalue { ptr, i32 } %1070, 0
  store ptr %1071, ptr %21, align 8
  %1072 = extractvalue { ptr, i32 } %1070, 1
  store i32 %1072, ptr %22, align 4
  br label %1077

1073:                                             ; preds = %1058
  %1074 = landingpad { ptr, i32 }
          cleanup
  %1075 = extractvalue { ptr, i32 } %1074, 0
  store ptr %1075, ptr %21, align 8
  %1076 = extractvalue { ptr, i32 } %1074, 1
  store i32 %1076, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #8
  br label %1077

1077:                                             ; preds = %1073, %1069
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  br label %1078

1078:                                             ; preds = %1077, %1065
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #8
  br label %1153

1079:                                             ; preds = %1048
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #8
  %1080 = load ptr, ptr %7, align 8, !tbaa !5
  %1081 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1080, i32 0, i32 7
  %1082 = load i32, ptr %1081, align 8, !tbaa !204
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1082, i1 noundef zeroext true)
          to label %1083 unwind label %1087

1083:                                             ; preds = %1079
  invoke void @_ZN11spirv_cross4joinIJRA10_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 1 dereferenceable(10) @.str.1219, ptr noundef nonnull align 8 dereferenceable(32) %96, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %1084 unwind label %1091

1084:                                             ; preds = %1083
  %1085 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %1086 unwind label %1095

1086:                                             ; preds = %1084
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #8
  br label %1101

1087:                                             ; preds = %1079
  %1088 = landingpad { ptr, i32 }
          cleanup
  %1089 = extractvalue { ptr, i32 } %1088, 0
  store ptr %1089, ptr %21, align 8
  %1090 = extractvalue { ptr, i32 } %1088, 1
  store i32 %1090, ptr %22, align 4
  br label %1100

1091:                                             ; preds = %1083
  %1092 = landingpad { ptr, i32 }
          cleanup
  %1093 = extractvalue { ptr, i32 } %1092, 0
  store ptr %1093, ptr %21, align 8
  %1094 = extractvalue { ptr, i32 } %1092, 1
  store i32 %1094, ptr %22, align 4
  br label %1099

1095:                                             ; preds = %1084
  %1096 = landingpad { ptr, i32 }
          cleanup
  %1097 = extractvalue { ptr, i32 } %1096, 0
  store ptr %1097, ptr %21, align 8
  %1098 = extractvalue { ptr, i32 } %1096, 1
  store i32 %1098, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  br label %1099

1099:                                             ; preds = %1095, %1091
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #8
  br label %1100

1100:                                             ; preds = %1099, %1087
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #8
  br label %1153

1101:                                             ; preds = %1086, %1060
  br label %1152

1102:                                             ; preds = %1043, %1037
  %1103 = load ptr, ptr %92, align 8, !tbaa !5
  %1104 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1103, i32 0, i32 2
  %1105 = load i32, ptr %1104, align 8, !tbaa !224
  %1106 = icmp ne i32 %1105, 8
  br i1 %1106, label %1107, label %1129

1107:                                             ; preds = %1102
  call void @llvm.lifetime.start.p0(i64 32, ptr %97) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %98) #8
  %1108 = load ptr, ptr %7, align 8, !tbaa !5
  %1109 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1108, i32 0, i32 7
  %1110 = load i32, ptr %1109, align 8, !tbaa !204
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %98, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef 8, i32 noundef %1110)
          to label %1111 unwind label %1115

1111:                                             ; preds = %1107
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef @.str.70, ptr noundef nonnull align 8 dereferenceable(32) %98)
          to label %1112 unwind label %1119

1112:                                             ; preds = %1111
  %1113 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %97)
          to label %1114 unwind label %1123

1114:                                             ; preds = %1112
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #8
  br label %1151

1115:                                             ; preds = %1107
  %1116 = landingpad { ptr, i32 }
          cleanup
  %1117 = extractvalue { ptr, i32 } %1116, 0
  store ptr %1117, ptr %21, align 8
  %1118 = extractvalue { ptr, i32 } %1116, 1
  store i32 %1118, ptr %22, align 4
  br label %1128

1119:                                             ; preds = %1111
  %1120 = landingpad { ptr, i32 }
          cleanup
  %1121 = extractvalue { ptr, i32 } %1120, 0
  store ptr %1121, ptr %21, align 8
  %1122 = extractvalue { ptr, i32 } %1120, 1
  store i32 %1122, ptr %22, align 4
  br label %1127

1123:                                             ; preds = %1112
  %1124 = landingpad { ptr, i32 }
          cleanup
  %1125 = extractvalue { ptr, i32 } %1124, 0
  store ptr %1125, ptr %21, align 8
  %1126 = extractvalue { ptr, i32 } %1124, 1
  store i32 %1126, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #8
  br label %1127

1127:                                             ; preds = %1123, %1119
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #8
  br label %1128

1128:                                             ; preds = %1127, %1115
  call void @llvm.lifetime.end.p0(i64 32, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #8
  br label %1153

1129:                                             ; preds = %1102
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #8
  %1130 = load ptr, ptr %7, align 8, !tbaa !5
  %1131 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1130, i32 0, i32 7
  %1132 = load i32, ptr %1131, align 8, !tbaa !204
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1132, i1 noundef zeroext true)
          to label %1133 unwind label %1137

1133:                                             ; preds = %1129
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef @.str.70, ptr noundef nonnull align 8 dereferenceable(32) %100)
          to label %1134 unwind label %1141

1134:                                             ; preds = %1133
  %1135 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %99)
          to label %1136 unwind label %1145

1136:                                             ; preds = %1134
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #8
  br label %1151

1137:                                             ; preds = %1129
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %21, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %22, align 4
  br label %1150

1141:                                             ; preds = %1133
  %1142 = landingpad { ptr, i32 }
          cleanup
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %21, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %22, align 4
  br label %1149

1145:                                             ; preds = %1134
  %1146 = landingpad { ptr, i32 }
          cleanup
  %1147 = extractvalue { ptr, i32 } %1146, 0
  store ptr %1147, ptr %21, align 8
  %1148 = extractvalue { ptr, i32 } %1146, 1
  store i32 %1148, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  br label %1149

1149:                                             ; preds = %1145, %1141
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  br label %1150

1150:                                             ; preds = %1149, %1137
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #8
  br label %1153

1151:                                             ; preds = %1136, %1114
  br label %1152

1152:                                             ; preds = %1151, %1101
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  br label %1154

1153:                                             ; preds = %1150, %1128, %1100, %1078, %1061
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  br label %2585

1154:                                             ; preds = %1152, %1016, %1010
  %1155 = load ptr, ptr %7, align 8, !tbaa !5
  %1156 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1155, i32 0, i32 0
  %1157 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1156, i32 0, i32 5
  %1158 = load i8, ptr %1157, align 2, !tbaa !225, !range !22, !noundef !23
  %1159 = trunc i8 %1158 to i1
  br i1 %1159, label %1160, label %1217

1160:                                             ; preds = %1154
  %1161 = load ptr, ptr %38, align 8, !tbaa !5
  %1162 = invoke noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %1161)
          to label %1163 unwind label %626

1163:                                             ; preds = %1160
  br i1 %1162, label %1164, label %1193

1164:                                             ; preds = %1163
  call void @llvm.lifetime.start.p0(i64 32, ptr %101) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #8
  %1165 = load ptr, ptr %7, align 8, !tbaa !5
  %1166 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1165, i32 0, i32 1
  %1167 = load i32, ptr %1166, align 8, !tbaa !206
  %1168 = load i32, ptr %42, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1167, i32 noundef %1168)
          to label %1169 unwind label %1174

1169:                                             ; preds = %1164
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef nonnull align 8 dereferenceable(32) %103, i32 noundef 1)
          to label %1170 unwind label %1178

1170:                                             ; preds = %1169
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef @.str.1220, ptr noundef nonnull align 8 dereferenceable(32) %102)
          to label %1171 unwind label %1182

1171:                                             ; preds = %1170
  %1172 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %101)
          to label %1173 unwind label %1186

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

1174:                                             ; preds = %1164
  %1175 = landingpad { ptr, i32 }
          cleanup
  %1176 = extractvalue { ptr, i32 } %1175, 0
  store ptr %1176, ptr %21, align 8
  %1177 = extractvalue { ptr, i32 } %1175, 1
  store i32 %1177, ptr %22, align 4
  br label %1192

1178:                                             ; preds = %1169
  %1179 = landingpad { ptr, i32 }
          cleanup
  %1180 = extractvalue { ptr, i32 } %1179, 0
  store ptr %1180, ptr %21, align 8
  %1181 = extractvalue { ptr, i32 } %1179, 1
  store i32 %1181, ptr %22, align 4
  br label %1191

1182:                                             ; preds = %1170
  %1183 = landingpad { ptr, i32 }
          cleanup
  %1184 = extractvalue { ptr, i32 } %1183, 0
  store ptr %1184, ptr %21, align 8
  %1185 = extractvalue { ptr, i32 } %1183, 1
  store i32 %1185, ptr %22, align 4
  br label %1190

1186:                                             ; preds = %1171
  %1187 = landingpad { ptr, i32 }
          cleanup
  %1188 = extractvalue { ptr, i32 } %1187, 0
  store ptr %1188, ptr %21, align 8
  %1189 = extractvalue { ptr, i32 } %1187, 1
  store i32 %1189, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #8
  br label %1190

1190:                                             ; preds = %1186, %1182
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #8
  br label %1191

1191:                                             ; preds = %1190, %1178
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  br label %1192

1192:                                             ; preds = %1191, %1174
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #8
  br label %2585

1193:                                             ; preds = %1163
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %105) #8
  %1194 = load ptr, ptr %7, align 8, !tbaa !5
  %1195 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1194, i32 0, i32 1
  %1196 = load i32, ptr %1195, align 8, !tbaa !206
  %1197 = load i32, ptr %42, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %105, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1196, i32 noundef %1197)
          to label %1198 unwind label %1202

1198:                                             ; preds = %1193
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef @.str.1220, ptr noundef nonnull align 8 dereferenceable(32) %105)
          to label %1199 unwind label %1206

1199:                                             ; preds = %1198
  %1200 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %104)
          to label %1201 unwind label %1210

1201:                                             ; preds = %1199
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #8
  br label %1216

1202:                                             ; preds = %1193
  %1203 = landingpad { ptr, i32 }
          cleanup
  %1204 = extractvalue { ptr, i32 } %1203, 0
  store ptr %1204, ptr %21, align 8
  %1205 = extractvalue { ptr, i32 } %1203, 1
  store i32 %1205, ptr %22, align 4
  br label %1215

1206:                                             ; preds = %1198
  %1207 = landingpad { ptr, i32 }
          cleanup
  %1208 = extractvalue { ptr, i32 } %1207, 0
  store ptr %1208, ptr %21, align 8
  %1209 = extractvalue { ptr, i32 } %1207, 1
  store i32 %1209, ptr %22, align 4
  br label %1214

1210:                                             ; preds = %1199
  %1211 = landingpad { ptr, i32 }
          cleanup
  %1212 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1212, ptr %21, align 8
  %1213 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1213, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  br label %1214

1214:                                             ; preds = %1210, %1206
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  br label %1215

1215:                                             ; preds = %1214, %1202
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #8
  br label %2585

1216:                                             ; preds = %1201, %1173
  br label %1217

1217:                                             ; preds = %1216, %1154
  %1218 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br i1 %1218, label %1222, label %1219

1219:                                             ; preds = %1217
  %1220 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.55)
          to label %1221 unwind label %626

1221:                                             ; preds = %1219
  br label %1222

1222:                                             ; preds = %1221, %1217
  %1223 = load ptr, ptr %10, align 8, !tbaa !5
  %1224 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1223, i32 0, i32 14
  %1225 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1224, i32 0, i32 1
  %1226 = load i32, ptr %1225, align 4, !tbaa !207
  %1227 = icmp eq i32 %1226, 3
  br i1 %1227, label %1228, label %1339

1228:                                             ; preds = %1222
  %1229 = load ptr, ptr %10, align 8, !tbaa !5
  %1230 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1229, i32 0, i32 14
  %1231 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1230, i32 0, i32 3
  %1232 = load i8, ptr %1231, align 1, !tbaa !226, !range !22, !noundef !23
  %1233 = trunc i8 %1232 to i1
  br i1 %1233, label %1234, label %1339

1234:                                             ; preds = %1228
  %1235 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1236 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1235, i32 0, i32 41
  %1237 = load i8, ptr %1236, align 2, !tbaa !227, !range !22, !noundef !23
  %1238 = trunc i8 %1237 to i1
  br i1 %1238, label %1239, label %1339

1239:                                             ; preds = %1234
  call void @llvm.lifetime.start.p0(i64 32, ptr %106) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %107) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %107, ptr noundef @.str.1221, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %1240 unwind label %1255

1240:                                             ; preds = %1239
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull align 8 dereferenceable(32) %107, ptr noundef @.str.1222)
          to label %1241 unwind label %1259

1241:                                             ; preds = %1240
  %1242 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %106)
          to label %1243 unwind label %1263

1243:                                             ; preds = %1241
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #8
  %1244 = load i8, ptr %40, align 1, !tbaa !21, !range !22, !noundef !23
  %1245 = trunc i8 %1244 to i1
  br i1 %1245, label %1246, label %1288

1246:                                             ; preds = %1243
  call void @llvm.lifetime.start.p0(i64 32, ptr %108) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #8
  %1247 = load ptr, ptr %7, align 8, !tbaa !5
  %1248 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1247, i32 0, i32 1
  %1249 = load i32, ptr %1248, align 8, !tbaa !206
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1249, i32 noundef 2)
          to label %1250 unwind label %1269

1250:                                             ; preds = %1246
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %110)
          to label %1251 unwind label %1273

1251:                                             ; preds = %1250
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %108, ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef @.str.53)
          to label %1252 unwind label %1277

1252:                                             ; preds = %1251
  %1253 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %108)
          to label %1254 unwind label %1281

1254:                                             ; preds = %1252
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #8
  br label %1337

1255:                                             ; preds = %1239
  %1256 = landingpad { ptr, i32 }
          cleanup
  %1257 = extractvalue { ptr, i32 } %1256, 0
  store ptr %1257, ptr %21, align 8
  %1258 = extractvalue { ptr, i32 } %1256, 1
  store i32 %1258, ptr %22, align 4
  br label %1268

1259:                                             ; preds = %1240
  %1260 = landingpad { ptr, i32 }
          cleanup
  %1261 = extractvalue { ptr, i32 } %1260, 0
  store ptr %1261, ptr %21, align 8
  %1262 = extractvalue { ptr, i32 } %1260, 1
  store i32 %1262, ptr %22, align 4
  br label %1267

1263:                                             ; preds = %1241
  %1264 = landingpad { ptr, i32 }
          cleanup
  %1265 = extractvalue { ptr, i32 } %1264, 0
  store ptr %1265, ptr %21, align 8
  %1266 = extractvalue { ptr, i32 } %1264, 1
  store i32 %1266, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  br label %1267

1267:                                             ; preds = %1263, %1259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  br label %1268

1268:                                             ; preds = %1267, %1255
  call void @llvm.lifetime.end.p0(i64 32, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #8
  br label %2585

1269:                                             ; preds = %1246
  %1270 = landingpad { ptr, i32 }
          cleanup
  %1271 = extractvalue { ptr, i32 } %1270, 0
  store ptr %1271, ptr %21, align 8
  %1272 = extractvalue { ptr, i32 } %1270, 1
  store i32 %1272, ptr %22, align 4
  br label %1287

1273:                                             ; preds = %1250
  %1274 = landingpad { ptr, i32 }
          cleanup
  %1275 = extractvalue { ptr, i32 } %1274, 0
  store ptr %1275, ptr %21, align 8
  %1276 = extractvalue { ptr, i32 } %1274, 1
  store i32 %1276, ptr %22, align 4
  br label %1286

1277:                                             ; preds = %1251
  %1278 = landingpad { ptr, i32 }
          cleanup
  %1279 = extractvalue { ptr, i32 } %1278, 0
  store ptr %1279, ptr %21, align 8
  %1280 = extractvalue { ptr, i32 } %1278, 1
  store i32 %1280, ptr %22, align 4
  br label %1285

1281:                                             ; preds = %1252
  %1282 = landingpad { ptr, i32 }
          cleanup
  %1283 = extractvalue { ptr, i32 } %1282, 0
  store ptr %1283, ptr %21, align 8
  %1284 = extractvalue { ptr, i32 } %1282, 1
  store i32 %1284, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  br label %1285

1285:                                             ; preds = %1281, %1277
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  br label %1286

1286:                                             ; preds = %1285, %1273
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  br label %1287

1287:                                             ; preds = %1286, %1269
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #8
  br label %2585

1288:                                             ; preds = %1243
  call void @llvm.lifetime.start.p0(i64 32, ptr %111) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %112) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef @.str.1224, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %1289 unwind label %1303

1289:                                             ; preds = %1288
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.1225)
          to label %1290 unwind label %1307

1290:                                             ; preds = %1289
  call void @llvm.lifetime.start.p0(i64 32, ptr %115) #8
  %1291 = load ptr, ptr %7, align 8, !tbaa !5
  %1292 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1291, i32 0, i32 1
  %1293 = load i32, ptr %1292, align 8, !tbaa !206
  %1294 = load i32, ptr %42, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1293, i32 noundef %1294)
          to label %1295 unwind label %1311

1295:                                             ; preds = %1290
  %1296 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %1297 = trunc i8 %1296 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %116, i1 noundef zeroext %1297)
          to label %1298 unwind label %1315

1298:                                             ; preds = %1295
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 8 dereferenceable(32) %113, ptr noundef nonnull align 8 dereferenceable(32) %115)
          to label %1299 unwind label %1319

1299:                                             ; preds = %1298
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %111, ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef @.str.1226)
          to label %1300 unwind label %1323

1300:                                             ; preds = %1299
  %1301 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %111)
          to label %1302 unwind label %1327

1302:                                             ; preds = %1300
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %111) #8
  br label %1337

1303:                                             ; preds = %1288
  %1304 = landingpad { ptr, i32 }
          cleanup
  %1305 = extractvalue { ptr, i32 } %1304, 0
  store ptr %1305, ptr %21, align 8
  %1306 = extractvalue { ptr, i32 } %1304, 1
  store i32 %1306, ptr %22, align 4
  br label %1336

1307:                                             ; preds = %1289
  %1308 = landingpad { ptr, i32 }
          cleanup
  %1309 = extractvalue { ptr, i32 } %1308, 0
  store ptr %1309, ptr %21, align 8
  %1310 = extractvalue { ptr, i32 } %1308, 1
  store i32 %1310, ptr %22, align 4
  br label %1335

1311:                                             ; preds = %1290
  %1312 = landingpad { ptr, i32 }
          cleanup
  %1313 = extractvalue { ptr, i32 } %1312, 0
  store ptr %1313, ptr %21, align 8
  %1314 = extractvalue { ptr, i32 } %1312, 1
  store i32 %1314, ptr %22, align 4
  br label %1334

1315:                                             ; preds = %1295
  %1316 = landingpad { ptr, i32 }
          cleanup
  %1317 = extractvalue { ptr, i32 } %1316, 0
  store ptr %1317, ptr %21, align 8
  %1318 = extractvalue { ptr, i32 } %1316, 1
  store i32 %1318, ptr %22, align 4
  br label %1333

1319:                                             ; preds = %1298
  %1320 = landingpad { ptr, i32 }
          cleanup
  %1321 = extractvalue { ptr, i32 } %1320, 0
  store ptr %1321, ptr %21, align 8
  %1322 = extractvalue { ptr, i32 } %1320, 1
  store i32 %1322, ptr %22, align 4
  br label %1332

1323:                                             ; preds = %1299
  %1324 = landingpad { ptr, i32 }
          cleanup
  %1325 = extractvalue { ptr, i32 } %1324, 0
  store ptr %1325, ptr %21, align 8
  %1326 = extractvalue { ptr, i32 } %1324, 1
  store i32 %1326, ptr %22, align 4
  br label %1331

1327:                                             ; preds = %1300
  %1328 = landingpad { ptr, i32 }
          cleanup
  %1329 = extractvalue { ptr, i32 } %1328, 0
  store ptr %1329, ptr %21, align 8
  %1330 = extractvalue { ptr, i32 } %1328, 1
  store i32 %1330, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #8
  br label %1331

1331:                                             ; preds = %1327, %1323
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  br label %1332

1332:                                             ; preds = %1331, %1319
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  br label %1333

1333:                                             ; preds = %1332, %1315
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  br label %1334

1334:                                             ; preds = %1333, %1311
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #8
  br label %1335

1335:                                             ; preds = %1334, %1307
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  br label %1336

1336:                                             ; preds = %1335, %1303
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %111) #8
  br label %2585

1337:                                             ; preds = %1302, %1254
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %194, i8 noundef zeroext 17)
          to label %1338 unwind label %626

1338:                                             ; preds = %1337
  br label %1549

1339:                                             ; preds = %1234, %1228, %1222
  %1340 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %1341 unwind label %626

1341:                                             ; preds = %1339
  %1342 = load i8, ptr %40, align 1, !tbaa !21, !range !22, !noundef !23
  %1343 = trunc i8 %1342 to i1
  br i1 %1343, label %1344, label %1415

1344:                                             ; preds = %1341
  %1345 = load ptr, ptr %10, align 8, !tbaa !5
  %1346 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1345, i32 0, i32 14
  %1347 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1346, i32 0, i32 3
  %1348 = load i8, ptr %1347, align 1, !tbaa !226, !range !22, !noundef !23
  %1349 = trunc i8 %1348 to i1
  br i1 %1349, label %1350, label %1378

1350:                                             ; preds = %1344
  call void @llvm.lifetime.start.p0(i64 32, ptr %117) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %119) #8
  %1351 = load ptr, ptr %7, align 8, !tbaa !5
  %1352 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1351, i32 0, i32 1
  %1353 = load i32, ptr %1352, align 8, !tbaa !206
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %119, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1353, i32 noundef 2)
          to label %1354 unwind label %1359

1354:                                             ; preds = %1350
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %118, ptr noundef @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %119)
          to label %1355 unwind label %1363

1355:                                             ; preds = %1354
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(32) %118, ptr noundef @.str.1227)
          to label %1356 unwind label %1367

1356:                                             ; preds = %1355
  %1357 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %117)
          to label %1358 unwind label %1371

1358:                                             ; preds = %1356
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #8
  br label %1414

1359:                                             ; preds = %1350
  %1360 = landingpad { ptr, i32 }
          cleanup
  %1361 = extractvalue { ptr, i32 } %1360, 0
  store ptr %1361, ptr %21, align 8
  %1362 = extractvalue { ptr, i32 } %1360, 1
  store i32 %1362, ptr %22, align 4
  br label %1377

1363:                                             ; preds = %1354
  %1364 = landingpad { ptr, i32 }
          cleanup
  %1365 = extractvalue { ptr, i32 } %1364, 0
  store ptr %1365, ptr %21, align 8
  %1366 = extractvalue { ptr, i32 } %1364, 1
  store i32 %1366, ptr %22, align 4
  br label %1376

1367:                                             ; preds = %1355
  %1368 = landingpad { ptr, i32 }
          cleanup
  %1369 = extractvalue { ptr, i32 } %1368, 0
  store ptr %1369, ptr %21, align 8
  %1370 = extractvalue { ptr, i32 } %1368, 1
  store i32 %1370, ptr %22, align 4
  br label %1375

1371:                                             ; preds = %1356
  %1372 = landingpad { ptr, i32 }
          cleanup
  %1373 = extractvalue { ptr, i32 } %1372, 0
  store ptr %1373, ptr %21, align 8
  %1374 = extractvalue { ptr, i32 } %1372, 1
  store i32 %1374, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  br label %1375

1375:                                             ; preds = %1371, %1367
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #8
  br label %1376

1376:                                             ; preds = %1375, %1363
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #8
  br label %1377

1377:                                             ; preds = %1376, %1359
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #8
  br label %2585

1378:                                             ; preds = %1344
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %121) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #8
  %1379 = load ptr, ptr %7, align 8, !tbaa !5
  %1380 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1379, i32 0, i32 1
  %1381 = load i32, ptr %1380, align 8, !tbaa !206
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %123, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1381, i32 noundef 2)
          to label %1382 unwind label %1390

1382:                                             ; preds = %1378
  %1383 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %1384 = trunc i8 %1383 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %122, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %123, i1 noundef zeroext %1384)
          to label %1385 unwind label %1394

1385:                                             ; preds = %1382
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %121, ptr noundef @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %122)
          to label %1386 unwind label %1398

1386:                                             ; preds = %1385
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef @.str.53)
          to label %1387 unwind label %1402

1387:                                             ; preds = %1386
  %1388 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %120)
          to label %1389 unwind label %1406

1389:                                             ; preds = %1387
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #8
  br label %1414

1390:                                             ; preds = %1378
  %1391 = landingpad { ptr, i32 }
          cleanup
  %1392 = extractvalue { ptr, i32 } %1391, 0
  store ptr %1392, ptr %21, align 8
  %1393 = extractvalue { ptr, i32 } %1391, 1
  store i32 %1393, ptr %22, align 4
  br label %1413

1394:                                             ; preds = %1382
  %1395 = landingpad { ptr, i32 }
          cleanup
  %1396 = extractvalue { ptr, i32 } %1395, 0
  store ptr %1396, ptr %21, align 8
  %1397 = extractvalue { ptr, i32 } %1395, 1
  store i32 %1397, ptr %22, align 4
  br label %1412

1398:                                             ; preds = %1385
  %1399 = landingpad { ptr, i32 }
          cleanup
  %1400 = extractvalue { ptr, i32 } %1399, 0
  store ptr %1400, ptr %21, align 8
  %1401 = extractvalue { ptr, i32 } %1399, 1
  store i32 %1401, ptr %22, align 4
  br label %1411

1402:                                             ; preds = %1386
  %1403 = landingpad { ptr, i32 }
          cleanup
  %1404 = extractvalue { ptr, i32 } %1403, 0
  store ptr %1404, ptr %21, align 8
  %1405 = extractvalue { ptr, i32 } %1403, 1
  store i32 %1405, ptr %22, align 4
  br label %1410

1406:                                             ; preds = %1387
  %1407 = landingpad { ptr, i32 }
          cleanup
  %1408 = extractvalue { ptr, i32 } %1407, 0
  store ptr %1408, ptr %21, align 8
  %1409 = extractvalue { ptr, i32 } %1407, 1
  store i32 %1409, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #8
  br label %1410

1410:                                             ; preds = %1406, %1402
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #8
  br label %1411

1411:                                             ; preds = %1410, %1398
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  br label %1412

1412:                                             ; preds = %1411, %1394
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #8
  br label %1413

1413:                                             ; preds = %1412, %1390
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #8
  br label %2585

1414:                                             ; preds = %1389, %1358
  br label %1415

1415:                                             ; preds = %1414, %1341
  %1416 = load ptr, ptr %10, align 8, !tbaa !5
  %1417 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1416, i32 0, i32 14
  %1418 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1417, i32 0, i32 3
  %1419 = load i8, ptr %1418, align 1, !tbaa !226, !range !22, !noundef !23
  %1420 = trunc i8 %1419 to i1
  br i1 %1420, label %1421, label %1523

1421:                                             ; preds = %1415
  %1422 = load ptr, ptr %10, align 8, !tbaa !5
  %1423 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1422, i32 0, i32 14
  %1424 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1423, i32 0, i32 1
  %1425 = load i32, ptr %1424, align 4, !tbaa !207
  %1426 = icmp eq i32 %1425, 3
  br i1 %1426, label %1427, label %1461

1427:                                             ; preds = %1421
  %1428 = load ptr, ptr %7, align 8, !tbaa !5
  %1429 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1428, i32 0, i32 0
  %1430 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1429, i32 0, i32 3
  %1431 = load i8, ptr %1430, align 8, !tbaa !202, !range !22, !noundef !23
  %1432 = trunc i8 %1431 to i1
  br i1 %1432, label %1433, label %1461

1433:                                             ; preds = %1427
  call void @llvm.lifetime.start.p0(i64 32, ptr %124) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %125) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %126) #8
  %1434 = load ptr, ptr %7, align 8, !tbaa !5
  %1435 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1434, i32 0, i32 1
  %1436 = load i32, ptr %1435, align 8, !tbaa !206
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %126, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1436, i32 noundef 2)
          to label %1437 unwind label %1442

1437:                                             ; preds = %1433
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %125, ptr noundef @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %126)
          to label %1438 unwind label %1446

1438:                                             ; preds = %1437
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %124, ptr noundef nonnull align 8 dereferenceable(32) %125, ptr noundef @.str.1228)
          to label %1439 unwind label %1450

1439:                                             ; preds = %1438
  %1440 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %124)
          to label %1441 unwind label %1454

1441:                                             ; preds = %1439
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %125) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %124) #8
  br label %1522

1442:                                             ; preds = %1433
  %1443 = landingpad { ptr, i32 }
          cleanup
  %1444 = extractvalue { ptr, i32 } %1443, 0
  store ptr %1444, ptr %21, align 8
  %1445 = extractvalue { ptr, i32 } %1443, 1
  store i32 %1445, ptr %22, align 4
  br label %1460

1446:                                             ; preds = %1437
  %1447 = landingpad { ptr, i32 }
          cleanup
  %1448 = extractvalue { ptr, i32 } %1447, 0
  store ptr %1448, ptr %21, align 8
  %1449 = extractvalue { ptr, i32 } %1447, 1
  store i32 %1449, ptr %22, align 4
  br label %1459

1450:                                             ; preds = %1438
  %1451 = landingpad { ptr, i32 }
          cleanup
  %1452 = extractvalue { ptr, i32 } %1451, 0
  store ptr %1452, ptr %21, align 8
  %1453 = extractvalue { ptr, i32 } %1451, 1
  store i32 %1453, ptr %22, align 4
  br label %1458

1454:                                             ; preds = %1439
  %1455 = landingpad { ptr, i32 }
          cleanup
  %1456 = extractvalue { ptr, i32 } %1455, 0
  store ptr %1456, ptr %21, align 8
  %1457 = extractvalue { ptr, i32 } %1455, 1
  store i32 %1457, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #8
  br label %1458

1458:                                             ; preds = %1454, %1450
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #8
  br label %1459

1459:                                             ; preds = %1458, %1446
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #8
  br label %1460

1460:                                             ; preds = %1459, %1442
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %125) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %124) #8
  br label %2585

1461:                                             ; preds = %1427, %1421
  call void @llvm.lifetime.start.p0(i64 32, ptr %127) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %128) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %129) #8
  %1462 = load ptr, ptr %7, align 8, !tbaa !5
  %1463 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1462, i32 0, i32 1
  %1464 = load i32, ptr %1463, align 8, !tbaa !206
  %1465 = load i32, ptr %42, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %130, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1464, i32 noundef %1465)
          to label %1466 unwind label %1487

1466:                                             ; preds = %1461
  %1467 = load i8, ptr %39, align 1, !tbaa !21, !range !22, !noundef !23
  %1468 = trunc i8 %1467 to i1
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %129, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef %130, i1 noundef zeroext %1468)
          to label %1469 unwind label %1491

1469:                                             ; preds = %1466
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %128, ptr noundef @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %129)
          to label %1470 unwind label %1495

1470:                                             ; preds = %1469
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %127, ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef @.str.53)
          to label %1471 unwind label %1499

1471:                                             ; preds = %1470
  %1472 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %127)
          to label %1473 unwind label %1503

1473:                                             ; preds = %1471
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %128) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #8
  %1474 = load ptr, ptr %10, align 8, !tbaa !5
  %1475 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1474, i32 0, i32 14
  %1476 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1475, i32 0, i32 1
  %1477 = load i32, ptr %1476, align 4, !tbaa !207
  %1478 = icmp eq i32 %1477, 6
  br i1 %1478, label %1479, label %1521

1479:                                             ; preds = %1473
  %1480 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1481 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1480, i32 0, i32 27
  %1482 = load i8, ptr %1481, align 1, !tbaa !228, !range !22, !noundef !23
  %1483 = trunc i8 %1482 to i1
  br i1 %1483, label %1484, label %1511

1484:                                             ; preds = %1479
  %1485 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1229)
          to label %1486 unwind label %626

1486:                                             ; preds = %1484
  br label %1520

1487:                                             ; preds = %1461
  %1488 = landingpad { ptr, i32 }
          cleanup
  %1489 = extractvalue { ptr, i32 } %1488, 0
  store ptr %1489, ptr %21, align 8
  %1490 = extractvalue { ptr, i32 } %1488, 1
  store i32 %1490, ptr %22, align 4
  br label %1510

1491:                                             ; preds = %1466
  %1492 = landingpad { ptr, i32 }
          cleanup
  %1493 = extractvalue { ptr, i32 } %1492, 0
  store ptr %1493, ptr %21, align 8
  %1494 = extractvalue { ptr, i32 } %1492, 1
  store i32 %1494, ptr %22, align 4
  br label %1509

1495:                                             ; preds = %1469
  %1496 = landingpad { ptr, i32 }
          cleanup
  %1497 = extractvalue { ptr, i32 } %1496, 0
  store ptr %1497, ptr %21, align 8
  %1498 = extractvalue { ptr, i32 } %1496, 1
  store i32 %1498, ptr %22, align 4
  br label %1508

1499:                                             ; preds = %1470
  %1500 = landingpad { ptr, i32 }
          cleanup
  %1501 = extractvalue { ptr, i32 } %1500, 0
  store ptr %1501, ptr %21, align 8
  %1502 = extractvalue { ptr, i32 } %1500, 1
  store i32 %1502, ptr %22, align 4
  br label %1507

1503:                                             ; preds = %1471
  %1504 = landingpad { ptr, i32 }
          cleanup
  %1505 = extractvalue { ptr, i32 } %1504, 0
  store ptr %1505, ptr %21, align 8
  %1506 = extractvalue { ptr, i32 } %1504, 1
  store i32 %1506, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #8
  br label %1507

1507:                                             ; preds = %1503, %1499
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #8
  br label %1508

1508:                                             ; preds = %1507, %1495
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #8
  br label %1509

1509:                                             ; preds = %1508, %1491
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #8
  br label %1510

1510:                                             ; preds = %1509, %1487
  call void @llvm.lifetime.end.p0(i64 32, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %128) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #8
  br label %2585

1511:                                             ; preds = %1479
  %1512 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1513 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1512, i32 0, i32 51
  %1514 = load i8, ptr %1513, align 4, !tbaa !229, !range !22, !noundef !23
  %1515 = trunc i8 %1514 to i1
  br i1 %1515, label %1516, label %1519

1516:                                             ; preds = %1511
  %1517 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1230)
          to label %1518 unwind label %626

1518:                                             ; preds = %1516
  br label %1519

1519:                                             ; preds = %1518, %1511
  br label %1520

1520:                                             ; preds = %1519, %1486
  br label %1521

1521:                                             ; preds = %1520, %1473
  br label %1522

1522:                                             ; preds = %1521, %1441
  br label %1548

1523:                                             ; preds = %1415
  %1524 = load ptr, ptr %10, align 8, !tbaa !5
  %1525 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1524, i32 0, i32 14
  %1526 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1525, i32 0, i32 1
  %1527 = load i32, ptr %1526, align 4, !tbaa !207
  %1528 = icmp eq i32 %1527, 6
  br i1 %1528, label %1529, label %1547

1529:                                             ; preds = %1523
  %1530 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1531 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1530, i32 0, i32 27
  %1532 = load i8, ptr %1531, align 1, !tbaa !228, !range !22, !noundef !23
  %1533 = trunc i8 %1532 to i1
  br i1 %1533, label %1534, label %1537

1534:                                             ; preds = %1529
  %1535 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1231)
          to label %1536 unwind label %626

1536:                                             ; preds = %1534
  br label %1546

1537:                                             ; preds = %1529
  %1538 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1539 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1538, i32 0, i32 51
  %1540 = load i8, ptr %1539, align 4, !tbaa !229, !range !22, !noundef !23
  %1541 = trunc i8 %1540 to i1
  br i1 %1541, label %1542, label %1545

1542:                                             ; preds = %1537
  %1543 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1232)
          to label %1544 unwind label %626

1544:                                             ; preds = %1542
  br label %1545

1545:                                             ; preds = %1544, %1537
  br label %1546

1546:                                             ; preds = %1545, %1536
  br label %1547

1547:                                             ; preds = %1546, %1523
  br label %1548

1548:                                             ; preds = %1547, %1522
  br label %1549

1549:                                             ; preds = %1548, %1338
  %1550 = load ptr, ptr %7, align 8, !tbaa !5
  %1551 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1550, i32 0, i32 3
  %1552 = load i32, ptr %1551, align 8, !tbaa !230
  %1553 = icmp ne i32 %1552, 0
  br i1 %1553, label %1554, label %1734

1554:                                             ; preds = %1549
  %1555 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %1556 = trunc i8 %1555 to i1
  br i1 %1556, label %1557, label %1563

1557:                                             ; preds = %1554
  %1558 = load ptr, ptr %7, align 8, !tbaa !5
  %1559 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1558, i32 0, i32 3
  %1560 = load i32, ptr %1559, align 8, !tbaa !230
  %1561 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1560)
          to label %1562 unwind label %626

1562:                                             ; preds = %1557
  br label %1563

1563:                                             ; preds = %1562, %1554
  %1564 = phi i1 [ false, %1554 ], [ %1561, %1562 ]
  %1565 = zext i1 %1564 to i8
  store i8 %1565, ptr %20, align 1, !tbaa !21
  %1566 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.55)
          to label %1567 unwind label %626

1567:                                             ; preds = %1563
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #8
  %1568 = load ptr, ptr %7, align 8, !tbaa !5
  %1569 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1568, i32 0, i32 3
  %1570 = load i32, ptr %1569, align 8, !tbaa !230
  %1571 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %1570)
          to label %1572 unwind label %1590

1572:                                             ; preds = %1567
  store ptr %1571, ptr %131, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %132) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #8
  %1573 = load ptr, ptr %7, align 8, !tbaa !5
  %1574 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1573, i32 0, i32 0
  %1575 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1574, i32 0, i32 5
  %1576 = load i8, ptr %1575, align 2, !tbaa !225, !range !22, !noundef !23
  %1577 = trunc i8 %1576 to i1
  br i1 %1577, label %1578, label %1608

1578:                                             ; preds = %1572
  call void @llvm.lifetime.start.p0(i64 32, ptr %133) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %134) #8
  %1579 = load ptr, ptr %7, align 8, !tbaa !5
  %1580 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1579, i32 0, i32 3
  %1581 = load i32, ptr %1580, align 8, !tbaa !230
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1581, i1 noundef zeroext true)
          to label %1582 unwind label %1594

1582:                                             ; preds = %1578
  call void @llvm.lifetime.start.p0(i64 32, ptr %135) #8
  %1583 = load ptr, ptr %7, align 8, !tbaa !5
  %1584 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1583, i32 0, i32 1
  %1585 = load i32, ptr %1584, align 8, !tbaa !206
  %1586 = load i32, ptr %42, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1585, i32 noundef %1586)
          to label %1587 unwind label %1598

1587:                                             ; preds = %1582
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %133, ptr noundef nonnull align 8 dereferenceable(32) %134, ptr noundef nonnull align 1 dereferenceable(4) @.str.1220, ptr noundef nonnull align 8 dereferenceable(32) %135)
          to label %1588 unwind label %1602

1588:                                             ; preds = %1587
  %1589 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 8 dereferenceable(32) %133) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #8
  br label %1618

1590:                                             ; preds = %1567
  %1591 = landingpad { ptr, i32 }
          cleanup
  %1592 = extractvalue { ptr, i32 } %1591, 0
  store ptr %1592, ptr %21, align 8
  %1593 = extractvalue { ptr, i32 } %1591, 1
  store i32 %1593, ptr %22, align 4
  br label %1733

1594:                                             ; preds = %1578
  %1595 = landingpad { ptr, i32 }
          cleanup
  %1596 = extractvalue { ptr, i32 } %1595, 0
  store ptr %1596, ptr %21, align 8
  %1597 = extractvalue { ptr, i32 } %1595, 1
  store i32 %1597, ptr %22, align 4
  br label %1607

1598:                                             ; preds = %1582
  %1599 = landingpad { ptr, i32 }
          cleanup
  %1600 = extractvalue { ptr, i32 } %1599, 0
  store ptr %1600, ptr %21, align 8
  %1601 = extractvalue { ptr, i32 } %1599, 1
  store i32 %1601, ptr %22, align 4
  br label %1606

1602:                                             ; preds = %1587
  %1603 = landingpad { ptr, i32 }
          cleanup
  %1604 = extractvalue { ptr, i32 } %1603, 0
  store ptr %1604, ptr %21, align 8
  %1605 = extractvalue { ptr, i32 } %1603, 1
  store i32 %1605, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #8
  br label %1606

1606:                                             ; preds = %1602, %1598
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #8
  br label %1607

1607:                                             ; preds = %1606, %1594
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #8
  br label %1732

1608:                                             ; preds = %1572
  call void @llvm.lifetime.start.p0(i64 32, ptr %136) #8
  %1609 = load ptr, ptr %7, align 8, !tbaa !5
  %1610 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1609, i32 0, i32 3
  %1611 = load i32, ptr %1610, align 8, !tbaa !230
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %136, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1611, i1 noundef zeroext true)
          to label %1612 unwind label %1614

1612:                                             ; preds = %1608
  %1613 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 8 dereferenceable(32) %136) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #8
  br label %1618

1614:                                             ; preds = %1608
  %1615 = landingpad { ptr, i32 }
          cleanup
  %1616 = extractvalue { ptr, i32 } %1615, 0
  store ptr %1616, ptr %21, align 8
  %1617 = extractvalue { ptr, i32 } %1615, 1
  store i32 %1617, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #8
  br label %1732

1618:                                             ; preds = %1612, %1588
  %1619 = load ptr, ptr %131, align 8, !tbaa !5
  %1620 = invoke noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %1619)
          to label %1621 unwind label %1625

1621:                                             ; preds = %1618
  br i1 %1620, label %1622, label %1633

1622:                                             ; preds = %1621
  call void @llvm.lifetime.start.p0(i64 32, ptr %137) #8
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(12482) %194, ptr noundef nonnull align 8 dereferenceable(32) %132, i32 noundef 1)
          to label %1623 unwind label %1629

1623:                                             ; preds = %1622
  %1624 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 8 dereferenceable(32) %137) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %137) #8
  br label %1633

1625:                                             ; preds = %1724, %1718, %1713, %1706, %1635, %1633, %1618
  %1626 = landingpad { ptr, i32 }
          cleanup
  %1627 = extractvalue { ptr, i32 } %1626, 0
  store ptr %1627, ptr %21, align 8
  %1628 = extractvalue { ptr, i32 } %1626, 1
  store i32 %1628, ptr %22, align 4
  br label %1732

1629:                                             ; preds = %1622
  %1630 = landingpad { ptr, i32 }
          cleanup
  %1631 = extractvalue { ptr, i32 } %1630, 0
  store ptr %1631, ptr %21, align 8
  %1632 = extractvalue { ptr, i32 } %1630, 1
  store i32 %1632, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %137) #8
  br label %1732

1633:                                             ; preds = %1623, %1621
  %1634 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %132)
          to label %1635 unwind label %1625

1635:                                             ; preds = %1633
  %1636 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1637 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1636)
          to label %1638 unwind label %1625

1638:                                             ; preds = %1635
  br i1 %1637, label %1639, label %1706

1639:                                             ; preds = %1638
  %1640 = load i32, ptr %12, align 4, !tbaa !10
  %1641 = icmp ne i32 %1640, 0
  br i1 %1641, label %1645, label %1642

1642:                                             ; preds = %1639
  %1643 = load i32, ptr %13, align 4, !tbaa !10
  %1644 = icmp ne i32 %1643, 0
  br i1 %1644, label %1645, label %1706

1645:                                             ; preds = %1642, %1639
  call void @llvm.lifetime.start.p0(i64 1, ptr %138) #8
  %1646 = load i32, ptr %12, align 4, !tbaa !10
  %1647 = icmp ne i32 %1646, 0
  br i1 %1647, label %1648, label %1652

1648:                                             ; preds = %1645
  %1649 = load i32, ptr %12, align 4, !tbaa !10
  %1650 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1649)
          to label %1651 unwind label %1683

1651:                                             ; preds = %1648
  br label %1652

1652:                                             ; preds = %1651, %1645
  %1653 = phi i1 [ true, %1645 ], [ %1650, %1651 ]
  %1654 = zext i1 %1653 to i8
  store i8 %1654, ptr %138, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %139) #8
  %1655 = load i32, ptr %13, align 4, !tbaa !10
  %1656 = icmp ne i32 %1655, 0
  br i1 %1656, label %1657, label %1661

1657:                                             ; preds = %1652
  %1658 = load i32, ptr %13, align 4, !tbaa !10
  %1659 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1658)
          to label %1660 unwind label %1687

1660:                                             ; preds = %1657
  br label %1661

1661:                                             ; preds = %1660, %1652
  %1662 = phi i1 [ true, %1652 ], [ %1659, %1660 ]
  %1663 = zext i1 %1662 to i8
  store i8 %1663, ptr %139, align 1, !tbaa !21
  %1664 = load i8, ptr %138, align 1, !tbaa !21, !range !22, !noundef !23
  %1665 = trunc i8 %1664 to i1
  br i1 %1665, label %1666, label %1691

1666:                                             ; preds = %1661
  %1667 = load i8, ptr %139, align 1, !tbaa !21, !range !22, !noundef !23
  %1668 = trunc i8 %1667 to i1
  br i1 %1668, label %1669, label %1691

1669:                                             ; preds = %1666
  %1670 = load ptr, ptr %10, align 8, !tbaa !5
  %1671 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1670, i32 0, i32 14
  %1672 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1671, i32 0, i32 3
  %1673 = load i8, ptr %1672, align 1, !tbaa !226, !range !22, !noundef !23
  %1674 = trunc i8 %1673 to i1
  br i1 %1674, label %1675, label %1680

1675:                                             ; preds = %1669
  %1676 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1677 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1676, i32 0, i32 60
  %1678 = load i8, ptr %1677, align 1, !tbaa !231, !range !22, !noundef !23
  %1679 = trunc i8 %1678 to i1
  br i1 %1679, label %1691, label %1680

1680:                                             ; preds = %1675, %1669
  store i32 0, ptr %11, align 4, !tbaa !10
  store i32 0, ptr %12, align 4, !tbaa !10
  store i32 0, ptr %13, align 4, !tbaa !10
  %1681 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1233)
          to label %1682 unwind label %1687

1682:                                             ; preds = %1680
  br label %1703

1683:                                             ; preds = %1648
  %1684 = landingpad { ptr, i32 }
          cleanup
  %1685 = extractvalue { ptr, i32 } %1684, 0
  store ptr %1685, ptr %21, align 8
  %1686 = extractvalue { ptr, i32 } %1684, 1
  store i32 %1686, ptr %22, align 4
  br label %1705

1687:                                             ; preds = %1697, %1691, %1680, %1657
  %1688 = landingpad { ptr, i32 }
          cleanup
  %1689 = extractvalue { ptr, i32 } %1688, 0
  store ptr %1689, ptr %21, align 8
  %1690 = extractvalue { ptr, i32 } %1688, 1
  store i32 %1690, ptr %22, align 4
  br label %1704

1691:                                             ; preds = %1675, %1666, %1661
  %1692 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1693 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1692, i32 noundef 2, i32 noundef 3, i32 noundef 0)
          to label %1694 unwind label %1687

1694:                                             ; preds = %1691
  br i1 %1693, label %1702, label %1695

1695:                                             ; preds = %1694
  %1696 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1696, ptr noundef @.str.1234)
          to label %1697 unwind label %1698

1697:                                             ; preds = %1695
  invoke void @__cxa_throw(ptr %1696, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %2598 unwind label %1687

1698:                                             ; preds = %1695
  %1699 = landingpad { ptr, i32 }
          cleanup
  %1700 = extractvalue { ptr, i32 } %1699, 0
  store ptr %1700, ptr %21, align 8
  %1701 = extractvalue { ptr, i32 } %1699, 1
  store i32 %1701, ptr %22, align 4
  call void @__cxa_free_exception(ptr %1696) #8
  br label %1704

1702:                                             ; preds = %1694
  br label %1703

1703:                                             ; preds = %1702, %1682
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %138) #8
  br label %1706

1704:                                             ; preds = %1698, %1687
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #8
  br label %1705

1705:                                             ; preds = %1704, %1683
  call void @llvm.lifetime.end.p0(i64 1, ptr %138) #8
  br label %1732

1706:                                             ; preds = %1703, %1642, %1638
  %1707 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1708 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1707)
          to label %1709 unwind label %1625

1709:                                             ; preds = %1706
  br i1 %1708, label %1710, label %1731

1710:                                             ; preds = %1709
  %1711 = load i32, ptr %14, align 4, !tbaa !10
  %1712 = icmp ne i32 %1711, 0
  br i1 %1712, label %1713, label %1731

1713:                                             ; preds = %1710
  %1714 = load i32, ptr %14, align 4, !tbaa !10
  %1715 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1714)
          to label %1716 unwind label %1625

1716:                                             ; preds = %1713
  br i1 %1715, label %1717, label %1718

1717:                                             ; preds = %1716
  store i32 0, ptr %14, align 4, !tbaa !10
  br label %1730

1718:                                             ; preds = %1716
  %1719 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1720 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1719, i32 noundef 2, i32 noundef 3, i32 noundef 0)
          to label %1721 unwind label %1625

1721:                                             ; preds = %1718
  br i1 %1720, label %1729, label %1722

1722:                                             ; preds = %1721
  %1723 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1723, ptr noundef @.str.1235)
          to label %1724 unwind label %1725

1724:                                             ; preds = %1722
  invoke void @__cxa_throw(ptr %1723, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %2598 unwind label %1625

1725:                                             ; preds = %1722
  %1726 = landingpad { ptr, i32 }
          cleanup
  %1727 = extractvalue { ptr, i32 } %1726, 0
  store ptr %1727, ptr %21, align 8
  %1728 = extractvalue { ptr, i32 } %1726, 1
  store i32 %1728, ptr %22, align 4
  call void @__cxa_free_exception(ptr %1723) #8
  br label %1732

1729:                                             ; preds = %1721
  br label %1730

1730:                                             ; preds = %1729, %1717
  br label %1731

1731:                                             ; preds = %1730, %1710, %1709
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br label %1734

1732:                                             ; preds = %1725, %1705, %1629, %1625, %1614, %1607
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #8
  br label %1733

1733:                                             ; preds = %1732, %1590
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br label %2585

1734:                                             ; preds = %1731, %1549
  %1735 = load i32, ptr %14, align 4, !tbaa !10
  %1736 = icmp ne i32 %1735, 0
  br i1 %1736, label %1737, label %1783

1737:                                             ; preds = %1734
  %1738 = load ptr, ptr %10, align 8, !tbaa !5
  %1739 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1738, i32 0, i32 14
  %1740 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1739, i32 0, i32 1
  %1741 = load i32, ptr %1740, align 4, !tbaa !207
  %1742 = icmp ne i32 %1741, 0
  br i1 %1742, label %1748, label %1743

1743:                                             ; preds = %1737
  %1744 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1745 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1744, i32 0, i32 31
  %1746 = load i8, ptr %1745, align 1, !tbaa !221, !range !22, !noundef !23
  %1747 = trunc i8 %1746 to i1
  br i1 %1747, label %1748, label %1783

1748:                                             ; preds = %1743, %1737
  %1749 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %1750 = trunc i8 %1749 to i1
  br i1 %1750, label %1751, label %1755

1751:                                             ; preds = %1748
  %1752 = load i32, ptr %14, align 4, !tbaa !10
  %1753 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1752)
          to label %1754 unwind label %626

1754:                                             ; preds = %1751
  br label %1755

1755:                                             ; preds = %1754, %1748
  %1756 = phi i1 [ false, %1748 ], [ %1753, %1754 ]
  %1757 = zext i1 %1756 to i8
  store i8 %1757, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %140) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %141) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %142) #8
  %1758 = load i32, ptr %14, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %142, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1758, i1 noundef zeroext true)
          to label %1759 unwind label %1764

1759:                                             ; preds = %1755
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %141, ptr noundef @.str.1236, ptr noundef nonnull align 8 dereferenceable(32) %142)
          to label %1760 unwind label %1768

1760:                                             ; preds = %1759
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %140, ptr noundef nonnull align 8 dereferenceable(32) %141, ptr noundef @.str.53)
          to label %1761 unwind label %1772

1761:                                             ; preds = %1760
  %1762 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %140)
          to label %1763 unwind label %1776

1763:                                             ; preds = %1761
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %142) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %142) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %141) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %140) #8
  br label %1783

1764:                                             ; preds = %1755
  %1765 = landingpad { ptr, i32 }
          cleanup
  %1766 = extractvalue { ptr, i32 } %1765, 0
  store ptr %1766, ptr %21, align 8
  %1767 = extractvalue { ptr, i32 } %1765, 1
  store i32 %1767, ptr %22, align 4
  br label %1782

1768:                                             ; preds = %1759
  %1769 = landingpad { ptr, i32 }
          cleanup
  %1770 = extractvalue { ptr, i32 } %1769, 0
  store ptr %1770, ptr %21, align 8
  %1771 = extractvalue { ptr, i32 } %1769, 1
  store i32 %1771, ptr %22, align 4
  br label %1781

1772:                                             ; preds = %1760
  %1773 = landingpad { ptr, i32 }
          cleanup
  %1774 = extractvalue { ptr, i32 } %1773, 0
  store ptr %1774, ptr %21, align 8
  %1775 = extractvalue { ptr, i32 } %1773, 1
  store i32 %1775, ptr %22, align 4
  br label %1780

1776:                                             ; preds = %1761
  %1777 = landingpad { ptr, i32 }
          cleanup
  %1778 = extractvalue { ptr, i32 } %1777, 0
  store ptr %1778, ptr %21, align 8
  %1779 = extractvalue { ptr, i32 } %1777, 1
  store i32 %1779, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #8
  br label %1780

1780:                                             ; preds = %1776, %1772
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #8
  br label %1781

1781:                                             ; preds = %1780, %1768
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %142) #8
  br label %1782

1782:                                             ; preds = %1781, %1764
  call void @llvm.lifetime.end.p0(i64 32, ptr %142) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %141) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %140) #8
  br label %2585

1783:                                             ; preds = %1763, %1743, %1734
  %1784 = load i32, ptr %11, align 4, !tbaa !10
  %1785 = icmp ne i32 %1784, 0
  br i1 %1785, label %1786, label %2051

1786:                                             ; preds = %1783
  %1787 = load ptr, ptr %10, align 8, !tbaa !5
  %1788 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1787, i32 0, i32 14
  %1789 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1788, i32 0, i32 1
  %1790 = load i32, ptr %1789, align 4, !tbaa !207
  %1791 = icmp ne i32 %1790, 0
  br i1 %1791, label %1797, label %1792

1792:                                             ; preds = %1786
  %1793 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1794 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1793, i32 0, i32 31
  %1795 = load i8, ptr %1794, align 1, !tbaa !221, !range !22, !noundef !23
  %1796 = trunc i8 %1795 to i1
  br i1 %1796, label %1797, label %2051

1797:                                             ; preds = %1792, %1786
  %1798 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %1799 = trunc i8 %1798 to i1
  br i1 %1799, label %1800, label %1804

1800:                                             ; preds = %1797
  %1801 = load i32, ptr %11, align 4, !tbaa !10
  %1802 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1801)
          to label %1803 unwind label %626

1803:                                             ; preds = %1800
  br label %1804

1804:                                             ; preds = %1803, %1797
  %1805 = phi i1 [ false, %1797 ], [ %1802, %1803 ]
  %1806 = zext i1 %1805 to i8
  store i8 %1806, ptr %20, align 1, !tbaa !21
  %1807 = load ptr, ptr %7, align 8, !tbaa !5
  %1808 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1807, i32 0, i32 0
  %1809 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1808, i32 0, i32 3
  %1810 = load i8, ptr %1809, align 8, !tbaa !202, !range !22, !noundef !23
  %1811 = trunc i8 %1810 to i1
  br i1 %1811, label %1812, label %1832

1812:                                             ; preds = %1804
  call void @llvm.lifetime.start.p0(i64 32, ptr %143) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %144) #8
  %1813 = load i32, ptr %11, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %144, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1813, i1 noundef zeroext true)
          to label %1814 unwind label %1818

1814:                                             ; preds = %1812
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %143, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %144)
          to label %1815 unwind label %1822

1815:                                             ; preds = %1814
  %1816 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %143)
          to label %1817 unwind label %1826

1817:                                             ; preds = %1815
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %144) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %143) #8
  br label %2050

1818:                                             ; preds = %1812
  %1819 = landingpad { ptr, i32 }
          cleanup
  %1820 = extractvalue { ptr, i32 } %1819, 0
  store ptr %1820, ptr %21, align 8
  %1821 = extractvalue { ptr, i32 } %1819, 1
  store i32 %1821, ptr %22, align 4
  br label %1831

1822:                                             ; preds = %1814
  %1823 = landingpad { ptr, i32 }
          cleanup
  %1824 = extractvalue { ptr, i32 } %1823, 0
  store ptr %1824, ptr %21, align 8
  %1825 = extractvalue { ptr, i32 } %1823, 1
  store i32 %1825, ptr %22, align 4
  br label %1830

1826:                                             ; preds = %1815
  %1827 = landingpad { ptr, i32 }
          cleanup
  %1828 = extractvalue { ptr, i32 } %1827, 0
  store ptr %1828, ptr %21, align 8
  %1829 = extractvalue { ptr, i32 } %1827, 1
  store i32 %1829, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #8
  br label %1830

1830:                                             ; preds = %1826, %1822
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #8
  br label %1831

1831:                                             ; preds = %1830, %1818
  call void @llvm.lifetime.end.p0(i64 32, ptr %144) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %143) #8
  br label %2585

1832:                                             ; preds = %1804
  %1833 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1834 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1833, i32 0, i32 60
  %1835 = load i8, ptr %1834, align 1, !tbaa !231, !range !22, !noundef !23
  %1836 = trunc i8 %1835 to i1
  br i1 %1836, label %1837, label %2023

1837:                                             ; preds = %1832
  %1838 = load ptr, ptr %7, align 8, !tbaa !5
  %1839 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1838, i32 0, i32 3
  %1840 = load i32, ptr %1839, align 8, !tbaa !230
  %1841 = icmp ne i32 %1840, 0
  br i1 %1841, label %1842, label %2023

1842:                                             ; preds = %1837
  %1843 = load ptr, ptr %10, align 8, !tbaa !5
  %1844 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1843, i32 0, i32 14
  %1845 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1844, i32 0, i32 3
  %1846 = load i8, ptr %1845, align 1, !tbaa !226, !range !22, !noundef !23
  %1847 = trunc i8 %1846 to i1
  br i1 %1847, label %1848, label %2023

1848:                                             ; preds = %1842
  %1849 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1850 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1849)
          to label %1851 unwind label %626

1851:                                             ; preds = %1848
  br i1 %1850, label %1852, label %1863

1852:                                             ; preds = %1851
  %1853 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1854 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1853, i32 noundef 2, i32 noundef 3, i32 noundef 0)
          to label %1855 unwind label %626

1855:                                             ; preds = %1852
  br i1 %1854, label %1863, label %1856

1856:                                             ; preds = %1855
  %1857 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1857, ptr noundef @.str.1234)
          to label %1858 unwind label %1859

1858:                                             ; preds = %1856
  invoke void @__cxa_throw(ptr %1857, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %2598 unwind label %626

1859:                                             ; preds = %1856
  %1860 = landingpad { ptr, i32 }
          cleanup
  %1861 = extractvalue { ptr, i32 } %1860, 0
  store ptr %1861, ptr %21, align 8
  %1862 = extractvalue { ptr, i32 } %1860, 1
  store i32 %1862, ptr %22, align 4
  call void @__cxa_free_exception(ptr %1857) #8
  br label %2585

1863:                                             ; preds = %1855, %1851
  call void @llvm.lifetime.start.p0(i64 32, ptr %145) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %146) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %147) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %148) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %148, ptr align 4 %9, i64 4, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #8
  %1864 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %1865 unwind label %1873

1865:                                             ; preds = %1863
  %1866 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %1864)
          to label %1867 unwind label %1873

1867:                                             ; preds = %1865
  store ptr %1866, ptr %149, align 8, !tbaa !5
  %1868 = load ptr, ptr %149, align 8, !tbaa !5
  %1869 = icmp ne ptr %1868, null
  br i1 %1869, label %1870, label %1877

1870:                                             ; preds = %1867
  %1871 = load ptr, ptr %149, align 8, !tbaa !5
  %1872 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %1871, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %148, ptr align 8 %1872, i64 4, i1 false), !tbaa.struct !9
  br label %1877

1873:                                             ; preds = %1865, %1863
  %1874 = landingpad { ptr, i32 }
          cleanup
  %1875 = extractvalue { ptr, i32 } %1874, 0
  store ptr %1875, ptr %21, align 8
  %1876 = extractvalue { ptr, i32 } %1874, 1
  store i32 %1876, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  br label %2022

1877:                                             ; preds = %1870, %1867
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  %1878 = load ptr, ptr %10, align 8, !tbaa !5
  %1879 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1878, i32 0, i32 14
  %1880 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1879, i32 0, i32 1
  %1881 = load i32, ptr %1880, align 4, !tbaa !207
  switch i32 %1881, label %1990 [
    i32 0, label %1882
    i32 1, label %1903
    i32 3, label %1928
  ]

1882:                                             ; preds = %1877
  %1883 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1237)
          to label %1884 unwind label %1890

1884:                                             ; preds = %1882
  call void @llvm.lifetime.start.p0(i64 32, ptr %150) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %151) #8
  %1885 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %148)
          to label %1886 unwind label %1894

1886:                                             ; preds = %1884
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %151, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1885, i1 noundef zeroext true)
          to label %1887 unwind label %1894

1887:                                             ; preds = %1886
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA19_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %150, ptr noundef nonnull align 1 dereferenceable(8) @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 1 dereferenceable(19) @.str.1238)
          to label %1888 unwind label %1898

1888:                                             ; preds = %1887
  %1889 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 8 dereferenceable(32) %150) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %151) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %150) #8
  br label %1995

1890:                                             ; preds = %1992, %1990, %1971, %1962, %1961, %1939, %1903, %1882
  %1891 = landingpad { ptr, i32 }
          cleanup
  %1892 = extractvalue { ptr, i32 } %1891, 0
  store ptr %1892, ptr %21, align 8
  %1893 = extractvalue { ptr, i32 } %1891, 1
  store i32 %1893, ptr %22, align 4
  br label %2022

1894:                                             ; preds = %1886, %1884
  %1895 = landingpad { ptr, i32 }
          cleanup
  %1896 = extractvalue { ptr, i32 } %1895, 0
  store ptr %1896, ptr %21, align 8
  %1897 = extractvalue { ptr, i32 } %1895, 1
  store i32 %1897, ptr %22, align 4
  br label %1902

1898:                                             ; preds = %1887
  %1899 = landingpad { ptr, i32 }
          cleanup
  %1900 = extractvalue { ptr, i32 } %1899, 0
  store ptr %1900, ptr %21, align 8
  %1901 = extractvalue { ptr, i32 } %1899, 1
  store i32 %1901, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #8
  br label %1902

1902:                                             ; preds = %1898, %1894
  call void @llvm.lifetime.end.p0(i64 32, ptr %151) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %150) #8
  br label %2022

1903:                                             ; preds = %1877
  %1904 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1237)
          to label %1905 unwind label %1890

1905:                                             ; preds = %1903
  call void @llvm.lifetime.start.p0(i64 32, ptr %152) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %153) #8
  %1906 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %148)
          to label %1907 unwind label %1914

1907:                                             ; preds = %1905
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1906, i1 noundef zeroext true)
          to label %1908 unwind label %1914

1908:                                             ; preds = %1907
  call void @llvm.lifetime.start.p0(i64 32, ptr %154) #8
  %1909 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %148)
          to label %1910 unwind label %1918

1910:                                             ; preds = %1908
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %154, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1909, i1 noundef zeroext true)
          to label %1911 unwind label %1918

1911:                                             ; preds = %1910
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA15_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %152, ptr noundef nonnull align 1 dereferenceable(8) @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %153, ptr noundef nonnull align 1 dereferenceable(15) @.str.1239, ptr noundef nonnull align 8 dereferenceable(32) %154, ptr noundef nonnull align 1 dereferenceable(15) @.str.1240)
          to label %1912 unwind label %1922

1912:                                             ; preds = %1911
  %1913 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 8 dereferenceable(32) %152) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %154) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #8
  br label %1995

1914:                                             ; preds = %1907, %1905
  %1915 = landingpad { ptr, i32 }
          cleanup
  %1916 = extractvalue { ptr, i32 } %1915, 0
  store ptr %1916, ptr %21, align 8
  %1917 = extractvalue { ptr, i32 } %1915, 1
  store i32 %1917, ptr %22, align 4
  br label %1927

1918:                                             ; preds = %1910, %1908
  %1919 = landingpad { ptr, i32 }
          cleanup
  %1920 = extractvalue { ptr, i32 } %1919, 0
  store ptr %1920, ptr %21, align 8
  %1921 = extractvalue { ptr, i32 } %1919, 1
  store i32 %1921, ptr %22, align 4
  br label %1926

1922:                                             ; preds = %1911
  %1923 = landingpad { ptr, i32 }
          cleanup
  %1924 = extractvalue { ptr, i32 } %1923, 0
  store ptr %1924, ptr %21, align 8
  %1925 = extractvalue { ptr, i32 } %1923, 1
  store i32 %1925, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #8
  br label %1926

1926:                                             ; preds = %1922, %1918
  call void @llvm.lifetime.end.p0(i64 32, ptr %154) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #8
  br label %1927

1927:                                             ; preds = %1926, %1914
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #8
  br label %2022

1928:                                             ; preds = %1877
  %1929 = load ptr, ptr %10, align 8, !tbaa !5
  %1930 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1929, i32 0, i32 14
  %1931 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1930, i32 0, i32 3
  %1932 = load i8, ptr %1931, align 1, !tbaa !226, !range !22, !noundef !23
  %1933 = trunc i8 %1932 to i1
  br i1 %1933, label %1934, label %1956

1934:                                             ; preds = %1928
  %1935 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1936 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1935, i32 0, i32 41
  %1937 = load i8, ptr %1936, align 2, !tbaa !227, !range !22, !noundef !23
  %1938 = trunc i8 %1937 to i1
  br i1 %1938, label %1939, label %1956

1939:                                             ; preds = %1934
  %1940 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1237)
          to label %1941 unwind label %1890

1941:                                             ; preds = %1939
  call void @llvm.lifetime.start.p0(i64 32, ptr %155) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %156) #8
  %1942 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %148)
          to label %1943 unwind label %1947

1943:                                             ; preds = %1941
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %156, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1942, i1 noundef zeroext true)
          to label %1944 unwind label %1947

1944:                                             ; preds = %1943
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %155, ptr noundef nonnull align 1 dereferenceable(8) @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %156, ptr noundef nonnull align 1 dereferenceable(14) @.str.1241)
          to label %1945 unwind label %1951

1945:                                             ; preds = %1944
  %1946 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 8 dereferenceable(32) %155) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %156) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %155) #8
  br label %1989

1947:                                             ; preds = %1943, %1941
  %1948 = landingpad { ptr, i32 }
          cleanup
  %1949 = extractvalue { ptr, i32 } %1948, 0
  store ptr %1949, ptr %21, align 8
  %1950 = extractvalue { ptr, i32 } %1948, 1
  store i32 %1950, ptr %22, align 4
  br label %1955

1951:                                             ; preds = %1944
  %1952 = landingpad { ptr, i32 }
          cleanup
  %1953 = extractvalue { ptr, i32 } %1952, 0
  store ptr %1953, ptr %21, align 8
  %1954 = extractvalue { ptr, i32 } %1952, 1
  store i32 %1954, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #8
  br label %1955

1955:                                             ; preds = %1951, %1947
  call void @llvm.lifetime.end.p0(i64 32, ptr %156) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %155) #8
  br label %2022

1956:                                             ; preds = %1934, %1928
  %1957 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %1958 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1957, i32 0, i32 63
  %1959 = load i8, ptr %1958, align 2, !tbaa !232, !range !22, !noundef !23
  %1960 = trunc i8 %1959 to i1
  br i1 %1960, label %1961, label %1971

1961:                                             ; preds = %1956
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %194, i8 noundef zeroext 12)
          to label %1962 unwind label %1890

1962:                                             ; preds = %1961
  %1963 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1242)
          to label %1964 unwind label %1890

1964:                                             ; preds = %1962
  call void @llvm.lifetime.start.p0(i64 32, ptr %157) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %157, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.55)
          to label %1965 unwind label %1967

1965:                                             ; preds = %1964
  %1966 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull align 8 dereferenceable(32) %157) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #8
  br label %1974

1967:                                             ; preds = %1964
  %1968 = landingpad { ptr, i32 }
          cleanup
  %1969 = extractvalue { ptr, i32 } %1968, 0
  store ptr %1969, ptr %21, align 8
  %1970 = extractvalue { ptr, i32 } %1968, 1
  store i32 %1970, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #8
  br label %2022

1971:                                             ; preds = %1956
  %1972 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1243)
          to label %1973 unwind label %1890

1973:                                             ; preds = %1971
  br label %1974

1974:                                             ; preds = %1973, %1965
  call void @llvm.lifetime.start.p0(i64 32, ptr %158) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %159) #8
  %1975 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %148)
          to label %1976 unwind label %1980

1976:                                             ; preds = %1974
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %159, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1975, i1 noundef zeroext true)
          to label %1977 unwind label %1980

1977:                                             ; preds = %1976
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %158, ptr noundef nonnull align 1 dereferenceable(8) @.str.1244, ptr noundef nonnull align 8 dereferenceable(32) %159, ptr noundef nonnull align 1 dereferenceable(14) @.str.1241)
          to label %1978 unwind label %1984

1978:                                             ; preds = %1977
  %1979 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 8 dereferenceable(32) %158) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %159) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %158) #8
  br label %1989

1980:                                             ; preds = %1976, %1974
  %1981 = landingpad { ptr, i32 }
          cleanup
  %1982 = extractvalue { ptr, i32 } %1981, 0
  store ptr %1982, ptr %21, align 8
  %1983 = extractvalue { ptr, i32 } %1981, 1
  store i32 %1983, ptr %22, align 4
  br label %1988

1984:                                             ; preds = %1977
  %1985 = landingpad { ptr, i32 }
          cleanup
  %1986 = extractvalue { ptr, i32 } %1985, 0
  store ptr %1986, ptr %21, align 8
  %1987 = extractvalue { ptr, i32 } %1985, 1
  store i32 %1987, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #8
  br label %1988

1988:                                             ; preds = %1984, %1980
  call void @llvm.lifetime.end.p0(i64 32, ptr %159) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %158) #8
  br label %2022

1989:                                             ; preds = %1978, %1945
  br label %1995

1990:                                             ; preds = %1877
  %1991 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1245)
          to label %1992 unwind label %1890

1992:                                             ; preds = %1990
  %1993 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef @.str.1246)
          to label %1994 unwind label %1890

1994:                                             ; preds = %1992
  br label %1995

1995:                                             ; preds = %1994, %1989, %1912, %1888
  call void @llvm.lifetime.start.p0(i64 32, ptr %160) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %161) #8
  %1996 = load i32, ptr %11, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %161, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1996, i1 noundef zeroext true)
          to label %1997 unwind label %2003

1997:                                             ; preds = %1995
  call void @llvm.lifetime.start.p0(i64 32, ptr %162) #8
  %1998 = load i32, ptr %11, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %162, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %1998, i1 noundef zeroext true)
          to label %1999 unwind label %2007

1999:                                             ; preds = %1997
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA6_S1_S9_RA11_S1_SA_RA8_S1_S9_SG_SA_SC_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %160, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull align 1 dereferenceable(6) @.str.1247, ptr noundef nonnull align 8 dereferenceable(32) %161, ptr noundef nonnull align 1 dereferenceable(11) @.str.1248, ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 1 dereferenceable(8) @.str.1249, ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull align 1 dereferenceable(11) @.str.1248, ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2000 unwind label %2011

2000:                                             ; preds = %1999
  %2001 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %160)
          to label %2002 unwind label %2015

2002:                                             ; preds = %2000
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %162) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %161) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %160) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %148) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %147) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %146) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %145) #8
  br label %2049

2003:                                             ; preds = %1995
  %2004 = landingpad { ptr, i32 }
          cleanup
  %2005 = extractvalue { ptr, i32 } %2004, 0
  store ptr %2005, ptr %21, align 8
  %2006 = extractvalue { ptr, i32 } %2004, 1
  store i32 %2006, ptr %22, align 4
  br label %2021

2007:                                             ; preds = %1997
  %2008 = landingpad { ptr, i32 }
          cleanup
  %2009 = extractvalue { ptr, i32 } %2008, 0
  store ptr %2009, ptr %21, align 8
  %2010 = extractvalue { ptr, i32 } %2008, 1
  store i32 %2010, ptr %22, align 4
  br label %2020

2011:                                             ; preds = %1999
  %2012 = landingpad { ptr, i32 }
          cleanup
  %2013 = extractvalue { ptr, i32 } %2012, 0
  store ptr %2013, ptr %21, align 8
  %2014 = extractvalue { ptr, i32 } %2012, 1
  store i32 %2014, ptr %22, align 4
  br label %2019

2015:                                             ; preds = %2000
  %2016 = landingpad { ptr, i32 }
          cleanup
  %2017 = extractvalue { ptr, i32 } %2016, 0
  store ptr %2017, ptr %21, align 8
  %2018 = extractvalue { ptr, i32 } %2016, 1
  store i32 %2018, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #8
  br label %2019

2019:                                             ; preds = %2015, %2011
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #8
  br label %2020

2020:                                             ; preds = %2019, %2007
  call void @llvm.lifetime.end.p0(i64 32, ptr %162) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #8
  br label %2021

2021:                                             ; preds = %2020, %2003
  call void @llvm.lifetime.end.p0(i64 32, ptr %161) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %160) #8
  br label %2022

2022:                                             ; preds = %2021, %1988, %1967, %1955, %1927, %1902, %1890, %1873
  call void @llvm.lifetime.end.p0(i64 4, ptr %148) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %147) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %146) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %145) #8
  br label %2585

2023:                                             ; preds = %1842, %1837, %1832
  call void @llvm.lifetime.start.p0(i64 32, ptr %163) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %164) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %165) #8
  %2024 = load i32, ptr %11, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %165, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2024, i1 noundef zeroext true)
          to label %2025 unwind label %2030

2025:                                             ; preds = %2023
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %164, ptr noundef @.str.1250, ptr noundef nonnull align 8 dereferenceable(32) %165)
          to label %2026 unwind label %2034

2026:                                             ; preds = %2025
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %163, ptr noundef nonnull align 8 dereferenceable(32) %164, ptr noundef @.str.53)
          to label %2027 unwind label %2038

2027:                                             ; preds = %2026
  %2028 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %163)
          to label %2029 unwind label %2042

2029:                                             ; preds = %2027
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %165) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %164) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %163) #8
  br label %2049

2030:                                             ; preds = %2023
  %2031 = landingpad { ptr, i32 }
          cleanup
  %2032 = extractvalue { ptr, i32 } %2031, 0
  store ptr %2032, ptr %21, align 8
  %2033 = extractvalue { ptr, i32 } %2031, 1
  store i32 %2033, ptr %22, align 4
  br label %2048

2034:                                             ; preds = %2025
  %2035 = landingpad { ptr, i32 }
          cleanup
  %2036 = extractvalue { ptr, i32 } %2035, 0
  store ptr %2036, ptr %21, align 8
  %2037 = extractvalue { ptr, i32 } %2035, 1
  store i32 %2037, ptr %22, align 4
  br label %2047

2038:                                             ; preds = %2026
  %2039 = landingpad { ptr, i32 }
          cleanup
  %2040 = extractvalue { ptr, i32 } %2039, 0
  store ptr %2040, ptr %21, align 8
  %2041 = extractvalue { ptr, i32 } %2039, 1
  store i32 %2041, ptr %22, align 4
  br label %2046

2042:                                             ; preds = %2027
  %2043 = landingpad { ptr, i32 }
          cleanup
  %2044 = extractvalue { ptr, i32 } %2043, 0
  store ptr %2044, ptr %21, align 8
  %2045 = extractvalue { ptr, i32 } %2043, 1
  store i32 %2045, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #8
  br label %2046

2046:                                             ; preds = %2042, %2038
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #8
  br label %2047

2047:                                             ; preds = %2046, %2034
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #8
  br label %2048

2048:                                             ; preds = %2047, %2030
  call void @llvm.lifetime.end.p0(i64 32, ptr %165) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %164) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %163) #8
  br label %2585

2049:                                             ; preds = %2029, %2002
  br label %2050

2050:                                             ; preds = %2049, %1817
  br label %2093

2051:                                             ; preds = %1792, %1783
  %2052 = load ptr, ptr %7, align 8, !tbaa !5
  %2053 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2052, i32 0, i32 0
  %2054 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %2053, i32 0, i32 3
  %2055 = load i8, ptr %2054, align 8, !tbaa !202, !range !22, !noundef !23
  %2056 = trunc i8 %2055 to i1
  br i1 %2056, label %2057, label %2092

2057:                                             ; preds = %2051
  %2058 = load i32, ptr %11, align 4, !tbaa !10
  %2059 = icmp ne i32 %2058, 0
  br i1 %2059, label %2092, label %2060

2060:                                             ; preds = %2057
  %2061 = load ptr, ptr %10, align 8, !tbaa !5
  %2062 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2061, i32 0, i32 14
  %2063 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2062, i32 0, i32 1
  %2064 = load i32, ptr %2063, align 4, !tbaa !207
  %2065 = icmp ne i32 %2064, 0
  br i1 %2065, label %2071, label %2066

2066:                                             ; preds = %2060
  %2067 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2068 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2067, i32 0, i32 31
  %2069 = load i8, ptr %2068, align 1, !tbaa !221, !range !22, !noundef !23
  %2070 = trunc i8 %2069 to i1
  br i1 %2070, label %2071, label %2092

2071:                                             ; preds = %2066, %2060
  %2072 = load ptr, ptr %10, align 8, !tbaa !5
  %2073 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2072, i32 0, i32 14
  %2074 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2073, i32 0, i32 1
  %2075 = load i32, ptr %2074, align 4, !tbaa !207
  %2076 = icmp ne i32 %2075, 5
  br i1 %2076, label %2077, label %2092

2077:                                             ; preds = %2071
  %2078 = load ptr, ptr %10, align 8, !tbaa !5
  %2079 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2078, i32 0, i32 14
  %2080 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2079, i32 0, i32 4
  %2081 = load i8, ptr %2080, align 2, !tbaa !233, !range !22, !noundef !23
  %2082 = trunc i8 %2081 to i1
  br i1 %2082, label %2092, label %2083

2083:                                             ; preds = %2077
  %2084 = load ptr, ptr %10, align 8, !tbaa !5
  %2085 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2084, i32 0, i32 14
  %2086 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2085, i32 0, i32 5
  %2087 = load i32, ptr %2086, align 4, !tbaa !234
  %2088 = icmp ne i32 %2087, 2
  br i1 %2088, label %2089, label %2092

2089:                                             ; preds = %2083
  %2090 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1251)
          to label %2091 unwind label %626

2091:                                             ; preds = %2089
  br label %2092

2092:                                             ; preds = %2091, %2083, %2077, %2071, %2066, %2057, %2051
  br label %2093

2093:                                             ; preds = %2092, %2050
  %2094 = load i32, ptr %12, align 4, !tbaa !10
  %2095 = icmp ne i32 %2094, 0
  br i1 %2095, label %2099, label %2096

2096:                                             ; preds = %2093
  %2097 = load i32, ptr %13, align 4, !tbaa !10
  %2098 = icmp ne i32 %2097, 0
  br i1 %2098, label %2099, label %2208

2099:                                             ; preds = %2096, %2093
  %2100 = load ptr, ptr %10, align 8, !tbaa !5
  %2101 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2100, i32 0, i32 14
  %2102 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2101, i32 0, i32 1
  %2103 = load i32, ptr %2102, align 4, !tbaa !207
  %2104 = icmp ne i32 %2103, 0
  br i1 %2104, label %2110, label %2105

2105:                                             ; preds = %2099
  %2106 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2107 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2106, i32 0, i32 31
  %2108 = load i8, ptr %2107, align 1, !tbaa !221, !range !22, !noundef !23
  %2109 = trunc i8 %2108 to i1
  br i1 %2109, label %2110, label %2208

2110:                                             ; preds = %2105, %2099
  %2111 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2112 = trunc i8 %2111 to i1
  br i1 %2112, label %2113, label %2117

2113:                                             ; preds = %2110
  %2114 = load i32, ptr %12, align 4, !tbaa !10
  %2115 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2114)
          to label %2116 unwind label %626

2116:                                             ; preds = %2113
  br label %2117

2117:                                             ; preds = %2116, %2110
  %2118 = phi i1 [ false, %2110 ], [ %2115, %2116 ]
  %2119 = zext i1 %2118 to i8
  store i8 %2119, ptr %20, align 1, !tbaa !21
  %2120 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2121 = trunc i8 %2120 to i1
  br i1 %2121, label %2122, label %2126

2122:                                             ; preds = %2117
  %2123 = load i32, ptr %13, align 4, !tbaa !10
  %2124 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2123)
          to label %2125 unwind label %626

2125:                                             ; preds = %2122
  br label %2126

2126:                                             ; preds = %2125, %2117
  %2127 = phi i1 [ false, %2117 ], [ %2124, %2125 ]
  %2128 = zext i1 %2127 to i8
  store i8 %2128, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %166) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %167) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #8
  %2129 = load ptr, ptr %10, align 8, !tbaa !5
  %2130 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2129, i32 0, i32 14
  %2131 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2130, i32 0, i32 1
  %2132 = load i32, ptr %2131, align 4, !tbaa !207
  switch i32 %2132, label %2177 [
    i32 0, label %2133
    i32 1, label %2133
    i32 2, label %2140
    i32 3, label %2143
  ]

2133:                                             ; preds = %2126, %2126
  %2134 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef @.str.1237)
          to label %2135 unwind label %2136

2135:                                             ; preds = %2133
  br label %2180

2136:                                             ; preds = %2177, %2172, %2163, %2162, %2154, %2140, %2133
  %2137 = landingpad { ptr, i32 }
          cleanup
  %2138 = extractvalue { ptr, i32 } %2137, 0
  store ptr %2138, ptr %21, align 8
  %2139 = extractvalue { ptr, i32 } %2137, 1
  store i32 %2139, ptr %22, align 4
  br label %2207

2140:                                             ; preds = %2126
  %2141 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef @.str.1252)
          to label %2142 unwind label %2136

2142:                                             ; preds = %2140
  br label %2180

2143:                                             ; preds = %2126
  %2144 = load ptr, ptr %10, align 8, !tbaa !5
  %2145 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2144, i32 0, i32 14
  %2146 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2145, i32 0, i32 3
  %2147 = load i8, ptr %2146, align 1, !tbaa !226, !range !22, !noundef !23
  %2148 = trunc i8 %2147 to i1
  br i1 %2148, label %2149, label %2157

2149:                                             ; preds = %2143
  %2150 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2151 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2150, i32 0, i32 41
  %2152 = load i8, ptr %2151, align 2, !tbaa !227, !range !22, !noundef !23
  %2153 = trunc i8 %2152 to i1
  br i1 %2153, label %2154, label %2157

2154:                                             ; preds = %2149
  %2155 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef @.str.1237)
          to label %2156 unwind label %2136

2156:                                             ; preds = %2154
  br label %2176

2157:                                             ; preds = %2149, %2143
  %2158 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2159 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2158, i32 0, i32 63
  %2160 = load i8, ptr %2159, align 2, !tbaa !232, !range !22, !noundef !23
  %2161 = trunc i8 %2160 to i1
  br i1 %2161, label %2162, label %2172

2162:                                             ; preds = %2157
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %194, i8 noundef zeroext 12)
          to label %2163 unwind label %2136

2163:                                             ; preds = %2162
  %2164 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef @.str.1242)
          to label %2165 unwind label %2136

2165:                                             ; preds = %2163
  call void @llvm.lifetime.start.p0(i64 32, ptr %168) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %168, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.55)
          to label %2166 unwind label %2168

2166:                                             ; preds = %2165
  %2167 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %167, ptr noundef nonnull align 8 dereferenceable(32) %168) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %168) #8
  br label %2175

2168:                                             ; preds = %2165
  %2169 = landingpad { ptr, i32 }
          cleanup
  %2170 = extractvalue { ptr, i32 } %2169, 0
  store ptr %2170, ptr %21, align 8
  %2171 = extractvalue { ptr, i32 } %2169, 1
  store i32 %2171, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %168) #8
  br label %2207

2172:                                             ; preds = %2157
  %2173 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef @.str.1243)
          to label %2174 unwind label %2136

2174:                                             ; preds = %2172
  br label %2175

2175:                                             ; preds = %2174, %2166
  br label %2176

2176:                                             ; preds = %2175, %2156
  br label %2180

2177:                                             ; preds = %2126
  %2178 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef @.str.1245)
          to label %2179 unwind label %2136

2179:                                             ; preds = %2177
  br label %2180

2180:                                             ; preds = %2179, %2176, %2142, %2135
  call void @llvm.lifetime.start.p0(i64 32, ptr %169) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %170) #8
  %2181 = load i32, ptr %12, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %170, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2181, i1 noundef zeroext true)
          to label %2182 unwind label %2188

2182:                                             ; preds = %2180
  call void @llvm.lifetime.start.p0(i64 32, ptr %171) #8
  %2183 = load i32, ptr %13, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %171, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2183, i1 noundef zeroext true)
          to label %2184 unwind label %2192

2184:                                             ; preds = %2182
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_S9_S3_S9_SC_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %169, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %167, ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2185 unwind label %2196

2185:                                             ; preds = %2184
  %2186 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %169)
          to label %2187 unwind label %2200

2187:                                             ; preds = %2185
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %170) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %169) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %167) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %166) #8
  br label %2208

2188:                                             ; preds = %2180
  %2189 = landingpad { ptr, i32 }
          cleanup
  %2190 = extractvalue { ptr, i32 } %2189, 0
  store ptr %2190, ptr %21, align 8
  %2191 = extractvalue { ptr, i32 } %2189, 1
  store i32 %2191, ptr %22, align 4
  br label %2206

2192:                                             ; preds = %2182
  %2193 = landingpad { ptr, i32 }
          cleanup
  %2194 = extractvalue { ptr, i32 } %2193, 0
  store ptr %2194, ptr %21, align 8
  %2195 = extractvalue { ptr, i32 } %2193, 1
  store i32 %2195, ptr %22, align 4
  br label %2205

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

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

2204:                                             ; preds = %2200, %2196
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #8
  br label %2205

2205:                                             ; preds = %2204, %2192
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #8
  br label %2206

2206:                                             ; preds = %2205, %2188
  call void @llvm.lifetime.end.p0(i64 32, ptr %170) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %169) #8
  br label %2207

2207:                                             ; preds = %2206, %2168, %2136
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %167) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %166) #8
  br label %2585

2208:                                             ; preds = %2187, %2105, %2096
  %2209 = load ptr, ptr %7, align 8, !tbaa !5
  %2210 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2209, i32 0, i32 12
  %2211 = load i32, ptr %2210, align 4, !tbaa !235
  %2212 = icmp ne i32 %2211, 0
  br i1 %2212, label %2213, label %2263

2213:                                             ; preds = %2208
  %2214 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2215 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %2214, i32 noundef 2, i32 noundef 2, i32 noundef 0)
          to label %2216 unwind label %626

2216:                                             ; preds = %2213
  br i1 %2215, label %2224, label %2217

2217:                                             ; preds = %2216
  %2218 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2218, ptr noundef @.str.1253)
          to label %2219 unwind label %2220

2219:                                             ; preds = %2217
  invoke void @__cxa_throw(ptr %2218, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %2598 unwind label %626

2220:                                             ; preds = %2217
  %2221 = landingpad { ptr, i32 }
          cleanup
  %2222 = extractvalue { ptr, i32 } %2221, 0
  store ptr %2222, ptr %21, align 8
  %2223 = extractvalue { ptr, i32 } %2221, 1
  store i32 %2223, ptr %22, align 4
  call void @__cxa_free_exception(ptr %2218) #8
  br label %2585

2224:                                             ; preds = %2216
  %2225 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2226 = trunc i8 %2225 to i1
  br i1 %2226, label %2227, label %2233

2227:                                             ; preds = %2224
  %2228 = load ptr, ptr %7, align 8, !tbaa !5
  %2229 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2228, i32 0, i32 12
  %2230 = load i32, ptr %2229, align 4, !tbaa !235
  %2231 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2230)
          to label %2232 unwind label %626

2232:                                             ; preds = %2227
  br label %2233

2233:                                             ; preds = %2232, %2224
  %2234 = phi i1 [ false, %2224 ], [ %2231, %2232 ]
  %2235 = zext i1 %2234 to i8
  store i8 %2235, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %172) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %173) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %174) #8
  %2236 = load ptr, ptr %7, align 8, !tbaa !5
  %2237 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2236, i32 0, i32 12
  %2238 = load i32, ptr %2237, align 4, !tbaa !235
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %174, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2238, i1 noundef zeroext true)
          to label %2239 unwind label %2244

2239:                                             ; preds = %2233
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %173, ptr noundef @.str.1254, ptr noundef nonnull align 8 dereferenceable(32) %174)
          to label %2240 unwind label %2248

2240:                                             ; preds = %2239
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %172, ptr noundef nonnull align 8 dereferenceable(32) %173, ptr noundef @.str.53)
          to label %2241 unwind label %2252

2241:                                             ; preds = %2240
  %2242 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %172)
          to label %2243 unwind label %2256

2243:                                             ; preds = %2241
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %174) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %173) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %172) #8
  br label %2263

2244:                                             ; preds = %2233
  %2245 = landingpad { ptr, i32 }
          cleanup
  %2246 = extractvalue { ptr, i32 } %2245, 0
  store ptr %2246, ptr %21, align 8
  %2247 = extractvalue { ptr, i32 } %2245, 1
  store i32 %2247, ptr %22, align 4
  br label %2262

2248:                                             ; preds = %2239
  %2249 = landingpad { ptr, i32 }
          cleanup
  %2250 = extractvalue { ptr, i32 } %2249, 0
  store ptr %2250, ptr %21, align 8
  %2251 = extractvalue { ptr, i32 } %2249, 1
  store i32 %2251, ptr %22, align 4
  br label %2261

2252:                                             ; preds = %2240
  %2253 = landingpad { ptr, i32 }
          cleanup
  %2254 = extractvalue { ptr, i32 } %2253, 0
  store ptr %2254, ptr %21, align 8
  %2255 = extractvalue { ptr, i32 } %2253, 1
  store i32 %2255, ptr %22, align 4
  br label %2260

2256:                                             ; preds = %2241
  %2257 = landingpad { ptr, i32 }
          cleanup
  %2258 = extractvalue { ptr, i32 } %2257, 0
  store ptr %2258, ptr %21, align 8
  %2259 = extractvalue { ptr, i32 } %2257, 1
  store i32 %2259, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #8
  br label %2260

2260:                                             ; preds = %2256, %2252
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #8
  br label %2261

2261:                                             ; preds = %2260, %2248
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #8
  br label %2262

2262:                                             ; preds = %2261, %2244
  call void @llvm.lifetime.end.p0(i64 32, ptr %174) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %173) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %172) #8
  br label %2585

2263:                                             ; preds = %2243, %2208
  call void @llvm.lifetime.start.p0(i64 32, ptr %175) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %176) #8
  store ptr null, ptr %176, align 8, !tbaa !5
  %2264 = load ptr, ptr %7, align 8, !tbaa !5
  %2265 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2264, i32 0, i32 7
  %2266 = load i32, ptr %2265, align 8, !tbaa !204
  %2267 = icmp ne i32 %2266, 0
  br i1 %2267, label %2268, label %2309

2268:                                             ; preds = %2263
  %2269 = load ptr, ptr %7, align 8, !tbaa !5
  %2270 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2269, i32 0, i32 0
  %2271 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %2270, i32 0, i32 3
  %2272 = load i8, ptr %2271, align 8, !tbaa !202, !range !22, !noundef !23
  %2273 = trunc i8 %2272 to i1
  br i1 %2273, label %2309, label %2274

2274:                                             ; preds = %2268
  %2275 = load ptr, ptr %7, align 8, !tbaa !5
  %2276 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2275, i32 0, i32 14
  %2277 = load i8, ptr %2276, align 1, !tbaa !201, !range !22, !noundef !23
  %2278 = trunc i8 %2277 to i1
  br i1 %2278, label %2309, label %2279

2279:                                             ; preds = %2274
  %2280 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2281 = trunc i8 %2280 to i1
  br i1 %2281, label %2282, label %2288

2282:                                             ; preds = %2279
  %2283 = load ptr, ptr %7, align 8, !tbaa !5
  %2284 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2283, i32 0, i32 7
  %2285 = load i32, ptr %2284, align 8, !tbaa !204
  %2286 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2285)
          to label %2287 unwind label %2301

2287:                                             ; preds = %2282
  br label %2288

2288:                                             ; preds = %2287, %2279
  %2289 = phi i1 [ false, %2279 ], [ %2286, %2287 ]
  %2290 = zext i1 %2289 to i8
  store i8 %2290, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 32, ptr %177) #8
  %2291 = load ptr, ptr %7, align 8, !tbaa !5
  %2292 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2291, i32 0, i32 7
  %2293 = load i32, ptr %2292, align 8, !tbaa !204
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %177, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2293, i1 noundef zeroext true)
          to label %2294 unwind label %2305

2294:                                             ; preds = %2288
  %2295 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 8 dereferenceable(32) %177) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %177) #8
  %2296 = load ptr, ptr %7, align 8, !tbaa !5
  %2297 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2296, i32 0, i32 7
  %2298 = load i32, ptr %2297, align 8, !tbaa !204
  %2299 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %2298)
          to label %2300 unwind label %2301

2300:                                             ; preds = %2294
  store ptr %2299, ptr %176, align 8, !tbaa !5
  br label %2309

2301:                                             ; preds = %2558, %2552, %2449, %2435, %2294, %2282
  %2302 = landingpad { ptr, i32 }
          cleanup
  %2303 = extractvalue { ptr, i32 } %2302, 0
  store ptr %2303, ptr %21, align 8
  %2304 = extractvalue { ptr, i32 } %2302, 1
  store i32 %2304, ptr %22, align 4
  br label %2584

2305:                                             ; preds = %2288
  %2306 = landingpad { ptr, i32 }
          cleanup
  %2307 = extractvalue { ptr, i32 } %2306, 0
  store ptr %2307, ptr %21, align 8
  %2308 = extractvalue { ptr, i32 } %2306, 1
  store i32 %2308, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %177) #8
  br label %2584

2309:                                             ; preds = %2300, %2274, %2268, %2263
  %2310 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  br i1 %2310, label %2417, label %2311

2311:                                             ; preds = %2309
  %2312 = load ptr, ptr %10, align 8, !tbaa !5
  %2313 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2312, i32 0, i32 14
  %2314 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2313, i32 0, i32 1
  %2315 = load i32, ptr %2314, align 4, !tbaa !207
  switch i32 %2315, label %2415 [
    i32 0, label %2316
    i32 1, label %2353
    i32 2, label %2384
  ]

2316:                                             ; preds = %2311
  %2317 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2318 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2317, i32 0, i32 31
  %2319 = load i8, ptr %2318, align 1, !tbaa !221, !range !22, !noundef !23
  %2320 = trunc i8 %2319 to i1
  br i1 %2320, label %2322, label %2321

2321:                                             ; preds = %2316
  br label %2416

2322:                                             ; preds = %2316
  %2323 = load ptr, ptr %176, align 8, !tbaa !5
  %2324 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2323, i32 0, i32 4
  %2325 = load i32, ptr %2324, align 8, !tbaa !220
  %2326 = icmp ugt i32 %2325, 1
  br i1 %2326, label %2327, label %2340

2327:                                             ; preds = %2322
  call void @llvm.lifetime.start.p0(i64 32, ptr %178) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %179) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %179, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %175)
          to label %2328 unwind label %2331

2328:                                             ; preds = %2327
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %178, ptr noundef nonnull align 8 dereferenceable(32) %179, ptr noundef @.str.163)
          to label %2329 unwind label %2335

2329:                                             ; preds = %2328
  %2330 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 8 dereferenceable(32) %178) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %179) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #8
  br label %2340

2331:                                             ; preds = %2327
  %2332 = landingpad { ptr, i32 }
          cleanup
  %2333 = extractvalue { ptr, i32 } %2332, 0
  store ptr %2333, ptr %21, align 8
  %2334 = extractvalue { ptr, i32 } %2332, 1
  store i32 %2334, ptr %22, align 4
  br label %2339

2335:                                             ; preds = %2328
  %2336 = landingpad { ptr, i32 }
          cleanup
  %2337 = extractvalue { ptr, i32 } %2336, 0
  store ptr %2337, ptr %21, align 8
  %2338 = extractvalue { ptr, i32 } %2336, 1
  store i32 %2338, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #8
  br label %2339

2339:                                             ; preds = %2335, %2331
  call void @llvm.lifetime.end.p0(i64 32, ptr %179) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #8
  br label %2584

2340:                                             ; preds = %2329, %2322
  call void @llvm.lifetime.start.p0(i64 32, ptr %180) #8
  invoke void @_ZN11spirv_cross4joinIJRA8_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %180, ptr noundef nonnull align 1 dereferenceable(8) @.str.1255, ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %2341 unwind label %2344

2341:                                             ; preds = %2340
  %2342 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %180)
          to label %2343 unwind label %2348

2343:                                             ; preds = %2341
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %180) #8
  br label %2416

2344:                                             ; preds = %2340
  %2345 = landingpad { ptr, i32 }
          cleanup
  %2346 = extractvalue { ptr, i32 } %2345, 0
  store ptr %2346, ptr %21, align 8
  %2347 = extractvalue { ptr, i32 } %2345, 1
  store i32 %2347, ptr %22, align 4
  br label %2352

2348:                                             ; preds = %2341
  %2349 = landingpad { ptr, i32 }
          cleanup
  %2350 = extractvalue { ptr, i32 } %2349, 0
  store ptr %2350, ptr %21, align 8
  %2351 = extractvalue { ptr, i32 } %2349, 1
  store i32 %2351, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #8
  br label %2352

2352:                                             ; preds = %2348, %2344
  call void @llvm.lifetime.end.p0(i64 32, ptr %180) #8
  br label %2584

2353:                                             ; preds = %2311
  %2354 = load ptr, ptr %176, align 8, !tbaa !5
  %2355 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2354, i32 0, i32 4
  %2356 = load i32, ptr %2355, align 8, !tbaa !220
  %2357 = icmp ugt i32 %2356, 2
  br i1 %2357, label %2358, label %2371

2358:                                             ; preds = %2353
  call void @llvm.lifetime.start.p0(i64 32, ptr %181) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %182) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %182, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %175)
          to label %2359 unwind label %2362

2359:                                             ; preds = %2358
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %181, ptr noundef nonnull align 8 dereferenceable(32) %182, ptr noundef @.str.164)
          to label %2360 unwind label %2366

2360:                                             ; preds = %2359
  %2361 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 8 dereferenceable(32) %181) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %182) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %181) #8
  br label %2371

2362:                                             ; preds = %2358
  %2363 = landingpad { ptr, i32 }
          cleanup
  %2364 = extractvalue { ptr, i32 } %2363, 0
  store ptr %2364, ptr %21, align 8
  %2365 = extractvalue { ptr, i32 } %2363, 1
  store i32 %2365, ptr %22, align 4
  br label %2370

2366:                                             ; preds = %2359
  %2367 = landingpad { ptr, i32 }
          cleanup
  %2368 = extractvalue { ptr, i32 } %2367, 0
  store ptr %2368, ptr %21, align 8
  %2369 = extractvalue { ptr, i32 } %2367, 1
  store i32 %2369, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #8
  br label %2370

2370:                                             ; preds = %2366, %2362
  call void @llvm.lifetime.end.p0(i64 32, ptr %182) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %181) #8
  br label %2584

2371:                                             ; preds = %2360, %2353
  call void @llvm.lifetime.start.p0(i64 32, ptr %183) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %183, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %175)
          to label %2372 unwind label %2375

2372:                                             ; preds = %2371
  %2373 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %183)
          to label %2374 unwind label %2379

2374:                                             ; preds = %2372
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %183) #8
  br label %2416

2375:                                             ; preds = %2371
  %2376 = landingpad { ptr, i32 }
          cleanup
  %2377 = extractvalue { ptr, i32 } %2376, 0
  store ptr %2377, ptr %21, align 8
  %2378 = extractvalue { ptr, i32 } %2376, 1
  store i32 %2378, ptr %22, align 4
  br label %2383

2379:                                             ; preds = %2372
  %2380 = landingpad { ptr, i32 }
          cleanup
  %2381 = extractvalue { ptr, i32 } %2380, 0
  store ptr %2381, ptr %21, align 8
  %2382 = extractvalue { ptr, i32 } %2380, 1
  store i32 %2382, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #8
  br label %2383

2383:                                             ; preds = %2379, %2375
  call void @llvm.lifetime.end.p0(i64 32, ptr %183) #8
  br label %2584

2384:                                             ; preds = %2311
  %2385 = load ptr, ptr %176, align 8, !tbaa !5
  %2386 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2385, i32 0, i32 4
  %2387 = load i32, ptr %2386, align 8, !tbaa !220
  %2388 = icmp ugt i32 %2387, 3
  br i1 %2388, label %2389, label %2402

2389:                                             ; preds = %2384
  call void @llvm.lifetime.start.p0(i64 32, ptr %184) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %185) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %185, ptr noundef nonnull align 8 dereferenceable(9848) %194, ptr noundef nonnull align 8 dereferenceable(32) %175)
          to label %2390 unwind label %2393

2390:                                             ; preds = %2389
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %184, ptr noundef nonnull align 8 dereferenceable(32) %185, ptr noundef @.str.165)
          to label %2391 unwind label %2397

2391:                                             ; preds = %2390
  %2392 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 8 dereferenceable(32) %184) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %185) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #8
  br label %2402

2393:                                             ; preds = %2389
  %2394 = landingpad { ptr, i32 }
          cleanup
  %2395 = extractvalue { ptr, i32 } %2394, 0
  store ptr %2395, ptr %21, align 8
  %2396 = extractvalue { ptr, i32 } %2394, 1
  store i32 %2396, ptr %22, align 4
  br label %2401

2397:                                             ; preds = %2390
  %2398 = landingpad { ptr, i32 }
          cleanup
  %2399 = extractvalue { ptr, i32 } %2398, 0
  store ptr %2399, ptr %21, align 8
  %2400 = extractvalue { ptr, i32 } %2398, 1
  store i32 %2400, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #8
  br label %2401

2401:                                             ; preds = %2397, %2393
  call void @llvm.lifetime.end.p0(i64 32, ptr %185) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #8
  br label %2584

2402:                                             ; preds = %2391, %2384
  call void @llvm.lifetime.start.p0(i64 32, ptr %186) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %186, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %175)
          to label %2403 unwind label %2406

2403:                                             ; preds = %2402
  %2404 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %186)
          to label %2405 unwind label %2410

2405:                                             ; preds = %2403
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %186) #8
  br label %2416

2406:                                             ; preds = %2402
  %2407 = landingpad { ptr, i32 }
          cleanup
  %2408 = extractvalue { ptr, i32 } %2407, 0
  store ptr %2408, ptr %21, align 8
  %2409 = extractvalue { ptr, i32 } %2407, 1
  store i32 %2409, ptr %22, align 4
  br label %2414

2410:                                             ; preds = %2403
  %2411 = landingpad { ptr, i32 }
          cleanup
  %2412 = extractvalue { ptr, i32 } %2411, 0
  store ptr %2412, ptr %21, align 8
  %2413 = extractvalue { ptr, i32 } %2411, 1
  store i32 %2413, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #8
  br label %2414

2414:                                             ; preds = %2410, %2406
  call void @llvm.lifetime.end.p0(i64 32, ptr %186) #8
  br label %2584

2415:                                             ; preds = %2311
  br label %2416

2416:                                             ; preds = %2415, %2405, %2374, %2343, %2321
  br label %2417

2417:                                             ; preds = %2416, %2309
  %2418 = load ptr, ptr %7, align 8, !tbaa !5
  %2419 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2418, i32 0, i32 9
  %2420 = load i32, ptr %2419, align 8, !tbaa !205
  %2421 = icmp ne i32 %2420, 0
  br i1 %2421, label %2422, label %2544

2422:                                             ; preds = %2417
  %2423 = load ptr, ptr %7, align 8, !tbaa !5
  %2424 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2423, i32 0, i32 14
  %2425 = load i8, ptr %2424, align 1, !tbaa !201, !range !22, !noundef !23
  %2426 = trunc i8 %2425 to i1
  br i1 %2426, label %2544, label %2427

2427:                                             ; preds = %2422
  %2428 = load ptr, ptr %10, align 8, !tbaa !5
  %2429 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2428, i32 0, i32 14
  %2430 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2429, i32 0, i32 1
  %2431 = load i32, ptr %2430, align 4, !tbaa !207
  %2432 = icmp eq i32 %2431, 1
  br i1 %2432, label %2433, label %2438

2433:                                             ; preds = %2427
  %2434 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  br i1 %2434, label %2435, label %2438

2435:                                             ; preds = %2433
  %2436 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1256)
          to label %2437 unwind label %2301

2437:                                             ; preds = %2435
  br label %2438

2438:                                             ; preds = %2437, %2433, %2427
  %2439 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %194, i32 0, i32 37
  %2440 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2439, i32 0, i32 25
  %2441 = load i8, ptr %2440, align 1, !tbaa !40, !range !22, !noundef !23
  %2442 = trunc i8 %2441 to i1
  br i1 %2442, label %2443, label %2446

2443:                                             ; preds = %2438
  %2444 = load i8, ptr %16, align 1, !tbaa !21, !range !22, !noundef !23
  %2445 = trunc i8 %2444 to i1
  br i1 %2445, label %2446, label %2543

2446:                                             ; preds = %2443, %2438
  %2447 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2448 = trunc i8 %2447 to i1
  br i1 %2448, label %2449, label %2455

2449:                                             ; preds = %2446
  %2450 = load ptr, ptr %7, align 8, !tbaa !5
  %2451 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2450, i32 0, i32 9
  %2452 = load i32, ptr %2451, align 8, !tbaa !205
  %2453 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2452)
          to label %2454 unwind label %2301

2454:                                             ; preds = %2449
  br label %2455

2455:                                             ; preds = %2454, %2446
  %2456 = phi i1 [ false, %2446 ], [ %2453, %2454 ]
  %2457 = zext i1 %2456 to i8
  store i8 %2457, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %187) #8
  store i32 0, ptr %187, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %188) #8
  %2458 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %2459 unwind label %2478

2459:                                             ; preds = %2455
  %2460 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %2458)
          to label %2461 unwind label %2478

2461:                                             ; preds = %2459
  store ptr %2460, ptr %188, align 8, !tbaa !5
  %2462 = load ptr, ptr %188, align 8, !tbaa !5
  %2463 = icmp ne ptr %2462, null
  br i1 %2463, label %2464, label %2487

2464:                                             ; preds = %2461
  call void @llvm.lifetime.start.p0(i64 8, ptr %189) #8
  %2465 = load ptr, ptr %188, align 8, !tbaa !5
  %2466 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %2465, i32 0, i32 2
  %2467 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2466)
          to label %2468 unwind label %2482

2468:                                             ; preds = %2464
  %2469 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %2467)
          to label %2470 unwind label %2482

2470:                                             ; preds = %2468
  store ptr %2469, ptr %189, align 8, !tbaa !5
  %2471 = load ptr, ptr %189, align 8, !tbaa !5
  %2472 = icmp ne ptr %2471, null
  br i1 %2472, label %2473, label %2486

2473:                                             ; preds = %2470
  %2474 = load ptr, ptr %189, align 8, !tbaa !5
  %2475 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2474, i32 0, i32 1
  %2476 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2475)
          to label %2477 unwind label %2482

2477:                                             ; preds = %2473
  store i32 %2476, ptr %187, align 4, !tbaa !10
  br label %2486

2478:                                             ; preds = %2459, %2455
  %2479 = landingpad { ptr, i32 }
          cleanup
  %2480 = extractvalue { ptr, i32 } %2479, 0
  store ptr %2480, ptr %21, align 8
  %2481 = extractvalue { ptr, i32 } %2479, 1
  store i32 %2481, ptr %22, align 4
  br label %2522

2482:                                             ; preds = %2473, %2468, %2464
  %2483 = landingpad { ptr, i32 }
          cleanup
  %2484 = extractvalue { ptr, i32 } %2483, 0
  store ptr %2484, ptr %21, align 8
  %2485 = extractvalue { ptr, i32 } %2483, 1
  store i32 %2485, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #8
  br label %2522

2486:                                             ; preds = %2477, %2470
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #8
  br label %2504

2487:                                             ; preds = %2461
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #8
  %2488 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %2489 unwind label %2499

2489:                                             ; preds = %2487
  %2490 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %2488)
          to label %2491 unwind label %2499

2491:                                             ; preds = %2489
  store ptr %2490, ptr %190, align 8, !tbaa !5
  %2492 = load ptr, ptr %190, align 8, !tbaa !5
  %2493 = icmp ne ptr %2492, null
  br i1 %2493, label %2494, label %2503

2494:                                             ; preds = %2491
  %2495 = load ptr, ptr %190, align 8, !tbaa !5
  %2496 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2495, i32 0, i32 1
  %2497 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2496)
          to label %2498 unwind label %2499

2498:                                             ; preds = %2494
  store i32 %2497, ptr %187, align 4, !tbaa !10
  br label %2503

2499:                                             ; preds = %2494, %2489, %2487
  %2500 = landingpad { ptr, i32 }
          cleanup
  %2501 = extractvalue { ptr, i32 } %2500, 0
  store ptr %2501, ptr %21, align 8
  %2502 = extractvalue { ptr, i32 } %2500, 1
  store i32 %2502, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #8
  br label %2522

2503:                                             ; preds = %2498, %2491
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #8
  br label %2504

2504:                                             ; preds = %2503, %2486
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #8
  %2505 = load i32, ptr %187, align 4, !tbaa !10
  %2506 = icmp eq i32 %2505, 0
  br i1 %2506, label %2514, label %2507

2507:                                             ; preds = %2504
  %2508 = load i32, ptr %187, align 4, !tbaa !10
  %2509 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, i32 noundef %2508)
          to label %2510 unwind label %2523

2510:                                             ; preds = %2507
  %2511 = load i32, ptr %187, align 4, !tbaa !10
  %2512 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %194, ptr noundef nonnull align 8 dereferenceable(336) %2509, i32 noundef %2511)
          to label %2513 unwind label %2523

2513:                                             ; preds = %2510
  br i1 %2512, label %2541, label %2514

2514:                                             ; preds = %2513, %2504
  call void @llvm.lifetime.start.p0(i64 32, ptr %191) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %192) #8
  %2515 = load ptr, ptr %7, align 8, !tbaa !5
  %2516 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2515, i32 0, i32 9
  %2517 = load i32, ptr %2516, align 8, !tbaa !205
  invoke void @_ZN11spirv_cross11CompilerMSL21to_component_argumentB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %192, ptr noundef nonnull align 8 dereferenceable(12482) %194, i32 noundef %2517)
          to label %2518 unwind label %2527

2518:                                             ; preds = %2514
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %191, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %192)
          to label %2519 unwind label %2531

2519:                                             ; preds = %2518
  %2520 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %191)
          to label %2521 unwind label %2535

2521:                                             ; preds = %2519
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %192) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %191) #8
  br label %2541

2522:                                             ; preds = %2499, %2482, %2478
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #8
  br label %2542

2523:                                             ; preds = %2510, %2507
  %2524 = landingpad { ptr, i32 }
          cleanup
  %2525 = extractvalue { ptr, i32 } %2524, 0
  store ptr %2525, ptr %21, align 8
  %2526 = extractvalue { ptr, i32 } %2524, 1
  store i32 %2526, ptr %22, align 4
  br label %2542

2527:                                             ; preds = %2514
  %2528 = landingpad { ptr, i32 }
          cleanup
  %2529 = extractvalue { ptr, i32 } %2528, 0
  store ptr %2529, ptr %21, align 8
  %2530 = extractvalue { ptr, i32 } %2528, 1
  store i32 %2530, ptr %22, align 4
  br label %2540

2531:                                             ; preds = %2518
  %2532 = landingpad { ptr, i32 }
          cleanup
  %2533 = extractvalue { ptr, i32 } %2532, 0
  store ptr %2533, ptr %21, align 8
  %2534 = extractvalue { ptr, i32 } %2532, 1
  store i32 %2534, ptr %22, align 4
  br label %2539

2535:                                             ; preds = %2519
  %2536 = landingpad { ptr, i32 }
          cleanup
  %2537 = extractvalue { ptr, i32 } %2536, 0
  store ptr %2537, ptr %21, align 8
  %2538 = extractvalue { ptr, i32 } %2536, 1
  store i32 %2538, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #8
  br label %2539

2539:                                             ; preds = %2535, %2531
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #8
  br label %2540

2540:                                             ; preds = %2539, %2527
  call void @llvm.lifetime.end.p0(i64 32, ptr %192) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %191) #8
  br label %2542

2541:                                             ; preds = %2521, %2513
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #8
  br label %2543

2542:                                             ; preds = %2540, %2523, %2522
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #8
  br label %2584

2543:                                             ; preds = %2541, %2443
  br label %2544

2544:                                             ; preds = %2543, %2422, %2417
  %2545 = load ptr, ptr %7, align 8, !tbaa !5
  %2546 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2545, i32 0, i32 10
  %2547 = load i32, ptr %2546, align 4, !tbaa !236
  %2548 = icmp ne i32 %2547, 0
  br i1 %2548, label %2549, label %2578

2549:                                             ; preds = %2544
  %2550 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2551 = trunc i8 %2550 to i1
  br i1 %2551, label %2552, label %2558

2552:                                             ; preds = %2549
  %2553 = load ptr, ptr %7, align 8, !tbaa !5
  %2554 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2553, i32 0, i32 10
  %2555 = load i32, ptr %2554, align 4, !tbaa !236
  %2556 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2555)
          to label %2557 unwind label %2301

2557:                                             ; preds = %2552
  br label %2558

2558:                                             ; preds = %2557, %2549
  %2559 = phi i1 [ false, %2549 ], [ %2556, %2557 ]
  %2560 = zext i1 %2559 to i8
  store i8 %2560, ptr %20, align 1, !tbaa !21
  %2561 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.55)
          to label %2562 unwind label %2301

2562:                                             ; preds = %2558
  call void @llvm.lifetime.start.p0(i64 32, ptr %193) #8
  %2563 = load ptr, ptr %7, align 8, !tbaa !5
  %2564 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %2563, i32 0, i32 10
  %2565 = load i32, ptr %2564, align 4, !tbaa !236
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %193, ptr noundef nonnull align 8 dereferenceable(9848) %194, i32 noundef %2565, i1 noundef zeroext true)
          to label %2566 unwind label %2569

2566:                                             ; preds = %2562
  %2567 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %193)
          to label %2568 unwind label %2573

2568:                                             ; preds = %2566
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %193) #8
  br label %2578

2569:                                             ; preds = %2562
  %2570 = landingpad { ptr, i32 }
          cleanup
  %2571 = extractvalue { ptr, i32 } %2570, 0
  store ptr %2571, ptr %21, align 8
  %2572 = extractvalue { ptr, i32 } %2570, 1
  store i32 %2572, ptr %22, align 4
  br label %2577

2573:                                             ; preds = %2566
  %2574 = landingpad { ptr, i32 }
          cleanup
  %2575 = extractvalue { ptr, i32 } %2574, 0
  store ptr %2575, ptr %21, align 8
  %2576 = extractvalue { ptr, i32 } %2574, 1
  store i32 %2576, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #8
  br label %2577

2577:                                             ; preds = %2573, %2569
  call void @llvm.lifetime.end.p0(i64 32, ptr %193) #8
  br label %2584

2578:                                             ; preds = %2568, %2544
  %2579 = load i8, ptr %20, align 1, !tbaa !21, !range !22, !noundef !23
  %2580 = trunc i8 %2579 to i1
  %2581 = load ptr, ptr %8, align 8, !tbaa !5
  %2582 = zext i1 %2580 to i8
  store i8 %2582, ptr %2581, align 1, !tbaa !21
  store i1 true, ptr %19, align 1
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %175) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  %2583 = load i1, ptr %19, align 1
  br i1 %2583, label %2592, label %2591

2584:                                             ; preds = %2577, %2542, %2414, %2401, %2383, %2370, %2352, %2339, %2305, %2301
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %175) #8
  br label %2585

2585:                                             ; preds = %2584, %2262, %2220, %2207, %2048, %2022, %1859, %1831, %1782, %1733, %1510, %1460, %1413, %1377, %1336, %1287, %1268, %1215, %1192, %1153, %1004, %995, %977, %937, %929, %896, %873, %865, %832, %808, %761, %723, %691, %671, %658, %630, %626, %618, %585
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  br label %2586

2586:                                             ; preds = %2585, %564
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #8
  br label %2587

2587:                                             ; preds = %2586, %560
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #8
  br label %2588

2588:                                             ; preds = %2587, %556
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %2589

2589:                                             ; preds = %2588, %552
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  br label %2590

2590:                                             ; preds = %2589, %520, %472, %434, %393, %367, %346, %294, %269, %257
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %2593

2591:                                             ; preds = %2578
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %2592

2592:                                             ; preds = %2591, %2578
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  ret void

2593:                                             ; preds = %2590
  %2594 = load ptr, ptr %21, align 8
  %2595 = load i32, ptr %22, align 4
  %2596 = insertvalue { ptr, i32 } poison, ptr %2594, 0
  %2597 = insertvalue { ptr, i32 } %2596, i32 %2595, 1
  resume { ptr, i32 } %2597

2598:                                             ; preds = %2219, %1858, %1724, %1697
  unreachable
}

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL27needs_chroma_reconstructionPKN11spirv_cross19MSLConstexprSamplerE(ptr noundef) #0

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

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

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #6

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

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

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

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

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

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

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

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

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

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


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

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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.163 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.164 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.165 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1066 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1116 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1214 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1215 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1216 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1217 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1218 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1219 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1220 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1221 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1222 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1223 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1224 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1225 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1226 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1227 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1228 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1229 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1230 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1231 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1232 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1233 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1234 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.1235 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.1236 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1237 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1238 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1239 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1240 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1241 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1242 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1243 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1244 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1245 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1246 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1247 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1248 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1249 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1250 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1251 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1252 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1253 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1254 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1255 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1256 = external hidden unnamed_addr constant [10 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) 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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

; 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 nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL16to_function_argsB5cxx11ERKNS_12CompilerGLSL24TextureFunctionArgumentsEPb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr nocapture noundef nonnull readonly align 8 dereferenceable(74) %2, ptr nocapture noundef writeonly %3) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.spirv_cross::TypedID.350", align 4
  %6 = alloca %"class.spirv_cross::TypedID.350", align 4
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca %"class.std::__cxx11::basic_string", align 8
  %98 = alloca %"class.std::__cxx11::basic_string", align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca %"class.std::__cxx11::basic_string", align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca %"class.std::__cxx11::basic_string", align 8
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  %107 = alloca %"class.std::__cxx11::basic_string", align 8
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca %"class.std::__cxx11::basic_string", align 8
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::__cxx11::basic_string", align 8
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  %118 = alloca %"class.std::__cxx11::basic_string", align 8
  %119 = alloca %"class.std::__cxx11::basic_string", align 8
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca %"class.std::__cxx11::basic_string", align 8
  %122 = alloca %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.spirv_cross::TypedID.350", align 4
  %124 = alloca %"class.std::__cxx11::basic_string", align 8
  %125 = alloca %"class.std::__cxx11::basic_string", align 8
  %126 = alloca %"class.std::__cxx11::basic_string", align 8
  %127 = alloca %"class.std::__cxx11::basic_string", align 8
  %128 = alloca %"class.std::__cxx11::basic_string", align 8
  %129 = alloca %"class.std::__cxx11::basic_string", align 8
  %130 = alloca %"class.std::__cxx11::basic_string", align 8
  %131 = alloca %"class.std::__cxx11::basic_string", align 8
  %132 = alloca %"class.std::__cxx11::basic_string", align 8
  %133 = alloca %"class.std::__cxx11::basic_string", align 8
  %134 = alloca %"class.std::__cxx11::basic_string", align 8
  %135 = alloca %"class.std::__cxx11::basic_string", align 8
  %136 = alloca %"class.std::__cxx11::basic_string", align 8
  %137 = alloca %"class.std::__cxx11::basic_string", align 8
  %138 = alloca %"class.std::__cxx11::basic_string", align 8
  %139 = alloca %"class.std::__cxx11::basic_string", align 8
  %140 = alloca %"class.std::__cxx11::basic_string", align 8
  %141 = alloca %"class.std::__cxx11::basic_string", align 8
  %142 = alloca %"class.std::__cxx11::basic_string", align 8
  %143 = alloca %"class.std::__cxx11::basic_string", align 8
  %144 = alloca %"class.std::__cxx11::basic_string", align 8
  %145 = alloca %"class.std::__cxx11::basic_string", align 8
  %146 = alloca %"class.std::__cxx11::basic_string", align 8
  %147 = alloca %"class.std::__cxx11::basic_string", align 8
  %148 = alloca %"class.std::__cxx11::basic_string", align 8
  %149 = alloca %"class.std::__cxx11::basic_string", align 8
  %150 = alloca %"class.std::__cxx11::basic_string", align 8
  %151 = alloca %"class.std::__cxx11::basic_string", align 8
  %152 = alloca %"class.std::__cxx11::basic_string", align 8
  %153 = alloca %"class.std::__cxx11::basic_string", align 8
  %154 = alloca %"class.std::__cxx11::basic_string", align 8
  %155 = alloca %"class.std::__cxx11::basic_string", align 8
  %156 = alloca %"class.std::__cxx11::basic_string", align 8
  %157 = alloca %"class.std::__cxx11::basic_string", align 8
  %158 = alloca %"class.std::__cxx11::basic_string", align 8
  %159 = alloca %"class.std::__cxx11::basic_string", align 8
  %160 = alloca %"class.std::__cxx11::basic_string", align 8
  %161 = alloca %"class.std::__cxx11::basic_string", align 8
  %162 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %163 = load i32, ptr %2, align 8, !tbaa !5
  store i32 %163, ptr %5, align 4, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %2, i64 8
  %165 = load ptr, ptr %164, align 8, !tbaa !9
  %166 = getelementptr inbounds i8, ptr %2, i64 44
  %167 = load i32, ptr %166, align 4, !tbaa !15
  %168 = getelementptr inbounds i8, ptr %2, i64 36
  %169 = load i32, ptr %168, align 4, !tbaa !16
  %170 = getelementptr inbounds i8, ptr %2, i64 40
  %171 = load i32, ptr %170, align 8, !tbaa !17
  %172 = getelementptr inbounds i8, ptr %2, i64 52
  %173 = load i32, ptr %172, align 4, !tbaa !18
  %174 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %175 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %174)
  %.not380 = icmp eq ptr %175, null
  br i1 %.not380, label %.thread604, label %176

176:                                              ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  %177 = getelementptr inbounds i8, ptr %175, i64 28
  %178 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %177)
  %.not381 = icmp eq i32 %178, 0
  br i1 %.not381, label %181, label %179

179:                                              ; preds = %176
  %180 = load i32, ptr %177, align 4, !tbaa !5
  store i32 %180, ptr %6, align 4, !tbaa !5
  br label %183

181:                                              ; preds = %176
  %182 = getelementptr inbounds i8, ptr %175, i64 8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %182)
  br label %183

183:                                              ; preds = %179, %181
  %184 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
  %185 = call noundef ptr @_ZNK11spirv_cross11CompilerMSL22find_constexpr_samplerEj(ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %184)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  %186 = getelementptr inbounds i8, ptr %175, i64 8
  %187 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %186)
  %188 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %187, i32 noundef 12)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br i1 %188, label %.thread619, label %189

189:                                              ; preds = %183
  %190 = call noundef zeroext i1 @_ZL27needs_chroma_reconstructionPKN11spirv_cross19MSLConstexprSamplerE(ptr noundef %185)
  br i1 %190, label %192, label %226

.thread604:                                       ; preds = %4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  %191 = call noundef zeroext i1 @_ZL27needs_chroma_reconstructionPKN11spirv_cross19MSLConstexprSamplerE(ptr noundef null)
  br i1 %191, label %192, label %.thread613

192:                                              ; preds = %.thread604, %189
  %.0217603609 = phi ptr [ null, %.thread604 ], [ %185, %189 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %193 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %193, i1 noundef zeroext true)
          to label %194 unwind label %203

194:                                              ; preds = %192
  %195 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %196 unwind label %205

196:                                              ; preds = %194
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  %197 = getelementptr inbounds i8, ptr %.0217603609, i64 48
  store i32 1, ptr %8, align 4, !tbaa !5
  %198 = load i32, ptr %197, align 4, !tbaa !19
  %199 = icmp ugt i32 %198, 1
  br i1 %199, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %196
  %200 = getelementptr inbounds i8, ptr %1, i64 11456
  br label %208

._crit_edge:                                      ; preds = %213, %196
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  br label %255

201:                                              ; preds = %.thread619, %349, %318, %275
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %1594

203:                                              ; preds = %192
  %204 = landingpad { ptr, i32 }
          cleanup
  br label %207

205:                                              ; preds = %194
  %206 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  br label %207

207:                                              ; preds = %205, %203
  %.pn386 = phi { ptr, i32 } [ %206, %205 ], [ %204, %203 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %1594

208:                                              ; preds = %.lr.ph, %213
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  %209 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %209, i1 noundef zeroext true)
          to label %210 unwind label %218

210:                                              ; preds = %208
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_RjEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %200, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %211 unwind label %220

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

213:                                              ; preds = %211
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  %214 = load i32, ptr %8, align 4, !tbaa !5
  %215 = add i32 %214, 1
  store i32 %215, ptr %8, align 4, !tbaa !5
  %216 = load i32, ptr %197, align 4, !tbaa !19
  %217 = icmp ult i32 %215, %216
  br i1 %217, label %208, label %._crit_edge, !llvm.loop !32

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

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

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

224:                                              ; preds = %222, %220
  %.pn403 = phi { ptr, i32 } [ %223, %222 ], [ %221, %220 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  br label %225

225:                                              ; preds = %224, %218
  %.pn403.pn = phi { ptr, i32 } [ %.pn403, %224 ], [ %219, %218 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  br label %1594

226:                                              ; preds = %189
  %.not382 = icmp eq ptr %185, null
  br i1 %.not382, label %.thread613, label %227

227:                                              ; preds = %226
  %228 = getelementptr inbounds i8, ptr %185, i64 99
  %229 = load i8, ptr %228, align 1, !tbaa !34, !range !35, !noundef !36
  %230 = trunc nuw i8 %229 to i1
  br i1 %230, label %255, label %.thread613

.thread613:                                       ; preds = %.thread604, %227, %226
  %.0217603608618 = phi ptr [ %185, %227 ], [ null, %226 ], [ null, %.thread604 ]
  %231 = getelementptr inbounds i8, ptr %1, i64 10121
  %232 = load i8, ptr %231, align 1, !tbaa !37, !range !35, !noundef !36
  %233 = trunc nuw i8 %232 to i1
  br i1 %233, label %234, label %255

234:                                              ; preds = %.thread613
  %235 = getelementptr inbounds i8, ptr %2, i64 17
  %236 = load i8, ptr %235, align 1, !tbaa !197, !range !35, !noundef !36
  %237 = trunc nuw i8 %236 to i1
  br i1 %237, label %238, label %255

238:                                              ; preds = %234
  %239 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %240 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %239)
          to label %241 unwind label %248

241:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  %.not383 = icmp eq ptr %240, null
  %242 = getelementptr inbounds i8, ptr %240, i64 16
  %243 = select i1 %.not383, ptr %5, ptr %242
  %244 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %243)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %244, i1 noundef zeroext true)
          to label %245 unwind label %250

245:                                              ; preds = %241
  %246 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %247 unwind label %252

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

248:                                              ; preds = %238
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %1594

250:                                              ; preds = %241
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %254

252:                                              ; preds = %245
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %254

254:                                              ; preds = %252, %250
  %.pn = phi { ptr, i32 } [ %253, %252 ], [ %251, %250 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  br label %1594

255:                                              ; preds = %227, %.thread613, %234, %247, %._crit_edge
  %.0217603607 = phi ptr [ %185, %227 ], [ %.0217603608618, %.thread613 ], [ %.0217603608618, %234 ], [ %.0217603608618, %247 ], [ %.0217603609, %._crit_edge ]
  %256 = getelementptr inbounds i8, ptr %2, i64 73
  %257 = load i8, ptr %256, align 1, !tbaa !198, !range !35, !noundef !36
  %258 = trunc nuw i8 %257 to i1
  br i1 %258, label %259, label %269

259:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  %260 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %260, i1 noundef zeroext true)
          to label %261 unwind label %264

261:                                              ; preds = %259
  %262 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %263 unwind label %266

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

264:                                              ; preds = %259
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %268

266:                                              ; preds = %261
  %267 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %268

268:                                              ; preds = %266, %264
  %.pn388 = phi { ptr, i32 } [ %267, %266 ], [ %265, %264 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %1594

269:                                              ; preds = %263, %255
  %270 = getelementptr inbounds i8, ptr %2, i64 16
  %271 = load i8, ptr %270, align 8, !tbaa !199, !range !35, !noundef !36
  %272 = trunc nuw i8 %271 to i1
  br i1 %272, label %287, label %273

273:                                              ; preds = %269
  %274 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br i1 %274, label %277, label %275

275:                                              ; preds = %273
  %276 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.55)
          to label %277 unwind label %201

277:                                              ; preds = %275, %273
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  %278 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %278)
          to label %279 unwind label %282

279:                                              ; preds = %277
  %280 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %281 unwind label %284

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

282:                                              ; preds = %277
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %286

284:                                              ; preds = %279
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  br label %286

286:                                              ; preds = %284, %282
  %.pn390 = phi { ptr, i32 } [ %285, %284 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %1594

287:                                              ; preds = %281, %269
  %.not392 = icmp eq ptr %.0217603607, null
  br i1 %.not392, label %292, label %288

288:                                              ; preds = %287
  %289 = getelementptr inbounds i8, ptr %.0217603607, i64 99
  %290 = load i8, ptr %289, align 1, !tbaa !34, !range !35, !noundef !36
  %291 = trunc nuw i8 %290 to i1
  br i1 %291, label %315, label %292

292:                                              ; preds = %288, %287
  %293 = getelementptr inbounds i8, ptr %1, i64 10121
  %294 = load i8, ptr %293, align 1, !tbaa !37, !range !35, !noundef !36
  %295 = trunc nuw i8 %294 to i1
  br i1 %295, label %296, label %315

296:                                              ; preds = %292
  %297 = getelementptr inbounds i8, ptr %2, i64 17
  %298 = load i8, ptr %297, align 1, !tbaa !197, !range !35, !noundef !36
  %299 = trunc nuw i8 %298 to i1
  br i1 %299, label %300, label %315

300:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  %301 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross11CompilerMSL21to_swizzle_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %301)
          to label %302 unwind label %307

302:                                              ; preds = %300
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %303 unwind label %309

303:                                              ; preds = %302
  %304 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %305 unwind label %311

305:                                              ; preds = %303
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  %306 = getelementptr inbounds i8, ptr %1, i64 11190
  store i8 1, ptr %306, align 2, !tbaa !200
  br label %315

307:                                              ; preds = %300
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %314

309:                                              ; preds = %302
  %310 = landingpad { ptr, i32 }
          cleanup
  br label %313

311:                                              ; preds = %303
  %312 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %313

313:                                              ; preds = %311, %309
  %.pn393 = phi { ptr, i32 } [ %312, %311 ], [ %310, %309 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %314

314:                                              ; preds = %313, %307
  %.pn393.pn = phi { ptr, i32 } [ %.pn393, %313 ], [ %308, %307 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %1594

315:                                              ; preds = %305, %296, %292, %288
  %316 = load i8, ptr %256, align 1, !tbaa !198, !range !35, !noundef !36
  %317 = trunc nuw i8 %316 to i1
  br i1 %317, label %318, label %337

318:                                              ; preds = %315
  %319 = getelementptr inbounds i8, ptr %2, i64 48
  %320 = load i32, ptr %319, align 8, !tbaa !201
  %321 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %320)
          to label %322 unwind label %201

322:                                              ; preds = %318
  %323 = zext i1 %321 to i8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  %324 = load i32, ptr %319, align 8, !tbaa !201
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %324, i1 noundef zeroext true)
          to label %325 unwind label %329

325:                                              ; preds = %322
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %326 unwind label %331

326:                                              ; preds = %325
  %327 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %328 unwind label %333

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

329:                                              ; preds = %322
  %330 = landingpad { ptr, i32 }
          cleanup
  br label %336

331:                                              ; preds = %325
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %335

333:                                              ; preds = %326
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %335

335:                                              ; preds = %333, %331
  %.pn396 = phi { ptr, i32 } [ %334, %333 ], [ %332, %331 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %336

336:                                              ; preds = %335, %329
  %.pn396.pn = phi { ptr, i32 } [ %.pn396, %335 ], [ %330, %329 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  br label %1594

337:                                              ; preds = %328, %315
  %.0219 = phi i8 [ %323, %328 ], [ 1, %315 ]
  %338 = getelementptr inbounds i8, ptr %2, i64 56
  %339 = load i32, ptr %338, align 8, !tbaa !202
  %.not399 = icmp eq i32 %339, 0
  br i1 %.not399, label %367, label %340

340:                                              ; preds = %337
  %341 = load i8, ptr %256, align 1, !tbaa !198, !range !35, !noundef !36
  %342 = trunc nuw i8 %341 to i1
  br i1 %342, label %347, label %343

343:                                              ; preds = %340
  %344 = getelementptr inbounds i8, ptr %1, i64 10121
  %345 = load i8, ptr %344, align 1, !tbaa !37, !range !35, !noundef !36
  %346 = trunc nuw i8 %345 to i1
  br i1 %346, label %347, label %367

347:                                              ; preds = %343, %340
  %348 = trunc nuw i8 %.0219 to i1
  br i1 %348, label %349, label %351

349:                                              ; preds = %347
  %350 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %339)
          to label %._crit_edge630 unwind label %201

._crit_edge630:                                   ; preds = %349
  %.pre = load i32, ptr %338, align 8, !tbaa !202
  br label %351

351:                                              ; preds = %._crit_edge630, %347
  %352 = phi i32 [ %339, %347 ], [ %.pre, %._crit_edge630 ]
  %353 = phi i1 [ false, %347 ], [ %350, %._crit_edge630 ]
  %354 = zext i1 %353 to i8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #7
  invoke void @_ZN11spirv_cross11CompilerMSL21to_component_argumentB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %352)
          to label %355 unwind label %359

355:                                              ; preds = %351
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %356 unwind label %361

356:                                              ; preds = %355
  %357 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %358 unwind label %363

358:                                              ; preds = %356
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %367

359:                                              ; preds = %351
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %366

361:                                              ; preds = %355
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %365

363:                                              ; preds = %356
  %364 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %365

365:                                              ; preds = %363, %361
  %.pn400 = phi { ptr, i32 } [ %364, %363 ], [ %362, %361 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  br label %366

366:                                              ; preds = %365, %359
  %.pn400.pn = phi { ptr, i32 } [ %.pn400, %365 ], [ %360, %359 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %1594

367:                                              ; preds = %337, %343, %358
  %.1220 = phi i8 [ %354, %358 ], [ %.0219, %343 ], [ %.0219, %337 ]
  %368 = trunc nuw i8 %.1220 to i1
  br i1 %368, label %.thread619, label %372

.thread619:                                       ; preds = %183, %367
  %.0218602623 = phi i1 [ false, %367 ], [ true, %183 ]
  %369 = getelementptr inbounds i8, ptr %2, i64 24
  %370 = load i32, ptr %369, align 8, !tbaa !203
  %371 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %370)
          to label %372 unwind label %201

372:                                              ; preds = %.thread619, %367
  %.0218602622 = phi i1 [ false, %367 ], [ %.0218602623, %.thread619 ]
  %373 = phi i1 [ false, %367 ], [ %371, %.thread619 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  %374 = getelementptr inbounds i8, ptr %2, i64 24
  %375 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %375, i1 noundef zeroext true)
          to label %376 unwind label %384

376:                                              ; preds = %372
  %377 = load i32, ptr %374, align 8, !tbaa !203
  %378 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %377)
          to label %379 unwind label %386

379:                                              ; preds = %376
  %380 = call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %378)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %381 unwind label %388

381:                                              ; preds = %379
  %382 = getelementptr inbounds i8, ptr %165, i64 252
  %383 = load i32, ptr %382, align 4, !tbaa !204
  switch i32 %383, label %673 [
    i32 0, label %390
    i32 5, label %458
    i32 6, label %546
    i32 1, label %548
    i32 2, label %589
    i32 3, label %630
  ]

384:                                              ; preds = %372
  %385 = landingpad { ptr, i32 }
          cleanup
  br label %1593

386:                                              ; preds = %376
  %387 = landingpad { ptr, i32 }
          cleanup
  br label %1592

388:                                              ; preds = %379
  %389 = landingpad { ptr, i32 }
          cleanup
  br label %1591

390:                                              ; preds = %381
  %391 = getelementptr inbounds i8, ptr %378, i64 24
  %392 = load i32, ptr %391, align 8, !tbaa !217
  %393 = icmp ugt i32 %392, 1
  br i1 %393, label %394, label %403

394:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %395 unwind label %398

395:                                              ; preds = %394
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull @.str.163)
          to label %396 unwind label %400

396:                                              ; preds = %395
  %397 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %403

398:                                              ; preds = %394
  %399 = landingpad { ptr, i32 }
          cleanup
  br label %402

400:                                              ; preds = %395
  %401 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  br label %402

402:                                              ; preds = %400, %398
  %.pn442 = phi { ptr, i32 } [ %401, %400 ], [ %399, %398 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %1590

403:                                              ; preds = %396, %390
  %404 = getelementptr inbounds i8, ptr %2, i64 16
  %405 = load i8, ptr %404, align 8, !tbaa !199, !range !35, !noundef !36
  %406 = trunc nuw i8 %405 to i1
  br i1 %406, label %407, label %424

407:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %408 unwind label %413

408:                                              ; preds = %407
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %27, i1 noundef zeroext %380)
          to label %409 unwind label %415

409:                                              ; preds = %408
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %410 unwind label %417

410:                                              ; preds = %409
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.53)
          to label %411 unwind label %419

411:                                              ; preds = %410
  %412 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  br label %433

413:                                              ; preds = %407
  %414 = landingpad { ptr, i32 }
          cleanup
  br label %423

415:                                              ; preds = %408
  %416 = landingpad { ptr, i32 }
          cleanup
  br label %422

417:                                              ; preds = %409
  %418 = landingpad { ptr, i32 }
          cleanup
  br label %421

419:                                              ; preds = %410
  %420 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  br label %421

421:                                              ; preds = %419, %417
  %.pn444 = phi { ptr, i32 } [ %420, %419 ], [ %418, %417 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %422

422:                                              ; preds = %421, %415
  %.pn444.pn = phi { ptr, i32 } [ %.pn444, %421 ], [ %416, %415 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %423

423:                                              ; preds = %422, %413
  %.pn444.pn.pn = phi { ptr, i32 } [ %.pn444.pn, %422 ], [ %414, %413 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  br label %1590

424:                                              ; preds = %403
  %425 = call noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %378)
  br i1 %425, label %426, label %433

426:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef 1)
          to label %427 unwind label %431

427:                                              ; preds = %426
  %428 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %433

429:                                              ; preds = %.invoke635, %.invoke, %1382, %1322, %1319, %1308, %1131, %1102, %1000, %998, %874, %873, %798, %681, %634, %546
  %430 = landingpad { ptr, i32 }
          cleanup
  br label %1590

431:                                              ; preds = %426
  %432 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %1590

433:                                              ; preds = %424, %427, %411
  %434 = getelementptr inbounds i8, ptr %1, i64 10127
  %435 = load i8, ptr %434, align 1, !tbaa !218, !range !35, !noundef !36
  %436 = trunc nuw i8 %435 to i1
  br i1 %436, label %437, label %673

437:                                              ; preds = %433
  %438 = load i8, ptr %404, align 8, !tbaa !199, !range !35, !noundef !36
  %439 = trunc nuw i8 %438 to i1
  br i1 %439, label %440, label %449

440:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %441 unwind label %444

441:                                              ; preds = %440
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull @.str.1116)
          to label %442 unwind label %446

442:                                              ; preds = %441
  %443 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %673

444:                                              ; preds = %440
  %445 = landingpad { ptr, i32 }
          cleanup
  br label %448

446:                                              ; preds = %441
  %447 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %448

448:                                              ; preds = %446, %444
  %.pn450 = phi { ptr, i32 } [ %447, %446 ], [ %445, %444 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %1590

449:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %450 unwind label %453

450:                                              ; preds = %449
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull @.str.1215)
          to label %451 unwind label %455

451:                                              ; preds = %450
  %452 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  br label %673

453:                                              ; preds = %449
  %454 = landingpad { ptr, i32 }
          cleanup
  br label %457

455:                                              ; preds = %450
  %456 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  br label %457

457:                                              ; preds = %455, %453
  %.pn448 = phi { ptr, i32 } [ %456, %455 ], [ %454, %453 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  br label %1590

458:                                              ; preds = %381
  %459 = getelementptr inbounds i8, ptr %378, i64 24
  %460 = load i32, ptr %459, align 8, !tbaa !217
  %461 = icmp ugt i32 %460, 1
  br i1 %461, label %462, label %471

462:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %463 unwind label %466

463:                                              ; preds = %462
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.163)
          to label %464 unwind label %468

464:                                              ; preds = %463
  %465 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  br label %471

466:                                              ; preds = %462
  %467 = landingpad { ptr, i32 }
          cleanup
  br label %470

468:                                              ; preds = %463
  %469 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %470

470:                                              ; preds = %468, %466
  %.pn424 = phi { ptr, i32 } [ %469, %468 ], [ %467, %466 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  br label %1590

471:                                              ; preds = %464, %458
  %472 = getelementptr inbounds i8, ptr %1, i64 10144
  %473 = load i8, ptr %472, align 8, !tbaa !219, !range !35, !noundef !36
  %474 = trunc nuw i8 %473 to i1
  br i1 %474, label %475, label %492

475:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %476 unwind label %481

476:                                              ; preds = %475
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %38, i1 noundef zeroext %380)
          to label %477 unwind label %483

477:                                              ; preds = %476
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %478 unwind label %485

478:                                              ; preds = %477
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.53)
          to label %479 unwind label %487

479:                                              ; preds = %478
  %480 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  br label %673

481:                                              ; preds = %475
  %482 = landingpad { ptr, i32 }
          cleanup
  br label %491

483:                                              ; preds = %476
  %484 = landingpad { ptr, i32 }
          cleanup
  br label %490

485:                                              ; preds = %477
  %486 = landingpad { ptr, i32 }
          cleanup
  br label %489

487:                                              ; preds = %478
  %488 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %489

489:                                              ; preds = %487, %485
  %.pn438 = phi { ptr, i32 } [ %488, %487 ], [ %486, %485 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %490

490:                                              ; preds = %489, %483
  %.pn438.pn = phi { ptr, i32 } [ %.pn438, %489 ], [ %484, %483 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br label %491

491:                                              ; preds = %490, %481
  %.pn438.pn.pn = phi { ptr, i32 } [ %.pn438.pn, %490 ], [ %482, %481 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  br label %1590

492:                                              ; preds = %471
  %493 = getelementptr inbounds i8, ptr %2, i64 16
  %494 = load i8, ptr %493, align 8, !tbaa !199, !range !35, !noundef !36
  %495 = trunc nuw i8 %494 to i1
  br i1 %495, label %496, label %673

496:                                              ; preds = %492
  %497 = getelementptr inbounds i8, ptr %1, i64 10044
  %498 = load i32, ptr %497, align 4, !tbaa !220
  %.not426 = icmp eq i32 %498, 0
  br i1 %.not426, label %516, label %499

499:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %500 unwind label %505

500:                                              ; preds = %499
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %42, i1 noundef zeroext %380)
          to label %501 unwind label %507

501:                                              ; preds = %500
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull @.str.1216, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %502 unwind label %509

502:                                              ; preds = %501
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull @.str.53)
          to label %503 unwind label %511

503:                                              ; preds = %502
  %504 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %673

505:                                              ; preds = %499
  %506 = landingpad { ptr, i32 }
          cleanup
  br label %515

507:                                              ; preds = %500
  %508 = landingpad { ptr, i32 }
          cleanup
  br label %514

509:                                              ; preds = %501
  %510 = landingpad { ptr, i32 }
          cleanup
  br label %513

511:                                              ; preds = %502
  %512 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  br label %513

513:                                              ; preds = %511, %509
  %.pn434 = phi { ptr, i32 } [ %512, %511 ], [ %510, %509 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  br label %514

514:                                              ; preds = %513, %507
  %.pn434.pn = phi { ptr, i32 } [ %.pn434, %513 ], [ %508, %507 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %515

515:                                              ; preds = %514, %505
  %.pn434.pn.pn = phi { ptr, i32 } [ %.pn434.pn, %514 ], [ %506, %505 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %1590

516:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %517 unwind label %526

517:                                              ; preds = %516
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %48, i1 noundef zeroext %380)
          to label %518 unwind label %528

518:                                              ; preds = %517
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull @.str.1216, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %519 unwind label %530

519:                                              ; preds = %518
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull @.str.55)
          to label %520 unwind label %532

520:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #7
  %521 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %521, i1 noundef zeroext true)
          to label %522 unwind label %534

522:                                              ; preds = %520
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %523 unwind label %536

523:                                              ; preds = %522
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.53)
          to label %524 unwind label %538

524:                                              ; preds = %523
  %525 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %673

526:                                              ; preds = %516
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %545

528:                                              ; preds = %517
  %529 = landingpad { ptr, i32 }
          cleanup
  br label %544

530:                                              ; preds = %518
  %531 = landingpad { ptr, i32 }
          cleanup
  br label %543

532:                                              ; preds = %519
  %533 = landingpad { ptr, i32 }
          cleanup
  br label %542

534:                                              ; preds = %520
  %535 = landingpad { ptr, i32 }
          cleanup
  br label %541

536:                                              ; preds = %522
  %537 = landingpad { ptr, i32 }
          cleanup
  br label %540

538:                                              ; preds = %523
  %539 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %540

540:                                              ; preds = %538, %536
  %.pn427 = phi { ptr, i32 } [ %539, %538 ], [ %537, %536 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %541

541:                                              ; preds = %540, %534
  %.pn427.pn = phi { ptr, i32 } [ %.pn427, %540 ], [ %535, %534 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %542

542:                                              ; preds = %541, %532
  %.pn427.pn.pn = phi { ptr, i32 } [ %.pn427.pn, %541 ], [ %533, %532 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %543

543:                                              ; preds = %542, %530
  %.pn427.pn.pn.pn = phi { ptr, i32 } [ %.pn427.pn.pn, %542 ], [ %531, %530 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %544

544:                                              ; preds = %543, %528
  %.pn427.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn427.pn.pn.pn, %543 ], [ %529, %528 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %545

545:                                              ; preds = %544, %526
  %.pn427.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn427.pn.pn.pn.pn, %544 ], [ %527, %526 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %1590

546:                                              ; preds = %381
  %547 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.1217)
          to label %673 unwind label %429

548:                                              ; preds = %381
  %549 = getelementptr inbounds i8, ptr %378, i64 24
  %550 = load i32, ptr %549, align 8, !tbaa !217
  %551 = icmp ugt i32 %550, 2
  br i1 %551, label %552, label %561

552:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %553 unwind label %556

553:                                              ; preds = %552
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull @.str.164)
          to label %554 unwind label %558

554:                                              ; preds = %553
  %555 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  br label %561

556:                                              ; preds = %552
  %557 = landingpad { ptr, i32 }
          cleanup
  br label %560

558:                                              ; preds = %553
  %559 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  br label %560

560:                                              ; preds = %558, %556
  %.pn418 = phi { ptr, i32 } [ %559, %558 ], [ %557, %556 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  br label %1590

561:                                              ; preds = %554, %548
  %562 = getelementptr inbounds i8, ptr %2, i64 16
  %563 = load i8, ptr %562, align 8, !tbaa !199, !range !35, !noundef !36
  %564 = trunc nuw i8 %563 to i1
  br i1 %564, label %565, label %582

565:                                              ; preds = %561
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %566 unwind label %571

566:                                              ; preds = %565
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %55, i1 noundef zeroext %380)
          to label %567 unwind label %573

567:                                              ; preds = %566
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %568 unwind label %575

568:                                              ; preds = %567
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull @.str.53)
          to label %569 unwind label %577

569:                                              ; preds = %568
  %570 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #7
  br label %673

571:                                              ; preds = %565
  %572 = landingpad { ptr, i32 }
          cleanup
  br label %581

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

575:                                              ; preds = %567
  %576 = landingpad { ptr, i32 }
          cleanup
  br label %579

577:                                              ; preds = %568
  %578 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  br label %579

579:                                              ; preds = %577, %575
  %.pn420 = phi { ptr, i32 } [ %578, %577 ], [ %576, %575 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %580

580:                                              ; preds = %579, %573
  %.pn420.pn = phi { ptr, i32 } [ %.pn420, %579 ], [ %574, %573 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %581

581:                                              ; preds = %580, %571
  %.pn420.pn.pn = phi { ptr, i32 } [ %.pn420.pn, %580 ], [ %572, %571 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #7
  br label %1590

582:                                              ; preds = %561
  %583 = call noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %378)
  br i1 %583, label %584, label %673

584:                                              ; preds = %582
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #7
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef 2)
          to label %585 unwind label %587

585:                                              ; preds = %584
  %586 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #7
  br label %673

587:                                              ; preds = %584
  %588 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #7
  br label %1590

589:                                              ; preds = %381
  %590 = getelementptr inbounds i8, ptr %378, i64 24
  %591 = load i32, ptr %590, align 8, !tbaa !217
  %592 = icmp ugt i32 %591, 3
  br i1 %592, label %593, label %602

593:                                              ; preds = %589
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %594 unwind label %597

594:                                              ; preds = %593
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull @.str.165)
          to label %595 unwind label %599

595:                                              ; preds = %594
  %596 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #7
  br label %602

597:                                              ; preds = %593
  %598 = landingpad { ptr, i32 }
          cleanup
  br label %601

599:                                              ; preds = %594
  %600 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  br label %601

601:                                              ; preds = %599, %597
  %.pn412 = phi { ptr, i32 } [ %600, %599 ], [ %598, %597 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #7
  br label %1590

602:                                              ; preds = %595, %589
  %603 = getelementptr inbounds i8, ptr %2, i64 16
  %604 = load i8, ptr %603, align 8, !tbaa !199, !range !35, !noundef !36
  %605 = trunc nuw i8 %604 to i1
  br i1 %605, label %606, label %623

606:                                              ; preds = %602
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %607 unwind label %612

607:                                              ; preds = %606
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %62, i1 noundef zeroext %380)
          to label %608 unwind label %614

608:                                              ; preds = %607
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull @.str.1218, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %609 unwind label %616

609:                                              ; preds = %608
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull @.str.53)
          to label %610 unwind label %618

610:                                              ; preds = %609
  %611 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  br label %673

612:                                              ; preds = %606
  %613 = landingpad { ptr, i32 }
          cleanup
  br label %622

614:                                              ; preds = %607
  %615 = landingpad { ptr, i32 }
          cleanup
  br label %621

616:                                              ; preds = %608
  %617 = landingpad { ptr, i32 }
          cleanup
  br label %620

618:                                              ; preds = %609
  %619 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  br label %620

620:                                              ; preds = %618, %616
  %.pn414 = phi { ptr, i32 } [ %619, %618 ], [ %617, %616 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  br label %621

621:                                              ; preds = %620, %614
  %.pn414.pn = phi { ptr, i32 } [ %.pn414, %620 ], [ %615, %614 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br label %622

622:                                              ; preds = %621, %612
  %.pn414.pn.pn = phi { ptr, i32 } [ %.pn414.pn, %621 ], [ %613, %612 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  br label %1590

623:                                              ; preds = %602
  %624 = call noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %378)
  br i1 %624, label %625, label %673

625:                                              ; preds = %623
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #7
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef 3)
          to label %626 unwind label %628

626:                                              ; preds = %625
  %627 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  br label %673

628:                                              ; preds = %625
  %629 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  br label %1590

630:                                              ; preds = %381
  %631 = getelementptr inbounds i8, ptr %2, i64 16
  %632 = load i8, ptr %631, align 8, !tbaa !199, !range !35, !noundef !36
  %633 = trunc nuw i8 %632 to i1
  br i1 %633, label %634, label %653

634:                                              ; preds = %630
  %635 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.164)
          to label %636 unwind label %429

636:                                              ; preds = %634
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %637 unwind label %642

637:                                              ; preds = %636
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %67, i1 noundef zeroext %380)
          to label %638 unwind label %644

638:                                              ; preds = %637
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %639 unwind label %646

639:                                              ; preds = %638
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull @.str.53)
          to label %640 unwind label %648

640:                                              ; preds = %639
  %641 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #7
  br label %666

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

644:                                              ; preds = %637
  %645 = landingpad { ptr, i32 }
          cleanup
  br label %651

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

648:                                              ; preds = %639
  %649 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  br label %650

650:                                              ; preds = %648, %646
  %.pn408 = phi { ptr, i32 } [ %649, %648 ], [ %647, %646 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  br label %651

651:                                              ; preds = %650, %644
  %.pn408.pn = phi { ptr, i32 } [ %.pn408, %650 ], [ %645, %644 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  br label %652

652:                                              ; preds = %651, %642
  %.pn408.pn.pn = phi { ptr, i32 } [ %.pn408.pn, %651 ], [ %643, %642 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #7
  br label %1590

653:                                              ; preds = %630
  %654 = getelementptr inbounds i8, ptr %378, i64 24
  %655 = load i32, ptr %654, align 8, !tbaa !217
  %656 = icmp ugt i32 %655, 3
  br i1 %656, label %657, label %666

657:                                              ; preds = %653
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %658 unwind label %661

658:                                              ; preds = %657
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull @.str.165)
          to label %659 unwind label %663

659:                                              ; preds = %658
  %660 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #7
  br label %666

661:                                              ; preds = %657
  %662 = landingpad { ptr, i32 }
          cleanup
  br label %665

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

665:                                              ; preds = %663, %661
  %.pn406 = phi { ptr, i32 } [ %664, %663 ], [ %662, %661 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #7
  br label %1590

666:                                              ; preds = %653, %659, %640
  %.0223 = phi i8 [ 1, %640 ], [ 0, %659 ], [ 0, %653 ]
  %667 = call noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %378)
  br i1 %667, label %668, label %673

668:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #7
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef 3)
          to label %669 unwind label %671

669:                                              ; preds = %668
  %670 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #7
  br label %673

671:                                              ; preds = %668
  %672 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #7
  br label %1590

673:                                              ; preds = %666, %669, %610, %626, %623, %569, %585, %582, %546, %479, %503, %524, %492, %433, %451, %442, %381
  %.1224 = phi i8 [ 0, %381 ], [ 0, %442 ], [ 0, %451 ], [ 0, %433 ], [ 0, %492 ], [ 0, %524 ], [ 0, %503 ], [ 0, %479 ], [ 0, %546 ], [ 0, %582 ], [ 0, %585 ], [ 0, %569 ], [ 0, %623 ], [ 0, %626 ], [ 0, %610 ], [ %.0223, %669 ], [ %.0223, %666 ]
  %.0222 = phi i32 [ 0, %381 ], [ 1, %442 ], [ 1, %451 ], [ 1, %433 ], [ 1, %492 ], [ 1, %524 ], [ 1, %503 ], [ 1, %479 ], [ 2, %546 ], [ 2, %582 ], [ 2, %585 ], [ 2, %569 ], [ 3, %623 ], [ 3, %626 ], [ 3, %610 ], [ 3, %669 ], [ 3, %666 ]
  %674 = getelementptr inbounds i8, ptr %2, i64 16
  %675 = load i8, ptr %674, align 8, !tbaa !199, !range !35, !noundef !36
  %676 = trunc nuw i8 %675 to i1
  br i1 %676, label %677, label %758

677:                                              ; preds = %673
  %678 = getelementptr inbounds i8, ptr %2, i64 48
  %679 = load i32, ptr %678, align 8, !tbaa !201
  %.not452 = icmp eq i32 %679, 0
  br i1 %.not452, label %758, label %680

680:                                              ; preds = %677
  br i1 %373, label %681, label %683

681:                                              ; preds = %680
  %682 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %679)
          to label %._crit_edge631 unwind label %429

._crit_edge631:                                   ; preds = %681
  %.pre632 = load i32, ptr %678, align 8, !tbaa !201
  br label %683

683:                                              ; preds = %._crit_edge631, %680
  %684 = phi i32 [ %679, %680 ], [ %.pre632, %._crit_edge631 ]
  %685 = phi i1 [ false, %680 ], [ %682, %._crit_edge631 ]
  %686 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %684)
          to label %687 unwind label %703

687:                                              ; preds = %683
  %688 = load i32, ptr %382, align 4, !tbaa !204
  %689 = icmp eq i32 %688, 0
  br i1 %689, label %690, label %727

690:                                              ; preds = %687
  %691 = getelementptr inbounds i8, ptr %1, i64 10127
  %692 = load i8, ptr %691, align 1, !tbaa !218, !range !35, !noundef !36
  %693 = trunc nuw i8 %692 to i1
  br i1 %693, label %694, label %727

694:                                              ; preds = %690
  %695 = getelementptr inbounds i8, ptr %686, i64 16
  %696 = load i32, ptr %695, align 8, !tbaa !221
  %.not460 = icmp eq i32 %696, 8
  br i1 %.not460, label %713, label %697

697:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #7
  %698 = load i32, ptr %678, align 8, !tbaa !201
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef 8, i32 noundef %698)
          to label %699 unwind label %705

699:                                              ; preds = %697
  invoke void @_ZN11spirv_cross4joinIJRA10_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 1 dereferenceable(10) @.str.1219, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %700 unwind label %707

700:                                              ; preds = %699
  %701 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %71)
          to label %702 unwind label %709

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

703:                                              ; preds = %683
  %704 = landingpad { ptr, i32 }
          cleanup
  br label %1590

705:                                              ; preds = %697
  %706 = landingpad { ptr, i32 }
          cleanup
  br label %712

707:                                              ; preds = %699
  %708 = landingpad { ptr, i32 }
          cleanup
  br label %711

709:                                              ; preds = %700
  %710 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  br label %711

711:                                              ; preds = %709, %707
  %.pn464 = phi { ptr, i32 } [ %710, %709 ], [ %708, %707 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  br label %712

712:                                              ; preds = %711, %705
  %.pn464.pn = phi { ptr, i32 } [ %.pn464, %711 ], [ %706, %705 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #7
  br label %1590

713:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #7
  %714 = load i32, ptr %678, align 8, !tbaa !201
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %714, i1 noundef zeroext true)
          to label %715 unwind label %719

715:                                              ; preds = %713
  invoke void @_ZN11spirv_cross4joinIJRA10_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 1 dereferenceable(10) @.str.1219, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %716 unwind label %721

716:                                              ; preds = %715
  %717 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %718 unwind label %723

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

719:                                              ; preds = %713
  %720 = landingpad { ptr, i32 }
          cleanup
  br label %726

721:                                              ; preds = %715
  %722 = landingpad { ptr, i32 }
          cleanup
  br label %725

723:                                              ; preds = %716
  %724 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  br label %725

725:                                              ; preds = %723, %721
  %.pn461 = phi { ptr, i32 } [ %724, %723 ], [ %722, %721 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  br label %726

726:                                              ; preds = %725, %719
  %.pn461.pn = phi { ptr, i32 } [ %.pn461, %725 ], [ %720, %719 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #7
  br label %1590

727:                                              ; preds = %690, %687
  %728 = getelementptr inbounds i8, ptr %686, i64 16
  %729 = load i32, ptr %728, align 8, !tbaa !221
  %.not453 = icmp eq i32 %729, 8
  br i1 %.not453, label %744, label %730

730:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %75) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #7
  %731 = load i32, ptr %678, align 8, !tbaa !201
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef 8, i32 noundef %731)
          to label %732 unwind label %736

732:                                              ; preds = %730
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull @.str.70, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %733 unwind label %738

733:                                              ; preds = %732
  %734 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %735 unwind label %740

735:                                              ; preds = %733
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #7
  br label %758

736:                                              ; preds = %730
  %737 = landingpad { ptr, i32 }
          cleanup
  br label %743

738:                                              ; preds = %732
  %739 = landingpad { ptr, i32 }
          cleanup
  br label %742

740:                                              ; preds = %733
  %741 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  br label %742

742:                                              ; preds = %740, %738
  %.pn457 = phi { ptr, i32 } [ %741, %740 ], [ %739, %738 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  br label %743

743:                                              ; preds = %742, %736
  %.pn457.pn = phi { ptr, i32 } [ %.pn457, %742 ], [ %737, %736 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #7
  br label %1590

744:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %78) #7
  %745 = load i32, ptr %678, align 8, !tbaa !201
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %745, i1 noundef zeroext true)
          to label %746 unwind label %750

746:                                              ; preds = %744
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull @.str.70, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %747 unwind label %752

747:                                              ; preds = %746
  %748 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %77)
          to label %749 unwind label %754

749:                                              ; preds = %747
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #7
  br label %758

750:                                              ; preds = %744
  %751 = landingpad { ptr, i32 }
          cleanup
  br label %757

752:                                              ; preds = %746
  %753 = landingpad { ptr, i32 }
          cleanup
  br label %756

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

756:                                              ; preds = %754, %752
  %.pn454 = phi { ptr, i32 } [ %755, %754 ], [ %753, %752 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #7
  br label %757

757:                                              ; preds = %756, %750
  %.pn454.pn = phi { ptr, i32 } [ %.pn454, %756 ], [ %751, %750 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #7
  br label %1590

758:                                              ; preds = %718, %702, %749, %735, %677, %673
  %.2221.in = phi i1 [ %373, %677 ], [ %373, %673 ], [ %685, %735 ], [ %685, %749 ], [ %685, %702 ], [ %685, %718 ]
  %759 = getelementptr inbounds i8, ptr %2, i64 18
  %760 = load i8, ptr %759, align 2, !tbaa !222, !range !35, !noundef !36
  %761 = trunc nuw i8 %760 to i1
  br i1 %761, label %762, label %796

762:                                              ; preds = %758
  %763 = call noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %378)
  br i1 %763, label %764, label %782

764:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %80) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %81) #7
  %765 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %765, i32 noundef %.0222)
          to label %766 unwind label %771

766:                                              ; preds = %764
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %81, i32 noundef 1)
          to label %767 unwind label %773

767:                                              ; preds = %766
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull @.str.1220, ptr noundef nonnull align 8 dereferenceable(32) %80)
          to label %768 unwind label %775

768:                                              ; preds = %767
  %769 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %79)
          to label %770 unwind label %777

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

771:                                              ; preds = %764
  %772 = landingpad { ptr, i32 }
          cleanup
  br label %781

773:                                              ; preds = %766
  %774 = landingpad { ptr, i32 }
          cleanup
  br label %780

775:                                              ; preds = %767
  %776 = landingpad { ptr, i32 }
          cleanup
  br label %779

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

779:                                              ; preds = %777, %775
  %.pn471 = phi { ptr, i32 } [ %778, %777 ], [ %776, %775 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #7
  br label %780

780:                                              ; preds = %779, %773
  %.pn471.pn = phi { ptr, i32 } [ %.pn471, %779 ], [ %774, %773 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #7
  br label %781

781:                                              ; preds = %780, %771
  %.pn471.pn.pn = phi { ptr, i32 } [ %.pn471.pn, %780 ], [ %772, %771 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #7
  br label %1590

782:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %82) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %83) #7
  %783 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %783, i32 noundef %.0222)
          to label %784 unwind label %788

784:                                              ; preds = %782
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull @.str.1220, ptr noundef nonnull align 8 dereferenceable(32) %83)
          to label %785 unwind label %790

785:                                              ; preds = %784
  %786 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %787 unwind label %792

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

788:                                              ; preds = %782
  %789 = landingpad { ptr, i32 }
          cleanup
  br label %795

790:                                              ; preds = %784
  %791 = landingpad { ptr, i32 }
          cleanup
  br label %794

792:                                              ; preds = %785
  %793 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #7
  br label %794

794:                                              ; preds = %792, %790
  %.pn468 = phi { ptr, i32 } [ %793, %792 ], [ %791, %790 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #7
  br label %795

795:                                              ; preds = %794, %788
  %.pn468.pn = phi { ptr, i32 } [ %.pn468, %794 ], [ %789, %788 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %83) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #7
  br label %1590

796:                                              ; preds = %770, %787, %758
  %797 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br i1 %797, label %800, label %798

798:                                              ; preds = %796
  %799 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.55)
          to label %800 unwind label %429

800:                                              ; preds = %798, %796
  %801 = load i32, ptr %382, align 4, !tbaa !204
  %802 = icmp eq i32 %801, 3
  br i1 %802, label %803, label %874

803:                                              ; preds = %800
  %804 = getelementptr inbounds i8, ptr %165, i64 257
  %805 = load i8, ptr %804, align 1, !tbaa !223, !range !35, !noundef !36
  %806 = trunc nuw i8 %805 to i1
  br i1 %806, label %807, label %874

807:                                              ; preds = %803
  %808 = getelementptr inbounds i8, ptr %1, i64 10142
  %809 = load i8, ptr %808, align 2, !tbaa !224, !range !35, !noundef !36
  %810 = trunc nuw i8 %809 to i1
  br i1 %810, label %811, label %874

811:                                              ; preds = %807
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %84) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %85) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull @.str.1221, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %812 unwind label %824

812:                                              ; preds = %811
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull @.str.1222)
          to label %813 unwind label %826

813:                                              ; preds = %812
  %814 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %84)
          to label %815 unwind label %828

815:                                              ; preds = %813
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %85) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #7
  %816 = trunc nuw i8 %.1224 to i1
  br i1 %816, label %817, label %843

817:                                              ; preds = %815
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %86) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %87) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %88) #7
  %818 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %818, i32 noundef 2)
          to label %819 unwind label %832

819:                                              ; preds = %817
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %88)
          to label %820 unwind label %834

820:                                              ; preds = %819
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull @.str.53)
          to label %821 unwind label %836

821:                                              ; preds = %820
  %822 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %86)
          to label %823 unwind label %838

823:                                              ; preds = %821
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %88) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #7
  br label %873

824:                                              ; preds = %811
  %825 = landingpad { ptr, i32 }
          cleanup
  br label %831

826:                                              ; preds = %812
  %827 = landingpad { ptr, i32 }
          cleanup
  br label %830

828:                                              ; preds = %813
  %829 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #7
  br label %830

830:                                              ; preds = %828, %826
  %.pn493 = phi { ptr, i32 } [ %829, %828 ], [ %827, %826 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  br label %831

831:                                              ; preds = %830, %824
  %.pn493.pn = phi { ptr, i32 } [ %.pn493, %830 ], [ %825, %824 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %85) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #7
  br label %1590

832:                                              ; preds = %817
  %833 = landingpad { ptr, i32 }
          cleanup
  br label %842

834:                                              ; preds = %819
  %835 = landingpad { ptr, i32 }
          cleanup
  br label %841

836:                                              ; preds = %820
  %837 = landingpad { ptr, i32 }
          cleanup
  br label %840

838:                                              ; preds = %821
  %839 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #7
  br label %840

840:                                              ; preds = %838, %836
  %.pn503 = phi { ptr, i32 } [ %839, %838 ], [ %837, %836 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #7
  br label %841

841:                                              ; preds = %840, %834
  %.pn503.pn = phi { ptr, i32 } [ %.pn503, %840 ], [ %835, %834 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  br label %842

842:                                              ; preds = %841, %832
  %.pn503.pn.pn = phi { ptr, i32 } [ %.pn503.pn, %841 ], [ %833, %832 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %88) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #7
  br label %1590

843:                                              ; preds = %815
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %89) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %90) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %91) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %92) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull @.str.1224, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %844 unwind label %853

844:                                              ; preds = %843
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull @.str.1225)
          to label %845 unwind label %855

845:                                              ; preds = %844
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %93) #7
  %846 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %846, i32 noundef %.0222)
          to label %847 unwind label %857

847:                                              ; preds = %845
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %94, i1 noundef zeroext %380)
          to label %848 unwind label %859

848:                                              ; preds = %847
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef nonnull align 8 dereferenceable(32) %93)
          to label %849 unwind label %861

849:                                              ; preds = %848
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef nonnull @.str.1226)
          to label %850 unwind label %863

850:                                              ; preds = %849
  %851 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %89)
          to label %852 unwind label %865

852:                                              ; preds = %850
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #7
  br label %873

853:                                              ; preds = %843
  %854 = landingpad { ptr, i32 }
          cleanup
  br label %872

855:                                              ; preds = %844
  %856 = landingpad { ptr, i32 }
          cleanup
  br label %871

857:                                              ; preds = %845
  %858 = landingpad { ptr, i32 }
          cleanup
  br label %870

859:                                              ; preds = %847
  %860 = landingpad { ptr, i32 }
          cleanup
  br label %869

861:                                              ; preds = %848
  %862 = landingpad { ptr, i32 }
          cleanup
  br label %868

863:                                              ; preds = %849
  %864 = landingpad { ptr, i32 }
          cleanup
  br label %867

865:                                              ; preds = %850
  %866 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #7
  br label %867

867:                                              ; preds = %865, %863
  %.pn496 = phi { ptr, i32 } [ %866, %865 ], [ %864, %863 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #7
  br label %868

868:                                              ; preds = %867, %861
  %.pn496.pn = phi { ptr, i32 } [ %.pn496, %867 ], [ %862, %861 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #7
  br label %869

869:                                              ; preds = %868, %859
  %.pn496.pn.pn = phi { ptr, i32 } [ %.pn496.pn, %868 ], [ %860, %859 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #7
  br label %870

870:                                              ; preds = %869, %857
  %.pn496.pn.pn.pn = phi { ptr, i32 } [ %.pn496.pn.pn, %869 ], [ %858, %857 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #7
  br label %871

871:                                              ; preds = %870, %855
  %.pn496.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn496.pn.pn.pn, %870 ], [ %856, %855 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #7
  br label %872

872:                                              ; preds = %871, %853
  %.pn496.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn496.pn.pn.pn.pn, %871 ], [ %854, %853 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #7
  br label %1590

873:                                              ; preds = %852, %823
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 17)
          to label %994 unwind label %429

874:                                              ; preds = %807, %803, %800
  %875 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %876 unwind label %429

876:                                              ; preds = %874
  %877 = trunc nuw i8 %.1224 to i1
  br i1 %877, label %878, label %922

878:                                              ; preds = %876
  %879 = getelementptr inbounds i8, ptr %165, i64 257
  %880 = load i8, ptr %879, align 1, !tbaa !223, !range !35, !noundef !36
  %881 = trunc nuw i8 %880 to i1
  br i1 %881, label %882, label %900

882:                                              ; preds = %878
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %95) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %96) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %97) #7
  %883 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %883, i32 noundef 2)
          to label %884 unwind label %889

884:                                              ; preds = %882
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %97)
          to label %885 unwind label %891

885:                                              ; preds = %884
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(32) %96, ptr noundef nonnull @.str.1227)
          to label %886 unwind label %893

886:                                              ; preds = %885
  %887 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %888 unwind label %895

888:                                              ; preds = %886
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %97) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %96) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #7
  br label %922

889:                                              ; preds = %882
  %890 = landingpad { ptr, i32 }
          cleanup
  br label %899

891:                                              ; preds = %884
  %892 = landingpad { ptr, i32 }
          cleanup
  br label %898

893:                                              ; preds = %885
  %894 = landingpad { ptr, i32 }
          cleanup
  br label %897

895:                                              ; preds = %886
  %896 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #7
  br label %897

897:                                              ; preds = %895, %893
  %.pn480 = phi { ptr, i32 } [ %896, %895 ], [ %894, %893 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #7
  br label %898

898:                                              ; preds = %897, %891
  %.pn480.pn = phi { ptr, i32 } [ %.pn480, %897 ], [ %892, %891 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #7
  br label %899

899:                                              ; preds = %898, %889
  %.pn480.pn.pn = phi { ptr, i32 } [ %.pn480.pn, %898 ], [ %890, %889 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %97) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %96) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #7
  br label %1590

900:                                              ; preds = %878
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %98) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %99) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %100) #7
  %901 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %901, i32 noundef 2)
          to label %902 unwind label %908

902:                                              ; preds = %900
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %101, i1 noundef zeroext %380)
          to label %903 unwind label %910

903:                                              ; preds = %902
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %100)
          to label %904 unwind label %912

904:                                              ; preds = %903
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %98, ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef nonnull @.str.53)
          to label %905 unwind label %914

905:                                              ; preds = %904
  %906 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %98)
          to label %907 unwind label %916

907:                                              ; preds = %905
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %100) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %98) #7
  br label %922

908:                                              ; preds = %900
  %909 = landingpad { ptr, i32 }
          cleanup
  br label %921

910:                                              ; preds = %902
  %911 = landingpad { ptr, i32 }
          cleanup
  br label %920

912:                                              ; preds = %903
  %913 = landingpad { ptr, i32 }
          cleanup
  br label %919

914:                                              ; preds = %904
  %915 = landingpad { ptr, i32 }
          cleanup
  br label %918

916:                                              ; preds = %905
  %917 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #7
  br label %918

918:                                              ; preds = %916, %914
  %.pn475 = phi { ptr, i32 } [ %917, %916 ], [ %915, %914 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #7
  br label %919

919:                                              ; preds = %918, %912
  %.pn475.pn = phi { ptr, i32 } [ %.pn475, %918 ], [ %913, %912 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #7
  br label %920

920:                                              ; preds = %919, %910
  %.pn475.pn.pn = phi { ptr, i32 } [ %.pn475.pn, %919 ], [ %911, %910 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #7
  br label %921

921:                                              ; preds = %920, %908
  %.pn475.pn.pn.pn = phi { ptr, i32 } [ %.pn475.pn.pn, %920 ], [ %909, %908 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %100) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %98) #7
  br label %1590

922:                                              ; preds = %888, %907, %876
  %923 = getelementptr inbounds i8, ptr %165, i64 257
  %924 = load i8, ptr %923, align 1, !tbaa !223, !range !35, !noundef !36
  %925 = trunc nuw i8 %924 to i1
  %926 = load i32, ptr %382, align 4, !tbaa !204
  br i1 %925, label %927, label %982

927:                                              ; preds = %922
  %928 = icmp eq i32 %926, 3
  br i1 %928, label %929, label %950

929:                                              ; preds = %927
  %930 = load i8, ptr %674, align 8, !tbaa !199, !range !35, !noundef !36
  %931 = trunc nuw i8 %930 to i1
  br i1 %931, label %932, label %950

932:                                              ; preds = %929
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %102) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %103) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %104) #7
  %933 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %933, i32 noundef 2)
          to label %934 unwind label %939

934:                                              ; preds = %932
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %104)
          to label %935 unwind label %941

935:                                              ; preds = %934
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull @.str.1228)
          to label %936 unwind label %943

936:                                              ; preds = %935
  %937 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %102)
          to label %938 unwind label %945

938:                                              ; preds = %936
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %104) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %103) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %102) #7
  br label %994

939:                                              ; preds = %932
  %940 = landingpad { ptr, i32 }
          cleanup
  br label %949

941:                                              ; preds = %934
  %942 = landingpad { ptr, i32 }
          cleanup
  br label %948

943:                                              ; preds = %935
  %944 = landingpad { ptr, i32 }
          cleanup
  br label %947

945:                                              ; preds = %936
  %946 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #7
  br label %947

947:                                              ; preds = %945, %943
  %.pn489 = phi { ptr, i32 } [ %946, %945 ], [ %944, %943 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #7
  br label %948

948:                                              ; preds = %947, %941
  %.pn489.pn = phi { ptr, i32 } [ %.pn489, %947 ], [ %942, %941 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #7
  br label %949

949:                                              ; preds = %948, %939
  %.pn489.pn.pn = phi { ptr, i32 } [ %.pn489.pn, %948 ], [ %940, %939 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %104) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %103) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %102) #7
  br label %1590

950:                                              ; preds = %929, %927
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %105) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %106) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %107) #7
  %951 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %108, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %951, i32 noundef %.0222)
          to label %952 unwind label %964

952:                                              ; preds = %950
  invoke void @_ZN11spirv_cross11CompilerMSL19round_fp_tex_coordsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %107, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull %108, i1 noundef zeroext %380)
          to label %953 unwind label %966

953:                                              ; preds = %952
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull @.str.1223, ptr noundef nonnull align 8 dereferenceable(32) %107)
          to label %954 unwind label %968

954:                                              ; preds = %953
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %105, ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef nonnull @.str.53)
          to label %955 unwind label %970

955:                                              ; preds = %954
  %956 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %105)
          to label %957 unwind label %972

957:                                              ; preds = %955
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %107) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #7
  %958 = load i32, ptr %382, align 4, !tbaa !204
  %959 = icmp eq i32 %958, 6
  br i1 %959, label %960, label %994

960:                                              ; preds = %957
  %961 = getelementptr inbounds i8, ptr %1, i64 10123
  %962 = load i8, ptr %961, align 1, !tbaa !225, !range !35, !noundef !36
  %963 = trunc nuw i8 %962 to i1
  br i1 %963, label %.invoke635, label %978

964:                                              ; preds = %950
  %965 = landingpad { ptr, i32 }
          cleanup
  br label %977

966:                                              ; preds = %952
  %967 = landingpad { ptr, i32 }
          cleanup
  br label %976

968:                                              ; preds = %953
  %969 = landingpad { ptr, i32 }
          cleanup
  br label %975

970:                                              ; preds = %954
  %971 = landingpad { ptr, i32 }
          cleanup
  br label %974

972:                                              ; preds = %955
  %973 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #7
  br label %974

974:                                              ; preds = %972, %970
  %.pn484 = phi { ptr, i32 } [ %973, %972 ], [ %971, %970 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #7
  br label %975

975:                                              ; preds = %974, %968
  %.pn484.pn = phi { ptr, i32 } [ %.pn484, %974 ], [ %969, %968 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #7
  br label %976

976:                                              ; preds = %975, %966
  %.pn484.pn.pn = phi { ptr, i32 } [ %.pn484.pn, %975 ], [ %967, %966 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #7
  br label %977

977:                                              ; preds = %976, %964
  %.pn484.pn.pn.pn = phi { ptr, i32 } [ %.pn484.pn.pn, %976 ], [ %965, %964 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %107) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #7
  br label %1590

978:                                              ; preds = %960
  %979 = getelementptr inbounds i8, ptr %1, i64 10152
  %980 = load i8, ptr %979, align 8, !tbaa !226, !range !35, !noundef !36
  %981 = trunc nuw i8 %980 to i1
  br i1 %981, label %.invoke635, label %994

982:                                              ; preds = %922
  %983 = icmp eq i32 %926, 6
  br i1 %983, label %984, label %994

984:                                              ; preds = %982
  %985 = getelementptr inbounds i8, ptr %1, i64 10123
  %986 = load i8, ptr %985, align 1, !tbaa !225, !range !35, !noundef !36
  %987 = trunc nuw i8 %986 to i1
  br i1 %987, label %.invoke635, label %988

988:                                              ; preds = %984
  %989 = getelementptr inbounds i8, ptr %1, i64 10152
  %990 = load i8, ptr %989, align 8, !tbaa !226, !range !35, !noundef !36
  %991 = trunc nuw i8 %990 to i1
  br i1 %991, label %.invoke635, label %994

.invoke635:                                       ; preds = %988, %984, %978, %960
  %992 = phi ptr [ @.str.1229, %960 ], [ @.str.1230, %978 ], [ @.str.1231, %984 ], [ @.str.1232, %988 ]
  %993 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %992)
          to label %994 unwind label %429

994:                                              ; preds = %.invoke635, %957, %978, %938, %988, %982, %873
  %995 = getelementptr inbounds i8, ptr %2, i64 32
  %996 = load i32, ptr %995, align 8, !tbaa !227
  %.not507 = icmp eq i32 %996, 0
  br i1 %.not507, label %1094, label %997

997:                                              ; preds = %994
  br i1 %.2221.in, label %998, label %1000

998:                                              ; preds = %997
  %999 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %996)
          to label %1000 unwind label %429

1000:                                             ; preds = %998, %997
  %1001 = phi i1 [ false, %997 ], [ %999, %998 ]
  %1002 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.55)
          to label %1003 unwind label %429

1003:                                             ; preds = %1000
  %1004 = load i32, ptr %995, align 8, !tbaa !227
  %1005 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1004)
          to label %1006 unwind label %1016

1006:                                             ; preds = %1003
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %109) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #7
  %1007 = load i8, ptr %759, align 2, !tbaa !222, !range !35, !noundef !36
  %1008 = trunc nuw i8 %1007 to i1
  br i1 %1008, label %1009, label %1026

1009:                                             ; preds = %1006
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %110) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %111) #7
  %1010 = load i32, ptr %995, align 8, !tbaa !227
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %111, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1010, i1 noundef zeroext true)
          to label %1011 unwind label %1018

1011:                                             ; preds = %1009
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %112) #7
  %1012 = load i32, ptr %374, align 8, !tbaa !203
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1012, i32 noundef %.0222)
          to label %1013 unwind label %1020

1013:                                             ; preds = %1011
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(32) %111, ptr noundef nonnull align 1 dereferenceable(4) @.str.1220, ptr noundef nonnull align 8 dereferenceable(32) %112)
          to label %1014 unwind label %1022

1014:                                             ; preds = %1013
  %1015 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 8 dereferenceable(32) %110) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %111) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %110) #7
  br label %1032

1016:                                             ; preds = %1003
  %1017 = landingpad { ptr, i32 }
          cleanup
  br label %1590

1018:                                             ; preds = %1009
  %1019 = landingpad { ptr, i32 }
          cleanup
  br label %1025

1020:                                             ; preds = %1011
  %1021 = landingpad { ptr, i32 }
          cleanup
  br label %1024

1022:                                             ; preds = %1013
  %1023 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #7
  br label %1024

1024:                                             ; preds = %1022, %1020
  %.pn508 = phi { ptr, i32 } [ %1023, %1022 ], [ %1021, %1020 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #7
  br label %1025

1025:                                             ; preds = %1024, %1018
  %.pn508.pn = phi { ptr, i32 } [ %.pn508, %1024 ], [ %1019, %1018 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %111) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %110) #7
  br label %1093

1026:                                             ; preds = %1006
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %113) #7
  %1027 = load i32, ptr %995, align 8, !tbaa !227
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1027, i1 noundef zeroext true)
          to label %1028 unwind label %1030

1028:                                             ; preds = %1026
  %1029 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 8 dereferenceable(32) %113) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %113) #7
  br label %1032

1030:                                             ; preds = %1026
  %1031 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %113) #7
  br label %1093

1032:                                             ; preds = %1028, %1014
  %1033 = call noundef zeroext i1 @_ZL34sampling_type_needs_f32_conversionRKN11spirv_cross8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %1005)
  br i1 %1033, label %1034, label %1041

1034:                                             ; preds = %1032
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %114) #7
  invoke void @_ZN11spirv_cross11CompilerMSL14convert_to_f32ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef nonnull align 8 dereferenceable(12482) %1, ptr noundef nonnull align 8 dereferenceable(32) %109, i32 noundef 1)
          to label %1035 unwind label %1039

1035:                                             ; preds = %1034
  %1036 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 8 dereferenceable(32) %114) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #7
  br label %1041

1037:                                             ; preds = %1089, %1082, %1041
  %1038 = landingpad { ptr, i32 }
          cleanup
  br label %1093

1039:                                             ; preds = %1034
  %1040 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #7
  br label %1093

1041:                                             ; preds = %1035, %1032
  %1042 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %109)
          to label %1043 unwind label %1037

1043:                                             ; preds = %1041
  %1044 = getelementptr inbounds i8, ptr %1, i64 10036
  %1045 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1044)
  br i1 %1045, label %1046, label %1079

1046:                                             ; preds = %1043
  %1047 = icmp ne i32 %169, 0
  %1048 = icmp ne i32 %171, 0
  %or.cond = select i1 %1047, i1 true, i1 %1048
  br i1 %or.cond, label %1049, label %1079

1049:                                             ; preds = %1046
  br i1 %1047, label %1050, label %1052

1050:                                             ; preds = %1049
  %1051 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %169)
          to label %1052 unwind label %1068

1052:                                             ; preds = %1050, %1049
  %1053 = phi i1 [ true, %1049 ], [ %1051, %1050 ]
  br i1 %1048, label %1054, label %1056

1054:                                             ; preds = %1052
  %1055 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %171)
          to label %1056 unwind label %1070

1056:                                             ; preds = %1054, %1052
  %1057 = phi i1 [ true, %1052 ], [ %1055, %1054 ]
  %brmerge.demorgan = and i1 %1053, %1057
  br i1 %brmerge.demorgan, label %1058, label %1072

1058:                                             ; preds = %1056
  %1059 = getelementptr inbounds i8, ptr %165, i64 257
  %1060 = load i8, ptr %1059, align 1, !tbaa !223, !range !35, !noundef !36
  %1061 = trunc nuw i8 %1060 to i1
  br i1 %1061, label %1062, label %1066

1062:                                             ; preds = %1058
  %1063 = getelementptr inbounds i8, ptr %1, i64 10167
  %1064 = load i8, ptr %1063, align 1, !tbaa !228, !range !35, !noundef !36
  %1065 = trunc nuw i8 %1064 to i1
  br i1 %1065, label %1072, label %1066

1066:                                             ; preds = %1062, %1058
  %1067 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1233)
          to label %1079 unwind label %1070

1068:                                             ; preds = %1050
  %1069 = landingpad { ptr, i32 }
          cleanup
  br label %1093

1070:                                             ; preds = %1076, %1066, %1054
  %1071 = landingpad { ptr, i32 }
          cleanup
  br label %1093

1072:                                             ; preds = %1056, %1062
  %1073 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1044, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %1073, label %1079, label %1074

1074:                                             ; preds = %1072
  %1075 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1075, ptr noundef nonnull @.str.1234)
          to label %1076 unwind label %1077

1076:                                             ; preds = %1074
  invoke void @__cxa_throw(ptr nonnull %1075, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %1595 unwind label %1070

1077:                                             ; preds = %1074
  %1078 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1075) #7
  br label %1093

1079:                                             ; preds = %1066, %1072, %1046, %1043
  %.1209 = phi i32 [ 0, %1046 ], [ %171, %1043 ], [ %171, %1072 ], [ 0, %1066 ]
  %.1206 = phi i32 [ 0, %1046 ], [ %169, %1043 ], [ %169, %1072 ], [ 0, %1066 ]
  %.1 = phi i32 [ %167, %1046 ], [ %167, %1043 ], [ %167, %1072 ], [ 0, %1066 ]
  %1080 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1044)
  %1081 = icmp ne i32 %173, 0
  %or.cond3 = select i1 %1080, i1 %1081, i1 false
  br i1 %or.cond3, label %1082, label %1092

1082:                                             ; preds = %1079
  %1083 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %173)
          to label %1084 unwind label %1037

1084:                                             ; preds = %1082
  br i1 %1083, label %1092, label %1085

1085:                                             ; preds = %1084
  %1086 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1044, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %1086, label %1092, label %1087

1087:                                             ; preds = %1085
  %1088 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1088, ptr noundef nonnull @.str.1235)
          to label %1089 unwind label %1090

1089:                                             ; preds = %1087
  invoke void @__cxa_throw(ptr nonnull %1088, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %1595 unwind label %1037

1090:                                             ; preds = %1087
  %1091 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1088) #7
  br label %1093

1092:                                             ; preds = %1084, %1085, %1079
  %.0215 = phi i32 [ %173, %1085 ], [ %173, %1079 ], [ 0, %1084 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %109) #7
  br label %1094

1093:                                             ; preds = %1068, %1077, %1070, %1090, %1039, %1037, %1030, %1025
  %.pn514 = phi { ptr, i32 } [ %1038, %1037 ], [ %1091, %1090 ], [ %1040, %1039 ], [ %.pn508.pn, %1025 ], [ %1031, %1030 ], [ %1069, %1068 ], [ %1071, %1070 ], [ %1078, %1077 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %109) #7
  br label %1590

1094:                                             ; preds = %1092, %994
  %.3.in = phi i1 [ %1001, %1092 ], [ %.2221.in, %994 ]
  %.1216 = phi i32 [ %.0215, %1092 ], [ %173, %994 ]
  %.2210 = phi i32 [ %.1209, %1092 ], [ %171, %994 ]
  %.2207 = phi i32 [ %.1206, %1092 ], [ %169, %994 ]
  %.2 = phi i32 [ %.1, %1092 ], [ %167, %994 ]
  %.not517 = icmp eq i32 %.1216, 0
  br i1 %.not517, label %1122, label %1095

1095:                                             ; preds = %1094
  %1096 = load i32, ptr %382, align 4, !tbaa !204
  %.not518 = icmp eq i32 %1096, 0
  br i1 %.not518, label %1097, label %1101

1097:                                             ; preds = %1095
  %1098 = getelementptr inbounds i8, ptr %1, i64 10127
  %1099 = load i8, ptr %1098, align 1, !tbaa !218, !range !35, !noundef !36
  %1100 = trunc nuw i8 %1099 to i1
  br i1 %1100, label %1101, label %1122

1101:                                             ; preds = %1097, %1095
  br i1 %.3.in, label %1102, label %1104

1102:                                             ; preds = %1101
  %1103 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.1216)
          to label %1104 unwind label %429

1104:                                             ; preds = %1102, %1101
  %1105 = phi i1 [ false, %1101 ], [ %1103, %1102 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %115) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %116) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %117) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.1216, i1 noundef zeroext true)
          to label %1106 unwind label %1111

1106:                                             ; preds = %1104
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull @.str.1236, ptr noundef nonnull align 8 dereferenceable(32) %117)
          to label %1107 unwind label %1113

1107:                                             ; preds = %1106
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull @.str.53)
          to label %1108 unwind label %1115

1108:                                             ; preds = %1107
  %1109 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %115)
          to label %1110 unwind label %1117

1110:                                             ; preds = %1108
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %117) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %116) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %115) #7
  br label %1122

1111:                                             ; preds = %1104
  %1112 = landingpad { ptr, i32 }
          cleanup
  br label %1121

1113:                                             ; preds = %1106
  %1114 = landingpad { ptr, i32 }
          cleanup
  br label %1120

1115:                                             ; preds = %1107
  %1116 = landingpad { ptr, i32 }
          cleanup
  br label %1119

1117:                                             ; preds = %1108
  %1118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #7
  br label %1119

1119:                                             ; preds = %1117, %1115
  %.pn519 = phi { ptr, i32 } [ %1118, %1117 ], [ %1116, %1115 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #7
  br label %1120

1120:                                             ; preds = %1119, %1113
  %.pn519.pn = phi { ptr, i32 } [ %.pn519, %1119 ], [ %1114, %1113 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #7
  br label %1121

1121:                                             ; preds = %1120, %1111
  %.pn519.pn.pn = phi { ptr, i32 } [ %.pn519.pn, %1120 ], [ %1112, %1111 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %117) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %116) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %115) #7
  br label %1590

1122:                                             ; preds = %1110, %1097, %1094
  %.4.in = phi i1 [ %1105, %1110 ], [ %.3.in, %1097 ], [ %.3.in, %1094 ]
  %1123 = icmp eq i32 %.2, 0
  br i1 %1123, label %1293, label %1124

1124:                                             ; preds = %1122
  %1125 = load i32, ptr %382, align 4, !tbaa !204
  %.not523 = icmp eq i32 %1125, 0
  br i1 %.not523, label %1126, label %1130

1126:                                             ; preds = %1124
  %1127 = getelementptr inbounds i8, ptr %1, i64 10127
  %1128 = load i8, ptr %1127, align 1, !tbaa !218, !range !35, !noundef !36
  %1129 = trunc nuw i8 %1128 to i1
  br i1 %1129, label %1130, label %.thread624

1130:                                             ; preds = %1126, %1124
  br i1 %.4.in, label %1131, label %1133

1131:                                             ; preds = %1130
  %1132 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2)
          to label %1133 unwind label %429

1133:                                             ; preds = %1131, %1130
  %1134 = phi i1 [ false, %1130 ], [ %1132, %1131 ]
  %1135 = load i8, ptr %674, align 8, !tbaa !199, !range !35, !noundef !36
  %1136 = trunc nuw i8 %1135 to i1
  br i1 %1136, label %1137, label %1150

1137:                                             ; preds = %1133
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %118) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %119) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %119, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2, i1 noundef zeroext true)
          to label %1138 unwind label %1142

1138:                                             ; preds = %1137
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %118, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %119)
          to label %1139 unwind label %1144

1139:                                             ; preds = %1138
  %1140 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %118)
          to label %1141 unwind label %1146

1141:                                             ; preds = %1139
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %119) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %118) #7
  br label %.thread624

1142:                                             ; preds = %1137
  %1143 = landingpad { ptr, i32 }
          cleanup
  br label %1149

1144:                                             ; preds = %1138
  %1145 = landingpad { ptr, i32 }
          cleanup
  br label %1148

1146:                                             ; preds = %1139
  %1147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #7
  br label %1148

1148:                                             ; preds = %1146, %1144
  %.pn547 = phi { ptr, i32 } [ %1147, %1146 ], [ %1145, %1144 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #7
  br label %1149

1149:                                             ; preds = %1148, %1142
  %.pn547.pn = phi { ptr, i32 } [ %.pn547, %1148 ], [ %1143, %1142 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %119) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %118) #7
  br label %1590

1150:                                             ; preds = %1133
  %1151 = getelementptr inbounds i8, ptr %1, i64 10036
  %1152 = getelementptr inbounds i8, ptr %1, i64 10167
  %1153 = load i8, ptr %1152, align 1, !tbaa !228, !range !35, !noundef !36
  %1154 = trunc nuw i8 %1153 to i1
  %1155 = load i32, ptr %995, align 8
  %.not527 = icmp ne i32 %1155, 0
  %or.cond596.not = select i1 %1154, i1 %.not527, i1 false
  br i1 %or.cond596.not, label %1156, label %1276

1156:                                             ; preds = %1150
  %1157 = getelementptr inbounds i8, ptr %165, i64 257
  %1158 = load i8, ptr %1157, align 1, !tbaa !223, !range !35, !noundef !36
  %1159 = trunc nuw i8 %1158 to i1
  br i1 %1159, label %1160, label %1276

1160:                                             ; preds = %1156
  %1161 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1151)
  br i1 %1161, label %1162, label %1168

1162:                                             ; preds = %1160
  %1163 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1151, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %1163, label %1168, label %1164

1164:                                             ; preds = %1162
  %1165 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1165, ptr noundef nonnull @.str.1234)
          to label %.invoke unwind label %1166

1166:                                             ; preds = %1164
  %1167 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1165) #7
  br label %1590

1168:                                             ; preds = %1162, %1160
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %120) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %121) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %122) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %123) #7
  %1169 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %1169, ptr %123, align 4, !tbaa !5
  %1170 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %1171 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1170)
          to label %1172 unwind label %1176

1172:                                             ; preds = %1168
  %.not532 = icmp eq ptr %1171, null
  br i1 %.not532, label %1178, label %1173

1173:                                             ; preds = %1172
  %1174 = getelementptr inbounds i8, ptr %1171, i64 16
  %1175 = load i32, ptr %1174, align 8, !tbaa !5
  store i32 %1175, ptr %123, align 4, !tbaa !5
  br label %1178

1176:                                             ; preds = %1168
  %1177 = landingpad { ptr, i32 }
          cleanup
  br label %1275

1178:                                             ; preds = %1173, %1172
  %1179 = load i32, ptr %382, align 4, !tbaa !204
  switch i32 %1179, label %1254 [
    i32 0, label %1180
    i32 1, label %1194
    i32 3, label %1211
  ]

1180:                                             ; preds = %1178
  %1181 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull @.str.1237)
          to label %1182 unwind label %1187

1182:                                             ; preds = %1180
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %124) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %125) #7
  %1183 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %125, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1183, i1 noundef zeroext true)
          to label %1184 unwind label %1189

1184:                                             ; preds = %1182
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA19_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %124, ptr noundef nonnull align 1 dereferenceable(8) @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %125, ptr noundef nonnull align 1 dereferenceable(19) @.str.1238)
          to label %1185 unwind label %1191

1185:                                             ; preds = %1184
  %1186 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 8 dereferenceable(32) %124) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %125) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %124) #7
  br label %1258

1187:                                             ; preds = %1256, %1254, %1242, %1235, %1234, %1218, %1194, %1180
  %1188 = landingpad { ptr, i32 }
          cleanup
  br label %1275

1189:                                             ; preds = %1182
  %1190 = landingpad { ptr, i32 }
          cleanup
  br label %1193

1191:                                             ; preds = %1184
  %1192 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #7
  br label %1193

1193:                                             ; preds = %1191, %1189
  %.pn540 = phi { ptr, i32 } [ %1192, %1191 ], [ %1190, %1189 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %125) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %124) #7
  br label %1275

1194:                                             ; preds = %1178
  %1195 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull @.str.1237)
          to label %1196 unwind label %1187

1196:                                             ; preds = %1194
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %126) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %127) #7
  %1197 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %127, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1197, i1 noundef zeroext true)
          to label %1198 unwind label %1203

1198:                                             ; preds = %1196
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %128) #7
  %1199 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %128, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1199, i1 noundef zeroext true)
          to label %1200 unwind label %1205

1200:                                             ; preds = %1198
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA15_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %126, ptr noundef nonnull align 1 dereferenceable(8) @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %127, ptr noundef nonnull align 1 dereferenceable(15) @.str.1239, ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull align 1 dereferenceable(15) @.str.1240)
          to label %1201 unwind label %1207

1201:                                             ; preds = %1200
  %1202 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 8 dereferenceable(32) %126) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %128) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %127) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %126) #7
  br label %1258

1203:                                             ; preds = %1196
  %1204 = landingpad { ptr, i32 }
          cleanup
  br label %1210

1205:                                             ; preds = %1198
  %1206 = landingpad { ptr, i32 }
          cleanup
  br label %1209

1207:                                             ; preds = %1200
  %1208 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #7
  br label %1209

1209:                                             ; preds = %1207, %1205
  %.pn537 = phi { ptr, i32 } [ %1208, %1207 ], [ %1206, %1205 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %128) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #7
  br label %1210

1210:                                             ; preds = %1209, %1203
  %.pn537.pn = phi { ptr, i32 } [ %.pn537, %1209 ], [ %1204, %1203 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %127) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %126) #7
  br label %1275

1211:                                             ; preds = %1178
  %1212 = load i8, ptr %1157, align 1, !tbaa !223, !range !35, !noundef !36
  %1213 = trunc nuw i8 %1212 to i1
  br i1 %1213, label %1214, label %1230

1214:                                             ; preds = %1211
  %1215 = getelementptr inbounds i8, ptr %1, i64 10142
  %1216 = load i8, ptr %1215, align 2, !tbaa !224, !range !35, !noundef !36
  %1217 = trunc nuw i8 %1216 to i1
  br i1 %1217, label %1218, label %1230

1218:                                             ; preds = %1214
  %1219 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull @.str.1237)
          to label %1220 unwind label %1187

1220:                                             ; preds = %1218
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %129) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %130) #7
  %1221 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %130, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1221, i1 noundef zeroext true)
          to label %1222 unwind label %1225

1222:                                             ; preds = %1220
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %129, ptr noundef nonnull align 1 dereferenceable(8) @.str.1214, ptr noundef nonnull align 8 dereferenceable(32) %130, ptr noundef nonnull align 1 dereferenceable(14) @.str.1241)
          to label %1223 unwind label %1227

1223:                                             ; preds = %1222
  %1224 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 8 dereferenceable(32) %129) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %130) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %129) #7
  br label %1258

1225:                                             ; preds = %1220
  %1226 = landingpad { ptr, i32 }
          cleanup
  br label %1229

1227:                                             ; preds = %1222
  %1228 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #7
  br label %1229

1229:                                             ; preds = %1227, %1225
  %.pn535 = phi { ptr, i32 } [ %1228, %1227 ], [ %1226, %1225 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %130) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %129) #7
  br label %1275

1230:                                             ; preds = %1214, %1211
  %1231 = getelementptr inbounds i8, ptr %1, i64 10170
  %1232 = load i8, ptr %1231, align 2, !tbaa !229, !range !35, !noundef !36
  %1233 = trunc nuw i8 %1232 to i1
  br i1 %1233, label %1234, label %1242

1234:                                             ; preds = %1230
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 12)
          to label %1235 unwind label %1187

1235:                                             ; preds = %1234
  %1236 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull @.str.1242)
          to label %1237 unwind label %1187

1237:                                             ; preds = %1235
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %131) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %131, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.55)
          to label %1238 unwind label %1240

1238:                                             ; preds = %1237
  %1239 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull align 8 dereferenceable(32) %131) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %131) #7
  br label %1244

1240:                                             ; preds = %1237
  %1241 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %131) #7
  br label %1275

1242:                                             ; preds = %1230
  %1243 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull @.str.1243)
          to label %1244 unwind label %1187

1244:                                             ; preds = %1242, %1238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %132) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %133) #7
  %1245 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %133, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1245, i1 noundef zeroext true)
          to label %1246 unwind label %1249

1246:                                             ; preds = %1244
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %132, ptr noundef nonnull align 1 dereferenceable(8) @.str.1244, ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 1 dereferenceable(14) @.str.1241)
          to label %1247 unwind label %1251

1247:                                             ; preds = %1246
  %1248 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 8 dereferenceable(32) %132) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %132) #7
  br label %1258

1249:                                             ; preds = %1244
  %1250 = landingpad { ptr, i32 }
          cleanup
  br label %1253

1251:                                             ; preds = %1246
  %1252 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #7
  br label %1253

1253:                                             ; preds = %1251, %1249
  %.pn533 = phi { ptr, i32 } [ %1252, %1251 ], [ %1250, %1249 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %132) #7
  br label %1275

1254:                                             ; preds = %1178
  %1255 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull @.str.1245)
          to label %1256 unwind label %1187

1256:                                             ; preds = %1254
  %1257 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull @.str.1246)
          to label %1258 unwind label %1187

1258:                                             ; preds = %1256, %1223, %1247, %1201, %1185
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %134) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %135) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2, i1 noundef zeroext true)
          to label %1259 unwind label %1264

1259:                                             ; preds = %1258
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %136) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %136, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2, i1 noundef zeroext true)
          to label %1260 unwind label %1266

1260:                                             ; preds = %1259
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA6_S1_S9_RA11_S1_SA_RA8_S1_S9_SG_SA_SC_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull align 1 dereferenceable(6) @.str.1247, ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 1 dereferenceable(11) @.str.1248, ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 1 dereferenceable(8) @.str.1249, ptr noundef nonnull align 8 dereferenceable(32) %136, ptr noundef nonnull align 1 dereferenceable(11) @.str.1248, ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1261 unwind label %1268

1261:                                             ; preds = %1260
  %1262 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %134)
          to label %1263 unwind label %1270

1263:                                             ; preds = %1261
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %136) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %134) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %123) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %122) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %121) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %120) #7
  br label %.thread624

1264:                                             ; preds = %1258
  %1265 = landingpad { ptr, i32 }
          cleanup
  br label %1274

1266:                                             ; preds = %1259
  %1267 = landingpad { ptr, i32 }
          cleanup
  br label %1273

1268:                                             ; preds = %1260
  %1269 = landingpad { ptr, i32 }
          cleanup
  br label %1272

1270:                                             ; preds = %1261
  %1271 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #7
  br label %1272

1272:                                             ; preds = %1270, %1268
  %.pn542 = phi { ptr, i32 } [ %1271, %1270 ], [ %1269, %1268 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #7
  br label %1273

1273:                                             ; preds = %1272, %1266
  %.pn542.pn = phi { ptr, i32 } [ %.pn542, %1272 ], [ %1267, %1266 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %136) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #7
  br label %1274

1274:                                             ; preds = %1273, %1264
  %.pn542.pn.pn = phi { ptr, i32 } [ %.pn542.pn, %1273 ], [ %1265, %1264 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %134) #7
  br label %1275

1275:                                             ; preds = %1274, %1253, %1240, %1229, %1210, %1193, %1187, %1176
  %.pn542.pn.pn.pn = phi { ptr, i32 } [ %.pn542.pn.pn, %1274 ], [ %1188, %1187 ], [ %.pn535, %1229 ], [ %.pn533, %1253 ], [ %1241, %1240 ], [ %.pn537.pn, %1210 ], [ %.pn540, %1193 ], [ %1177, %1176 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %123) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %122) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %121) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %120) #7
  br label %1590

1276:                                             ; preds = %1156, %1150
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %137) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %138) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %139) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %139, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2, i1 noundef zeroext true)
          to label %1277 unwind label %1282

1277:                                             ; preds = %1276
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull @.str.1250, ptr noundef nonnull align 8 dereferenceable(32) %139)
          to label %1278 unwind label %1284

1278:                                             ; preds = %1277
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(32) %138, ptr noundef nonnull @.str.53)
          to label %1279 unwind label %1286

1279:                                             ; preds = %1278
  %1280 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %1281 unwind label %1288

1281:                                             ; preds = %1279
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %138) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #7
  br label %.thread624

1282:                                             ; preds = %1276
  %1283 = landingpad { ptr, i32 }
          cleanup
  br label %1292

1284:                                             ; preds = %1277
  %1285 = landingpad { ptr, i32 }
          cleanup
  br label %1291

1286:                                             ; preds = %1278
  %1287 = landingpad { ptr, i32 }
          cleanup
  br label %1290

1288:                                             ; preds = %1279
  %1289 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #7
  br label %1290

1290:                                             ; preds = %1288, %1286
  %.pn528 = phi { ptr, i32 } [ %1289, %1288 ], [ %1287, %1286 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #7
  br label %1291

1291:                                             ; preds = %1290, %1284
  %.pn528.pn = phi { ptr, i32 } [ %.pn528, %1290 ], [ %1285, %1284 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #7
  br label %1292

1292:                                             ; preds = %1291, %1282
  %.pn528.pn.pn = phi { ptr, i32 } [ %.pn528.pn, %1291 ], [ %1283, %1282 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %138) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #7
  br label %1590

1293:                                             ; preds = %1122
  %1294 = load i8, ptr %674, align 8, !tbaa !199, !range !35, !noundef !36
  %1295 = trunc nuw i8 %1294 to i1
  br i1 %1295, label %1296, label %.thread624

1296:                                             ; preds = %1293
  %1297 = load i32, ptr %382, align 4, !tbaa !204
  switch i32 %1297, label %.thread626 [
    i32 0, label %1298
    i32 5, label %.thread624
  ]

1298:                                             ; preds = %1296
  %1299 = getelementptr inbounds i8, ptr %1, i64 10127
  %1300 = load i8, ptr %1299, align 1, !tbaa !218, !range !35, !noundef !36
  %1301 = trunc nuw i8 %1300 to i1
  br i1 %1301, label %.thread626, label %.thread624

.thread626:                                       ; preds = %1296, %1298
  %1302 = getelementptr inbounds i8, ptr %165, i64 258
  %1303 = load i8, ptr %1302, align 2, !tbaa !230, !range !35, !noundef !36
  %1304 = trunc nuw i8 %1303 to i1
  br i1 %1304, label %.thread624, label %1305

1305:                                             ; preds = %.thread626
  %1306 = getelementptr inbounds i8, ptr %165, i64 260
  %1307 = load i32, ptr %1306, align 4, !tbaa !231
  %.not526 = icmp eq i32 %1307, 2
  br i1 %.not526, label %.thread624, label %1308

1308:                                             ; preds = %1305
  %1309 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1251)
          to label %.thread624 unwind label %429

.thread624:                                       ; preds = %1296, %1126, %1293, %1298, %.thread626, %1305, %1308, %1141, %1281, %1263
  %.5.in = phi i1 [ %1134, %1141 ], [ %1134, %1263 ], [ %1134, %1281 ], [ %.4.in, %1293 ], [ %.4.in, %.thread626 ], [ %.4.in, %1308 ], [ %.4.in, %1305 ], [ %.4.in, %1298 ], [ %.4.in, %1126 ], [ %.4.in, %1296 ]
  %1310 = icmp ne i32 %.2207, 0
  %1311 = icmp ne i32 %.2210, 0
  %or.cond7 = select i1 %1310, i1 true, i1 %1311
  br i1 %or.cond7, label %1312, label %1370

1312:                                             ; preds = %.thread624
  %1313 = load i32, ptr %382, align 4, !tbaa !204
  %.not550 = icmp eq i32 %1313, 0
  br i1 %.not550, label %1314, label %1318

1314:                                             ; preds = %1312
  %1315 = getelementptr inbounds i8, ptr %1, i64 10127
  %1316 = load i8, ptr %1315, align 1, !tbaa !218, !range !35, !noundef !36
  %1317 = trunc nuw i8 %1316 to i1
  br i1 %1317, label %1318, label %1370

1318:                                             ; preds = %1314, %1312
  br i1 %.5.in, label %1319, label %.critedge

1319:                                             ; preds = %1318
  %1320 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2207)
          to label %1321 unwind label %429

1321:                                             ; preds = %1319
  br i1 %1320, label %1322, label %.critedge

1322:                                             ; preds = %1321
  %1323 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2210)
          to label %.critedge unwind label %429

.critedge:                                        ; preds = %1318, %1322, %1321
  %1324 = phi i1 [ false, %1321 ], [ %1323, %1322 ], [ false, %1318 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %140) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %141) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #7
  %1325 = load i32, ptr %382, align 4, !tbaa !204
  switch i32 %1325, label %1349 [
    i32 0, label %1326
    i32 1, label %1326
    i32 2, label %.invoke636
    i32 3, label %1329
  ]

1326:                                             ; preds = %.critedge, %.critedge
  br label %.invoke636

1327:                                             ; preds = %.invoke636, %1342, %1341
  %1328 = landingpad { ptr, i32 }
          cleanup
  br label %1369

1329:                                             ; preds = %.critedge
  %1330 = getelementptr inbounds i8, ptr %165, i64 257
  %1331 = load i8, ptr %1330, align 1, !tbaa !223, !range !35, !noundef !36
  %1332 = trunc nuw i8 %1331 to i1
  br i1 %1332, label %1333, label %1337

1333:                                             ; preds = %1329
  %1334 = getelementptr inbounds i8, ptr %1, i64 10142
  %1335 = load i8, ptr %1334, align 2, !tbaa !224, !range !35, !noundef !36
  %1336 = trunc nuw i8 %1335 to i1
  br i1 %1336, label %.invoke636, label %1337

1337:                                             ; preds = %1333, %1329
  %1338 = getelementptr inbounds i8, ptr %1, i64 10170
  %1339 = load i8, ptr %1338, align 2, !tbaa !229, !range !35, !noundef !36
  %1340 = trunc nuw i8 %1339 to i1
  br i1 %1340, label %1341, label %.invoke636

1341:                                             ; preds = %1337
  invoke void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %1, i8 noundef zeroext 12)
          to label %1342 unwind label %1327

1342:                                             ; preds = %1341
  %1343 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %140, ptr noundef nonnull @.str.1242)
          to label %1344 unwind label %1327

1344:                                             ; preds = %1342
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %142) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %142, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.55)
          to label %1345 unwind label %1347

1345:                                             ; preds = %1344
  %1346 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %141, ptr noundef nonnull align 8 dereferenceable(32) %142) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %142) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %142) #7
  br label %1352

1347:                                             ; preds = %1344
  %1348 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %142) #7
  br label %1369

1349:                                             ; preds = %.critedge
  br label %.invoke636

.invoke636:                                       ; preds = %1337, %1333, %.critedge, %1326, %1349
  %1350 = phi ptr [ @.str.1245, %1349 ], [ @.str.1237, %1326 ], [ @.str.1252, %.critedge ], [ @.str.1237, %1333 ], [ @.str.1243, %1337 ]
  %1351 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %140, ptr noundef nonnull %1350)
          to label %1352 unwind label %1327

1352:                                             ; preds = %.invoke636, %1345
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %143) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %144) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %144, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2207, i1 noundef zeroext true)
          to label %1353 unwind label %1358

1353:                                             ; preds = %1352
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %145) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %145, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %.2210, i1 noundef zeroext true)
          to label %1354 unwind label %1360

1354:                                             ; preds = %1353
  invoke void @_ZN11spirv_cross4joinIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_S9_S3_S9_SC_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %143, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %140, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %141, ptr noundef nonnull align 8 dereferenceable(32) %144, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1355 unwind label %1362

1355:                                             ; preds = %1354
  %1356 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %143)
          to label %1357 unwind label %1364

1357:                                             ; preds = %1355
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %144) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %143) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %141) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %140) #7
  br label %1370

1358:                                             ; preds = %1352
  %1359 = landingpad { ptr, i32 }
          cleanup
  br label %1368

1360:                                             ; preds = %1353
  %1361 = landingpad { ptr, i32 }
          cleanup
  br label %1367

1362:                                             ; preds = %1354
  %1363 = landingpad { ptr, i32 }
          cleanup
  br label %1366

1364:                                             ; preds = %1355
  %1365 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #7
  br label %1366

1366:                                             ; preds = %1364, %1362
  %.pn551 = phi { ptr, i32 } [ %1365, %1364 ], [ %1363, %1362 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #7
  br label %1367

1367:                                             ; preds = %1366, %1360
  %.pn551.pn = phi { ptr, i32 } [ %.pn551, %1366 ], [ %1361, %1360 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #7
  br label %1368

1368:                                             ; preds = %1367, %1358
  %.pn551.pn.pn = phi { ptr, i32 } [ %.pn551.pn, %1367 ], [ %1359, %1358 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %144) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %143) #7
  br label %1369

1369:                                             ; preds = %1368, %1347, %1327
  %.pn551.pn.pn.pn = phi { ptr, i32 } [ %.pn551.pn.pn, %1368 ], [ %1328, %1327 ], [ %1348, %1347 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %141) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %140) #7
  br label %1590

1370:                                             ; preds = %.thread624, %1357, %1314
  %.6.in = phi i1 [ %1324, %1357 ], [ %.5.in, %1314 ], [ %.5.in, %.thread624 ]
  %1371 = getelementptr inbounds i8, ptr %2, i64 68
  %1372 = load i32, ptr %1371, align 4, !tbaa !232
  %.not556 = icmp eq i32 %1372, 0
  br i1 %.not556, label %1404, label %1373

1373:                                             ; preds = %1370
  %1374 = getelementptr inbounds i8, ptr %1, i64 10036
  %1375 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1374, i32 noundef 2, i32 noundef 2, i32 noundef 0)
  br i1 %1375, label %1381, label %1376

1376:                                             ; preds = %1373
  %1377 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1377, ptr noundef nonnull @.str.1253)
          to label %.invoke unwind label %1379

.invoke:                                          ; preds = %1376, %1164
  %1378 = phi ptr [ %1165, %1164 ], [ %1377, %1376 ]
  invoke void @__cxa_throw(ptr nonnull %1378, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %429

.cont:                                            ; preds = %.invoke
  unreachable

1379:                                             ; preds = %1376
  %1380 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1377) #7
  br label %1590

1381:                                             ; preds = %1373
  br i1 %.6.in, label %1382, label %1385

1382:                                             ; preds = %1381
  %1383 = load i32, ptr %1371, align 4, !tbaa !232
  %1384 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1383)
          to label %1385 unwind label %429

1385:                                             ; preds = %1382, %1381
  %1386 = phi i1 [ false, %1381 ], [ %1384, %1382 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %146) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %147) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %148) #7
  %1387 = load i32, ptr %1371, align 4, !tbaa !232
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %148, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1387, i1 noundef zeroext true)
          to label %1388 unwind label %1393

1388:                                             ; preds = %1385
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %147, ptr noundef nonnull @.str.1254, ptr noundef nonnull align 8 dereferenceable(32) %148)
          to label %1389 unwind label %1395

1389:                                             ; preds = %1388
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %146, ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull @.str.53)
          to label %1390 unwind label %1397

1390:                                             ; preds = %1389
  %1391 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %146)
          to label %1392 unwind label %1399

1392:                                             ; preds = %1390
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %146) #7
  br label %1404

1393:                                             ; preds = %1385
  %1394 = landingpad { ptr, i32 }
          cleanup
  br label %1403

1395:                                             ; preds = %1388
  %1396 = landingpad { ptr, i32 }
          cleanup
  br label %1402

1397:                                             ; preds = %1389
  %1398 = landingpad { ptr, i32 }
          cleanup
  br label %1401

1399:                                             ; preds = %1390
  %1400 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #7
  br label %1401

1401:                                             ; preds = %1399, %1397
  %.pn557 = phi { ptr, i32 } [ %1400, %1399 ], [ %1398, %1397 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #7
  br label %1402

1402:                                             ; preds = %1401, %1395
  %.pn557.pn = phi { ptr, i32 } [ %.pn557, %1401 ], [ %1396, %1395 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #7
  br label %1403

1403:                                             ; preds = %1402, %1393
  %.pn557.pn.pn = phi { ptr, i32 } [ %.pn557.pn, %1402 ], [ %1394, %1393 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %146) #7
  br label %1590

1404:                                             ; preds = %1392, %1370
  %.7.in = phi i1 [ %1386, %1392 ], [ %.6.in, %1370 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %149) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  %1405 = getelementptr inbounds i8, ptr %2, i64 48
  %1406 = load i32, ptr %1405, align 8, !tbaa !201
  %.not561 = icmp eq i32 %1406, 0
  br i1 %.not561, label %1428, label %1407

1407:                                             ; preds = %1404
  %1408 = load i8, ptr %674, align 8, !tbaa !199, !range !35, !noundef !36
  %1409 = trunc nuw i8 %1408 to i1
  br i1 %1409, label %1428, label %1410

1410:                                             ; preds = %1407
  %1411 = getelementptr inbounds i8, ptr %2, i64 73
  %1412 = load i8, ptr %1411, align 1, !tbaa !198, !range !35, !noundef !36
  %1413 = trunc nuw i8 %1412 to i1
  br i1 %1413, label %1428, label %1414

1414:                                             ; preds = %1410
  br i1 %.7.in, label %1415, label %1417

1415:                                             ; preds = %1414
  %1416 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1406)
          to label %._crit_edge633 unwind label %1424

._crit_edge633:                                   ; preds = %1415
  %.pre634 = load i32, ptr %1405, align 8, !tbaa !201
  br label %1417

1417:                                             ; preds = %._crit_edge633, %1414
  %1418 = phi i32 [ %1406, %1414 ], [ %.pre634, %._crit_edge633 ]
  %1419 = phi i1 [ false, %1414 ], [ %1416, %._crit_edge633 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %150) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %150, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1418, i1 noundef zeroext true)
          to label %1420 unwind label %1426

1420:                                             ; preds = %1417
  %1421 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 8 dereferenceable(32) %150) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %150) #7
  %1422 = load i32, ptr %1405, align 8, !tbaa !201
  %1423 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1422)
          to label %1428 unwind label %1424

1424:                                             ; preds = %1574, %1572, %1521, %1514, %1420, %1415
  %1425 = landingpad { ptr, i32 }
          cleanup
  br label %1589

1426:                                             ; preds = %1417
  %1427 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %150) #7
  br label %1589

1428:                                             ; preds = %1420, %1410, %1407, %1404
  %.8.in = phi i1 [ %.7.in, %1407 ], [ %.7.in, %1410 ], [ %.7.in, %1404 ], [ %1419, %1420 ]
  %.0214 = phi ptr [ null, %1407 ], [ null, %1410 ], [ null, %1404 ], [ %1423, %1420 ]
  %1429 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  br i1 %1429, label %1502, label %1430

1430:                                             ; preds = %1428
  %1431 = load i32, ptr %382, align 4, !tbaa !204
  switch i32 %1431, label %1502 [
    i32 0, label %1432
    i32 1, label %1458
    i32 2, label %1480
  ]

1432:                                             ; preds = %1430
  %1433 = getelementptr inbounds i8, ptr %1, i64 10127
  %1434 = load i8, ptr %1433, align 1, !tbaa !218, !range !35, !noundef !36
  %1435 = trunc nuw i8 %1434 to i1
  br i1 %1435, label %1436, label %1502

1436:                                             ; preds = %1432
  %1437 = getelementptr inbounds i8, ptr %.0214, i64 24
  %1438 = load i32, ptr %1437, align 8, !tbaa !217
  %1439 = icmp ugt i32 %1438, 1
  br i1 %1439, label %1440, label %1449

1440:                                             ; preds = %1436
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %151) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %152) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %152, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1441 unwind label %1444

1441:                                             ; preds = %1440
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %151, ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef nonnull @.str.163)
          to label %1442 unwind label %1446

1442:                                             ; preds = %1441
  %1443 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 8 dereferenceable(32) %151) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %151) #7
  br label %1449

1444:                                             ; preds = %1440
  %1445 = landingpad { ptr, i32 }
          cleanup
  br label %1448

1446:                                             ; preds = %1441
  %1447 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #7
  br label %1448

1448:                                             ; preds = %1446, %1444
  %.pn570 = phi { ptr, i32 } [ %1447, %1446 ], [ %1445, %1444 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %151) #7
  br label %1589

1449:                                             ; preds = %1442, %1436
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %153) #7
  invoke void @_ZN11spirv_cross4joinIJRA8_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 1 dereferenceable(8) @.str.1255, ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 1 dereferenceable(5) @.str.1116)
          to label %1450 unwind label %1453

1450:                                             ; preds = %1449
  %1451 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %153)
          to label %1452 unwind label %1455

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

1453:                                             ; preds = %1449
  %1454 = landingpad { ptr, i32 }
          cleanup
  br label %1457

1455:                                             ; preds = %1450
  %1456 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #7
  br label %1457

1457:                                             ; preds = %1455, %1453
  %.pn572 = phi { ptr, i32 } [ %1456, %1455 ], [ %1454, %1453 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %153) #7
  br label %1589

1458:                                             ; preds = %1430
  %1459 = getelementptr inbounds i8, ptr %.0214, i64 24
  %1460 = load i32, ptr %1459, align 8, !tbaa !217
  %1461 = icmp ugt i32 %1460, 2
  br i1 %1461, label %1462, label %1471

1462:                                             ; preds = %1458
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %154) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %155) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %155, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1463 unwind label %1466

1463:                                             ; preds = %1462
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %154, ptr noundef nonnull align 8 dereferenceable(32) %155, ptr noundef nonnull @.str.164)
          to label %1464 unwind label %1468

1464:                                             ; preds = %1463
  %1465 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 8 dereferenceable(32) %154) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %155) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %154) #7
  br label %1471

1466:                                             ; preds = %1462
  %1467 = landingpad { ptr, i32 }
          cleanup
  br label %1470

1468:                                             ; preds = %1463
  %1469 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #7
  br label %1470

1470:                                             ; preds = %1468, %1466
  %.pn566 = phi { ptr, i32 } [ %1469, %1468 ], [ %1467, %1466 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %155) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %154) #7
  br label %1589

1471:                                             ; preds = %1464, %1458
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %156) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %156, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1472 unwind label %1475

1472:                                             ; preds = %1471
  %1473 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %156)
          to label %1474 unwind label %1477

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

1475:                                             ; preds = %1471
  %1476 = landingpad { ptr, i32 }
          cleanup
  br label %1479

1477:                                             ; preds = %1472
  %1478 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #7
  br label %1479

1479:                                             ; preds = %1477, %1475
  %.pn568 = phi { ptr, i32 } [ %1478, %1477 ], [ %1476, %1475 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %156) #7
  br label %1589

1480:                                             ; preds = %1430
  %1481 = getelementptr inbounds i8, ptr %.0214, i64 24
  %1482 = load i32, ptr %1481, align 8, !tbaa !217
  %1483 = icmp ugt i32 %1482, 3
  br i1 %1483, label %1484, label %1493

1484:                                             ; preds = %1480
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %157) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %158) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %158, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1485 unwind label %1488

1485:                                             ; preds = %1484
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %157, ptr noundef nonnull align 8 dereferenceable(32) %158, ptr noundef nonnull @.str.165)
          to label %1486 unwind label %1490

1486:                                             ; preds = %1485
  %1487 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 8 dereferenceable(32) %157) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %158) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #7
  br label %1493

1488:                                             ; preds = %1484
  %1489 = landingpad { ptr, i32 }
          cleanup
  br label %1492

1490:                                             ; preds = %1485
  %1491 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #7
  br label %1492

1492:                                             ; preds = %1490, %1488
  %.pn562 = phi { ptr, i32 } [ %1491, %1490 ], [ %1489, %1488 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %158) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #7
  br label %1589

1493:                                             ; preds = %1486, %1480
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %159) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %159, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1494 unwind label %1497

1494:                                             ; preds = %1493
  %1495 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %159)
          to label %1496 unwind label %1499

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

1497:                                             ; preds = %1493
  %1498 = landingpad { ptr, i32 }
          cleanup
  br label %1501

1499:                                             ; preds = %1494
  %1500 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #7
  br label %1501

1501:                                             ; preds = %1499, %1497
  %.pn564 = phi { ptr, i32 } [ %1500, %1499 ], [ %1498, %1497 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %159) #7
  br label %1589

1502:                                             ; preds = %1452, %1474, %1496, %1432, %1430, %1428
  %1503 = getelementptr inbounds i8, ptr %2, i64 56
  %1504 = load i32, ptr %1503, align 8, !tbaa !202
  %.not574 = icmp eq i32 %1504, 0
  br i1 %.not574, label %1568, label %1505

1505:                                             ; preds = %1502
  %1506 = getelementptr inbounds i8, ptr %2, i64 73
  %1507 = load i8, ptr %1506, align 1, !tbaa !198, !range !35, !noundef !36
  %1508 = trunc nuw i8 %1507 to i1
  br i1 %1508, label %1568, label %1509

1509:                                             ; preds = %1505
  %1510 = load i32, ptr %382, align 4, !tbaa !204
  %1511 = icmp eq i32 %1510, 1
  br i1 %1511, label %1512, label %1516

1512:                                             ; preds = %1509
  %1513 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  br i1 %1513, label %1514, label %1516

1514:                                             ; preds = %1512
  %1515 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1256)
          to label %1516 unwind label %1424

1516:                                             ; preds = %1514, %1512, %1509
  %1517 = getelementptr inbounds i8, ptr %1, i64 10121
  %1518 = load i8, ptr %1517, align 1, !tbaa !37, !range !35, !noundef !36
  %1519 = trunc nuw i8 %1518 to i1
  %.not597 = xor i1 %1519, true
  %brmerge598 = or i1 %.0218602622, %.not597
  br i1 %brmerge598, label %1520, label %1568

1520:                                             ; preds = %1516
  br i1 %.8.in, label %1521, label %1524

1521:                                             ; preds = %1520
  %1522 = load i32, ptr %1503, align 8, !tbaa !202
  %1523 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1522)
          to label %1524 unwind label %1424

1524:                                             ; preds = %1521, %1520
  %1525 = phi i1 [ false, %1520 ], [ %1523, %1521 ]
  %1526 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %1527 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1526)
          to label %1528 unwind label %1534

1528:                                             ; preds = %1524
  %.not575 = icmp eq ptr %1527, null
  br i1 %.not575, label %1538, label %1529

1529:                                             ; preds = %1528
  %1530 = getelementptr inbounds i8, ptr %1527, i64 16
  %1531 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1530)
  %1532 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1531)
          to label %1533 unwind label %1536

1533:                                             ; preds = %1529
  %.not579 = icmp eq ptr %1532, null
  br i1 %.not579, label %.thread628, label %1544

1534:                                             ; preds = %1524
  %1535 = landingpad { ptr, i32 }
          cleanup
  br label %1589

1536:                                             ; preds = %1529
  %1537 = landingpad { ptr, i32 }
          cleanup
  br label %1589

1538:                                             ; preds = %1528
  %1539 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %1540 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1539)
          to label %1541 unwind label %1542

1541:                                             ; preds = %1538
  %.not576 = icmp eq ptr %1540, null
  br i1 %.not576, label %.thread628, label %1544

1542:                                             ; preds = %1538
  %1543 = landingpad { ptr, i32 }
          cleanup
  br label %1589

1544:                                             ; preds = %1541, %1533
  %.sink637 = phi ptr [ %1532, %1533 ], [ %1540, %1541 ]
  %1545 = getelementptr inbounds i8, ptr %.sink637, i64 8
  %1546 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1545)
  %1547 = icmp eq i32 %1546, 0
  br i1 %1547, label %.thread628, label %1548

1548:                                             ; preds = %1544
  %1549 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1546)
          to label %1550 unwind label %1558

1550:                                             ; preds = %1548
  %1551 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %1549, i32 noundef %1546)
          to label %1552 unwind label %1558

1552:                                             ; preds = %1550
  br i1 %1551, label %1568, label %.thread628

.thread628:                                       ; preds = %1541, %1533, %1552, %1544
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %160) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %161) #7
  %1553 = load i32, ptr %1503, align 8, !tbaa !202
  invoke void @_ZN11spirv_cross11CompilerMSL21to_component_argumentB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %161, ptr noundef nonnull align 8 dereferenceable(12482) %1, i32 noundef %1553)
          to label %1554 unwind label %1560

1554:                                             ; preds = %.thread628
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %160, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %161)
          to label %1555 unwind label %1562

1555:                                             ; preds = %1554
  %1556 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %160)
          to label %1557 unwind label %1564

1557:                                             ; preds = %1555
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %161) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %160) #7
  br label %1568

1558:                                             ; preds = %1550, %1548
  %1559 = landingpad { ptr, i32 }
          cleanup
  br label %1589

1560:                                             ; preds = %.thread628
  %1561 = landingpad { ptr, i32 }
          cleanup
  br label %1567

1562:                                             ; preds = %1554
  %1563 = landingpad { ptr, i32 }
          cleanup
  br label %1566

1564:                                             ; preds = %1555
  %1565 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #7
  br label %1566

1566:                                             ; preds = %1564, %1562
  %.pn580 = phi { ptr, i32 } [ %1565, %1564 ], [ %1563, %1562 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #7
  br label %1567

1567:                                             ; preds = %1566, %1560
  %.pn580.pn = phi { ptr, i32 } [ %.pn580, %1566 ], [ %1561, %1560 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %161) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %160) #7
  br label %1589

1568:                                             ; preds = %1552, %1557, %1516, %1505, %1502
  %.9.in = phi i1 [ %.8.in, %1505 ], [ %.8.in, %1502 ], [ %.8.in, %1516 ], [ %1525, %1557 ], [ %1525, %1552 ]
  %1569 = getelementptr inbounds i8, ptr %2, i64 60
  %1570 = load i32, ptr %1569, align 4, !tbaa !233
  %.not584 = icmp eq i32 %1570, 0
  br i1 %.not584, label %1587, label %1571

1571:                                             ; preds = %1568
  br i1 %.9.in, label %1572, label %1574

1572:                                             ; preds = %1571
  %1573 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1570)
          to label %1574 unwind label %1424

1574:                                             ; preds = %1572, %1571
  %1575 = phi i1 [ false, %1571 ], [ %1573, %1572 ]
  %1576 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.55)
          to label %1577 unwind label %1424

1577:                                             ; preds = %1574
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %162) #7
  %1578 = load i32, ptr %1569, align 4, !tbaa !233
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %162, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1578, i1 noundef zeroext true)
          to label %1579 unwind label %1582

1579:                                             ; preds = %1577
  %1580 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %162)
          to label %1581 unwind label %1584

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

1582:                                             ; preds = %1577
  %1583 = landingpad { ptr, i32 }
          cleanup
  br label %1586

1584:                                             ; preds = %1579
  %1585 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #7
  br label %1586

1586:                                             ; preds = %1584, %1582
  %.pn585 = phi { ptr, i32 } [ %1585, %1584 ], [ %1583, %1582 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #7
  br label %1589

1587:                                             ; preds = %1581, %1568
  %.10.in = phi i1 [ %1575, %1581 ], [ %.9.in, %1568 ]
  %1588 = zext i1 %.10.in to i8
  store i8 %1588, ptr %3, align 1, !tbaa !234
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %149) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  ret void

1589:                                             ; preds = %1558, %1567, %1542, %1536, %1534, %1586, %1501, %1492, %1479, %1470, %1457, %1448, %1426, %1424
  %.pn585.pn = phi { ptr, i32 } [ %.pn585, %1586 ], [ %1425, %1424 ], [ %.pn564, %1501 ], [ %.pn562, %1492 ], [ %.pn568, %1479 ], [ %.pn566, %1470 ], [ %.pn572, %1457 ], [ %.pn570, %1448 ], [ %1427, %1426 ], [ %.pn580.pn, %1567 ], [ %1559, %1558 ], [ %1537, %1536 ], [ %1543, %1542 ], [ %1535, %1534 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %149) #7
  br label %1590

1590:                                             ; preds = %1016, %1093, %703, %712, %726, %743, %757, %1589, %1403, %1379, %1369, %1292, %1275, %1166, %1149, %1121, %977, %949, %921, %899, %872, %842, %831, %795, %781, %671, %665, %652, %628, %622, %601, %587, %581, %560, %545, %515, %491, %470, %457, %448, %431, %429, %423, %402
  %.pn585.pn.pn = phi { ptr, i32 } [ %.pn585.pn, %1589 ], [ %.pn557.pn.pn, %1403 ], [ %430, %429 ], [ %1380, %1379 ], [ %.pn551.pn.pn.pn, %1369 ], [ %.pn547.pn, %1149 ], [ %.pn542.pn.pn.pn, %1275 ], [ %1167, %1166 ], [ %.pn528.pn.pn, %1292 ], [ %.pn519.pn.pn, %1121 ], [ %.pn503.pn.pn, %842 ], [ %.pn496.pn.pn.pn.pn.pn, %872 ], [ %.pn493.pn, %831 ], [ %.pn489.pn.pn, %949 ], [ %.pn484.pn.pn.pn, %977 ], [ %.pn480.pn.pn, %899 ], [ %.pn475.pn.pn.pn, %921 ], [ %.pn471.pn.pn, %781 ], [ %.pn468.pn, %795 ], [ %672, %671 ], [ %.pn408.pn.pn, %652 ], [ %.pn406, %665 ], [ %.pn414.pn.pn, %622 ], [ %629, %628 ], [ %.pn412, %601 ], [ %.pn420.pn.pn, %581 ], [ %588, %587 ], [ %.pn418, %560 ], [ %.pn438.pn.pn, %491 ], [ %.pn434.pn.pn, %515 ], [ %.pn427.pn.pn.pn.pn.pn, %545 ], [ %.pn424, %470 ], [ %.pn450, %448 ], [ %.pn448, %457 ], [ %.pn444.pn.pn, %423 ], [ %432, %431 ], [ %.pn442, %402 ], [ %.pn464.pn, %712 ], [ %.pn461.pn, %726 ], [ %.pn457.pn, %743 ], [ %.pn454.pn, %757 ], [ %704, %703 ], [ %.pn514, %1093 ], [ %1017, %1016 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %1591

1591:                                             ; preds = %1590, %388
  %.pn585.pn.pn.pn = phi { ptr, i32 } [ %.pn585.pn.pn, %1590 ], [ %389, %388 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %1592

1592:                                             ; preds = %1591, %386
  %.pn585.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn585.pn.pn.pn, %1591 ], [ %387, %386 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  br label %1593

1593:                                             ; preds = %1592, %384
  %.pn585.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn585.pn.pn.pn.pn, %1592 ], [ %385, %384 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  br label %1594

1594:                                             ; preds = %248, %254, %1593, %366, %336, %314, %286, %268, %225, %207, %201
  %.pn585.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn585.pn.pn.pn.pn.pn, %1593 ], [ %202, %201 ], [ %.pn403.pn, %225 ], [ %.pn400.pn, %366 ], [ %.pn396.pn, %336 ], [ %.pn393.pn, %314 ], [ %.pn390, %286 ], [ %.pn388, %268 ], [ %.pn386, %207 ], [ %.pn, %254 ], [ %249, %248 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  resume { ptr, i32 } %.pn585.pn.pn.pn.pn.pn.pn

1595:                                             ; preds = %1089, %1076
  unreachable
}

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL27needs_chroma_reconstructionPKN11spirv_cross19MSLConstexprSamplerE(ptr noundef) local_unnamed_addr #0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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