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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%class.anon.568 = type { ptr, ptr, ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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] }>
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"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 }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.413", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.413", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", i32, [4 x i8] }>
%"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::SPIRBlock" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, %"class.spirv_cross::TypedID.415", %"class.spirv_cross::TypedID.415", %"class.spirv_cross::TypedID.415", %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.415", %"class.spirv_cross::TypedID.415", %"class.spirv_cross::TypedID.415", %struct.anon, %"class.spirv_cross::SmallVector.454", %"class.spirv_cross::SmallVector.457", %"class.spirv_cross::SmallVector.460", %"class.spirv_cross::SmallVector.460", %"class.spirv_cross::SmallVector.463", %"class.spirv_cross::SmallVector.463", i8, i8, i8, %"class.spirv_cross::TypedID.415", %"class.spirv_cross::TypedID.415", %"class.spirv_cross::SmallVector.419", %"class.spirv_cross::SmallVector.419", %"class.spirv_cross::SmallVector.7" }
%struct.anon = type { [3 x %"class.spirv_cross::TypedID.413"], %"class.spirv_cross::TypedID.413" }
%"class.spirv_cross::SmallVector.454" = type { %"class.spirv_cross::VectorView.455", i64, %"class.spirv_cross::AlignedBuffer.456" }
%"class.spirv_cross::VectorView.455" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.456" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.457" = type { %"class.spirv_cross::VectorView.458", i64, %"class.spirv_cross::AlignedBuffer.459" }
%"class.spirv_cross::VectorView.458" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.459" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.460" = type { %"class.spirv_cross::VectorView.461", i64, %"class.spirv_cross::AlignedBuffer.462" }
%"class.spirv_cross::VectorView.461" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.462" = type { [64 x i8] }
%"class.spirv_cross::SmallVector.463" = type { %"class.spirv_cross::VectorView.464", i64, %"class.spirv_cross::AlignedBuffer.465" }
%"class.spirv_cross::VectorView.464" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.465" = type { [128 x i8] }
%"class.spirv_cross::TypedID.415" = type { i32 }
%"class.spirv_cross::SmallVector.419" = type { %"class.spirv_cross::VectorView.420", i64, %"class.spirv_cross::AlignedBuffer.421" }
%"class.spirv_cross::VectorView.420" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.421" = type { [32 x i8] }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.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.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 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.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.945 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.946 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.947 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.948 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.949 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.950 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.951 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.952 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.953 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.954 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.955 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.956 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.957 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.958 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.959 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.961 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.962 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.963 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.964 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.966 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.967 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.969 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.970 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.971 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.972 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.973 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.974 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.977 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.978 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.979 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.980 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.981 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.982 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.983 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.984 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.985 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.986 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.987 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.988 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.989 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.990 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.991 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.992 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.993 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.994 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.995 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.996 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.997 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.998 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.999 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1000 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionE = external hidden unnamed_addr constant [77 x i8], align 1
@.str.1001 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1002 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1003 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1004 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1005 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1006 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1007 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1008 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1009 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1010 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1011 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1012 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1013 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1014 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1015 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1016 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1017 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1018 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1019 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1020 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1021 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1022 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1023 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1024 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1025 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1026 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1027 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1028 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1029 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1030 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1031 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.1032 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1033 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1034 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1035 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1036 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1037 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.1038 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1039 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1040 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1041 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1042 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1043 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1044 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1045 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1046 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1047 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1048 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1049 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1050 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1051 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1052 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1053 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1054 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1055 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1056 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1057 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1058 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1059 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1060 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1061 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1062 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1063 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1064 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1065 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1066 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1067 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1068 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1069 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1070 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1071 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1072 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1073 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1074 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1075 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1076 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1077 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1078 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1079 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1080 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1081 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.1082 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1083 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1084 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1085 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1086 = external hidden unnamed_addr constant [61 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #8

; 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 nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(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) #2 align 2

declare void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_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) #6

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

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

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

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

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

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

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

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) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(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)) #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) #2 align 2

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #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) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) #6

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

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

declare void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #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) #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) #5

declare void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #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)) #5

declare void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5

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

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

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) #5

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.spirv_cross::TypedID.413", align 4
  %13 = alloca %"class.spirv_cross::TypedID.413", align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.spirv_cross::TypedID.413", align 4
  %16 = alloca %"class.spirv_cross::TypedID.413", align 4
  %17 = alloca %"class.spirv_cross::TypedID.413", align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca ptr, align 8
  %88 = alloca ptr, align 8
  %89 = alloca %"class.spirv_cross::TypedID.413", align 4
  %90 = alloca %"class.spirv_cross::TypedID.413", align 4
  %91 = alloca %"class.spirv_cross::TypedID.413", align 4
  %92 = alloca %"class.std::__cxx11::basic_string", align 8
  %93 = alloca ptr, align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca %"class.std::__cxx11::basic_string", align 8
  %98 = alloca ptr, align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca ptr, align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca i8, align 1
  %105 = alloca %"class.spirv_cross::TypedID.413", align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca ptr, 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 i8, align 1
  %113 = alloca %"class.spirv_cross::TypedID.413", align 4
  %114 = alloca i32, align 4
  %115 = alloca i32, align 4
  %116 = alloca i32, align 4
  %117 = alloca ptr, align 8
  %118 = alloca i32, align 4
  %119 = alloca ptr, align 8
  %120 = alloca ptr, align 8
  %121 = alloca ptr, align 8
  %122 = alloca %"class.spirv_cross::TypedID.413", align 4
  %123 = alloca %"class.spirv_cross::TypedID.413", align 4
  %124 = alloca i8, align 1
  %125 = alloca i32, align 4
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca %class.anon.568, align 8
  %129 = alloca ptr, align 8
  %130 = alloca %"struct.spirv_cross::SPIRType", align 8
  %131 = alloca %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", align 8
  %132 = alloca %"class.spirv_cross::TypedID.350", align 4
  %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 i32, align 4
  %142 = alloca ptr, align 8
  %143 = alloca i32, align 4
  %144 = alloca i32, align 4
  %145 = alloca %"class.std::__cxx11::basic_string", align 8
  %146 = alloca ptr, align 8
  %147 = alloca i32, align 4
  %148 = alloca i8, align 1
  %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
  %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 i32, align 4
  %167 = alloca i32, align 4
  %168 = alloca i32, align 4
  %169 = alloca i32, align 4
  %170 = alloca %"class.std::__cxx11::basic_string", align 8
  %171 = alloca %"class.std::__cxx11::basic_string", align 8
  %172 = alloca ptr, align 8
  %173 = alloca %"class.std::__cxx11::basic_string", align 8
  %174 = alloca ptr, align 8
  %175 = alloca ptr, align 8
  %176 = alloca %"class.std::__cxx11::basic_string", 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 i32, align 4
  %183 = alloca ptr, align 8
  %184 = alloca i32, align 4
  %185 = alloca i32, align 4
  %186 = alloca %"class.std::__cxx11::basic_string", align 8
  %187 = alloca %"class.std::__cxx11::basic_string", align 8
  %188 = alloca %"class.std::__cxx11::basic_string", align 8
  %189 = alloca %"class.std::__cxx11::basic_string", align 8
  %190 = alloca %"class.std::__cxx11::basic_string", align 8
  %191 = alloca i32, align 4
  %192 = alloca ptr, align 8
  %193 = alloca i32, align 4
  %194 = alloca i32, align 4
  %195 = alloca %"class.std::__cxx11::basic_string", align 8
  %196 = alloca %"class.std::__cxx11::basic_string", align 8
  %197 = alloca %"class.std::__cxx11::basic_string", align 8
  %198 = alloca %"class.std::__cxx11::basic_string", align 8
  %199 = alloca %"class.std::__cxx11::basic_string", align 8
  %200 = alloca i32, align 4
  %201 = alloca i32, align 4
  %202 = alloca ptr, align 8
  %203 = alloca ptr, align 8
  %204 = alloca %"class.std::__cxx11::basic_string", align 8
  %205 = alloca ptr, align 8
  %206 = alloca ptr, align 8
  %207 = alloca ptr, align 8
  %208 = alloca %"class.std::__cxx11::basic_string", align 8
  %209 = alloca %"class.std::__cxx11::basic_string", align 8
  %210 = alloca %"class.std::__cxx11::basic_string", align 8
  %211 = alloca i32, align 4
  %212 = alloca i32, align 4
  %213 = alloca i32, align 4
  %214 = alloca %"class.std::__cxx11::basic_string", align 8
  %215 = alloca %"class.std::__cxx11::basic_string", align 8
  %216 = alloca ptr, align 8
  %217 = alloca i32, align 4
  %218 = alloca i32, align 4
  %219 = alloca %"class.std::__cxx11::basic_string", align 8
  %220 = alloca i32, align 4
  %221 = alloca i32, align 4
  %222 = alloca i32, align 4
  %223 = alloca i32, align 4
  %224 = alloca ptr, align 8
  %225 = alloca %"class.std::__cxx11::basic_string", align 8
  %226 = alloca i32, align 4
  %227 = alloca %"class.std::__cxx11::basic_string", align 8
  %228 = alloca %"class.std::__cxx11::basic_string", align 8
  %229 = alloca %"class.spirv_cross::TypedID.413", align 4
  %230 = alloca ptr, align 8
  %231 = alloca %"class.std::__cxx11::basic_string", align 8
  %232 = alloca %"class.std::__cxx11::basic_string", align 8
  %233 = alloca %"class.std::__cxx11::basic_string", align 8
  %234 = alloca %"class.std::__cxx11::basic_string", align 8
  %235 = alloca %"class.std::__cxx11::basic_string", align 8
  %236 = alloca %"class.std::__cxx11::basic_string", align 8
  %237 = alloca %"class.std::__cxx11::basic_string", align 8
  %238 = alloca i8, align 1
  %239 = alloca %"class.spirv_cross::TypedID.413", align 4
  %240 = alloca ptr, align 8
  %241 = alloca ptr, align 8
  %242 = alloca %"class.std::__cxx11::basic_string", align 8
  %243 = alloca %"class.std::__cxx11::basic_string", align 8
  %244 = alloca %"class.std::__cxx11::basic_string", align 8
  %245 = alloca %"class.std::__cxx11::basic_string", align 8
  %246 = alloca %"class.std::__cxx11::basic_string", align 8
  %247 = alloca i8, align 1
  %248 = alloca ptr, align 8
  %249 = alloca i32, align 4
  %250 = alloca i32, align 4
  %251 = alloca i32, align 4
  %252 = alloca i32, align 4
  %253 = alloca ptr, align 8
  %254 = alloca ptr, align 8
  %255 = alloca %"class.std::__cxx11::basic_string", align 8
  %256 = alloca %"class.std::__cxx11::basic_string", align 8
  %257 = alloca %"class.std::__cxx11::basic_string", align 8
  %258 = alloca %"class.std::__cxx11::basic_string", align 8
  %259 = alloca %"class.std::__cxx11::basic_string", align 8
  %260 = alloca %"class.std::__cxx11::basic_string", align 8
  %261 = alloca %"class.std::__cxx11::basic_string", align 8
  %262 = alloca %"class.std::__cxx11::basic_string", align 8
  %263 = alloca %"class.std::__cxx11::basic_string", align 8
  %264 = alloca %"class.std::__cxx11::basic_string", align 8
  %265 = alloca %"class.std::__cxx11::basic_string", align 8
  %266 = alloca %"class.std::__cxx11::basic_string", align 8
  %267 = alloca %"class.std::__cxx11::basic_string", align 8
  %268 = alloca %"class.std::__cxx11::basic_string", align 8
  %269 = alloca %"class.std::__cxx11::basic_string", align 8
  %270 = alloca %"class.std::__cxx11::basic_string", align 8
  %271 = alloca %"class.std::__cxx11::basic_string", align 8
  %272 = alloca %"class.std::__cxx11::basic_string", align 8
  %273 = alloca %"class.std::__cxx11::basic_string", align 8
  %274 = alloca %"class.std::__cxx11::basic_string", align 8
  %275 = alloca %"class.std::__cxx11::basic_string", align 8
  %276 = alloca %"class.std::__cxx11::basic_string", align 8
  %277 = alloca i32, align 4
  %278 = alloca i32, align 4
  %279 = alloca i32, align 4
  %280 = alloca i32, align 4
  %281 = alloca ptr, align 8
  %282 = alloca ptr, align 8
  %283 = alloca i32, align 4
  %284 = alloca %"class.std::__cxx11::basic_string", align 8
  %285 = alloca %"class.std::__cxx11::basic_string", align 8
  %286 = alloca %"struct.spirv_cross::SPIRType", align 8
  %287 = alloca %"class.std::__cxx11::basic_string", align 8
  %288 = alloca %"class.std::__cxx11::basic_string", align 8
  %289 = alloca %"class.std::__cxx11::basic_string", align 8
  %290 = alloca ptr, align 8
  %291 = alloca i32, align 4
  %292 = alloca i32, align 4
  %293 = alloca %"class.std::__cxx11::basic_string", align 8
  %294 = alloca %"class.std::__cxx11::basic_string", align 8
  %295 = alloca i32, align 4
  %296 = alloca i32, align 4
  %297 = alloca i32, align 4
  %298 = alloca i32, align 4
  %299 = alloca i8, align 1
  %300 = alloca %"class.std::__cxx11::basic_string", align 8
  %301 = alloca %"class.std::__cxx11::basic_string", align 8
  %302 = alloca %"class.std::__cxx11::basic_string", align 8
  %303 = alloca i32, align 4
  %304 = alloca i32, align 4
  %305 = alloca i32, align 4
  %306 = alloca i32, align 4
  %307 = alloca i8, align 1
  %308 = alloca %"class.std::__cxx11::basic_string", align 8
  %309 = alloca %"class.std::__cxx11::basic_string", align 8
  %310 = alloca %"class.std::__cxx11::basic_string", align 8
  %311 = alloca %"class.std::__cxx11::basic_string", align 8
  %312 = alloca %"class.std::allocator.71", align 1
  %313 = alloca i1, align 1
  %314 = alloca i1, align 1
  %315 = alloca %"class.std::__cxx11::basic_string", align 8
  %316 = alloca %"class.std::__cxx11::basic_string", align 8
  %317 = alloca %"class.std::__cxx11::basic_string", align 8
  %318 = alloca %"class.std::__cxx11::basic_string", align 8
  %319 = alloca %"class.std::__cxx11::basic_string", align 8
  %320 = alloca %"class.std::__cxx11::basic_string", align 8
  %321 = alloca %"class.std::__cxx11::basic_string", align 8
  %322 = alloca %"class.std::__cxx11::basic_string", align 8
  %323 = alloca %"class.std::__cxx11::basic_string", align 8
  %324 = alloca %"class.std::__cxx11::basic_string", align 8
  %325 = alloca %"class.std::__cxx11::basic_string", align 8
  %326 = alloca %"class.std::__cxx11::basic_string", align 8
  %327 = alloca %"class.std::__cxx11::basic_string", align 8
  %328 = alloca %"class.std::__cxx11::basic_string", align 8
  %329 = alloca %"class.std::__cxx11::basic_string", align 8
  %330 = alloca %"class.std::__cxx11::basic_string", align 8
  %331 = alloca %"class.std::__cxx11::basic_string", align 8
  %332 = alloca %"class.std::__cxx11::basic_string", align 8
  %333 = alloca %"class.std::__cxx11::basic_string", align 8
  %334 = alloca %"class.std::__cxx11::basic_string", align 8
  %335 = alloca %"class.std::__cxx11::basic_string", align 8
  %336 = alloca %"class.std::__cxx11::basic_string", align 8
  %337 = alloca %"class.std::__cxx11::basic_string", align 8
  %338 = alloca %"class.std::__cxx11::basic_string", align 8
  %339 = alloca %"class.std::__cxx11::basic_string", align 8
  %340 = alloca %"class.std::__cxx11::basic_string", align 8
  %341 = alloca %"class.std::__cxx11::basic_string", align 8
  %342 = alloca %"class.std::__cxx11::basic_string", align 8
  %343 = alloca %"class.std::__cxx11::basic_string", align 8
  %344 = alloca %"class.std::__cxx11::basic_string", align 8
  %345 = alloca %"class.std::__cxx11::basic_string", align 8
  %346 = alloca %"class.std::__cxx11::basic_string", align 8
  %347 = alloca %"class.std::__cxx11::basic_string", align 8
  %348 = alloca %"class.std::__cxx11::basic_string", align 8
  %349 = alloca %"class.std::__cxx11::basic_string", align 8
  %350 = alloca %"class.std::__cxx11::basic_string", align 8
  %351 = alloca %"class.std::__cxx11::basic_string", align 8
  %352 = alloca %"class.std::__cxx11::basic_string", align 8
  %353 = alloca %"class.std::__cxx11::basic_string", align 8
  %354 = alloca %"class.std::__cxx11::basic_string", align 8
  %355 = alloca %"class.std::__cxx11::basic_string", align 8
  %356 = alloca %"class.std::__cxx11::basic_string", align 8
  %357 = alloca %"class.std::__cxx11::basic_string", align 8
  %358 = alloca %"class.std::__cxx11::basic_string", align 8
  %359 = alloca %"class.std::__cxx11::basic_string", align 8
  %360 = alloca %"class.std::__cxx11::basic_string", align 8
  %361 = alloca %"class.std::__cxx11::basic_string", align 8
  %362 = alloca %"class.std::__cxx11::basic_string", align 8
  %363 = alloca %"class.std::__cxx11::basic_string", align 8
  %364 = alloca %"class.std::__cxx11::basic_string", align 8
  %365 = alloca %"class.std::__cxx11::basic_string", align 8
  %366 = alloca %"class.std::__cxx11::basic_string", align 8
  %367 = alloca %"class.std::__cxx11::basic_string", align 8
  %368 = alloca %"class.std::__cxx11::basic_string", align 8
  %369 = alloca %"class.std::__cxx11::basic_string", align 8
  %370 = alloca %"class.std::__cxx11::basic_string", align 8
  %371 = alloca %"class.std::__cxx11::basic_string", align 8
  %372 = alloca %"class.std::__cxx11::basic_string", align 8
  %373 = alloca %"class.std::__cxx11::basic_string", align 8
  %374 = alloca %"class.std::__cxx11::basic_string", align 8
  %375 = alloca %"class.std::__cxx11::basic_string", align 8
  %376 = alloca %"class.std::__cxx11::basic_string", align 8
  %377 = alloca %"class.std::__cxx11::basic_string", align 8
  %378 = alloca %"class.std::__cxx11::basic_string", align 8
  %379 = alloca %"class.std::__cxx11::basic_string", align 8
  %380 = alloca %"class.std::__cxx11::basic_string", align 8
  %381 = alloca %"class.std::__cxx11::basic_string", align 8
  %382 = alloca %"class.std::__cxx11::basic_string", align 8
  %383 = alloca %"class.std::__cxx11::basic_string", align 8
  %384 = alloca %"class.std::__cxx11::basic_string", align 8
  %385 = alloca ptr, align 8
  %386 = alloca ptr, align 8
  %387 = alloca %"class.std::__cxx11::basic_string", align 8
  %388 = alloca %"class.std::__cxx11::basic_string", align 8
  %389 = alloca %"class.std::__cxx11::basic_string", align 8
  %390 = alloca %"class.std::__cxx11::basic_string", align 8
  %391 = alloca %"class.std::__cxx11::basic_string", align 8
  %392 = alloca %"class.std::__cxx11::basic_string", align 8
  %393 = alloca %"class.std::__cxx11::basic_string", align 8
  %394 = alloca %"class.std::__cxx11::basic_string", align 8
  %395 = alloca %"class.std::__cxx11::basic_string", align 8
  %396 = alloca %"class.std::__cxx11::basic_string", align 8
  %397 = alloca i32, align 4
  %398 = alloca i32, align 4
  %399 = alloca i32, align 4
  %400 = alloca i32, align 4
  %401 = alloca ptr, align 8
  %402 = alloca ptr, align 8
  %403 = alloca %"class.std::__cxx11::basic_string", align 8
  %404 = alloca %"class.std::__cxx11::basic_string", align 8
  %405 = alloca i32, align 4
  %406 = alloca %"class.std::__cxx11::basic_string", align 8
  %407 = alloca %"class.std::allocator.71", align 1
  %408 = alloca %"class.std::__cxx11::basic_string", align 8
  %409 = alloca %"class.std::__cxx11::basic_string", align 8
  %410 = alloca %"class.std::__cxx11::basic_string", align 8
  %411 = alloca %"class.std::__cxx11::basic_string", align 8
  %412 = alloca i32, align 4
  %413 = alloca i32, align 4
  %414 = alloca %"class.std::__cxx11::basic_string", align 8
  %415 = alloca %"class.std::__cxx11::basic_string", align 8
  %416 = alloca ptr, align 8
  %417 = alloca %"class.std::__cxx11::basic_string", align 8
  %418 = alloca %"class.std::__cxx11::basic_string", align 8
  %419 = alloca %"class.std::__cxx11::basic_string", align 8
  %420 = alloca i32, align 4
  %421 = alloca i32, align 4
  %422 = alloca i32, align 4
  %423 = alloca i32, align 4
  %424 = alloca i32, align 4
  %425 = alloca %"struct.spirv_cross::SPIRType", align 8
  %426 = alloca %"struct.spirv_cross::SPIRType", align 8
  %427 = alloca %"class.std::__cxx11::basic_string", align 8
  %428 = alloca %"class.std::__cxx11::basic_string", align 8
  %429 = alloca %"class.std::__cxx11::basic_string", align 8
  %430 = alloca %"class.std::allocator.71", align 1
  %431 = alloca %"class.std::__cxx11::basic_string", align 8
  %432 = alloca %"class.std::__cxx11::basic_string", align 8
  %433 = alloca %"class.std::__cxx11::basic_string", align 8
  %434 = alloca %"class.std::__cxx11::basic_string", align 8
  %435 = alloca i32, align 4
  %436 = alloca i32, align 4
  %437 = alloca %"class.std::__cxx11::basic_string", align 8
  %438 = alloca %"class.std::__cxx11::basic_string", align 8
  %439 = alloca ptr, align 8
  %440 = alloca i32, align 4
  %441 = alloca %"class.std::__cxx11::basic_string", align 8
  %442 = alloca %"class.std::__cxx11::basic_string", align 8
  %443 = alloca %"class.std::__cxx11::basic_string", align 8
  %444 = alloca %"class.std::__cxx11::basic_string", align 8
  %445 = alloca %"class.std::__cxx11::basic_string", align 8
  %446 = alloca %"class.std::__cxx11::basic_string", align 8
  %447 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %448 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %449 = load ptr, ptr %4, align 8, !tbaa !5
  %450 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %448, ptr noundef nonnull align 4 dereferenceable(12) %449)
  store ptr %450, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %451, i32 0, i32 0
  %453 = load i16, ptr %452, align 4, !tbaa !9
  %454 = zext i16 %453 to i32
  store i32 %454, ptr %6, align 4, !tbaa !13
  %455 = load i32, ptr %6, align 4, !tbaa !13
  %456 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %455)
  store i32 %456, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %457 = load ptr, ptr %4, align 8, !tbaa !5
  %458 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %457)
  store i32 %458, ptr %7, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  %459 = load i32, ptr %7, align 4, !tbaa !15
  %460 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %459)
  store i32 %460, ptr %8, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  %461 = load i32, ptr %7, align 4, !tbaa !15
  %462 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %461)
  store i32 %462, ptr %9, align 4, !tbaa !16
  %463 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %463, label %5104 [
    i32 61, label %464
    i32 170, label %495
    i32 164, label %511
    i32 180, label %511
    i32 171, label %524
    i32 165, label %540
    i32 182, label %540
    i32 172, label %553
    i32 173, label %569
    i32 186, label %585
    i32 174, label %598
    i32 175, label %614
    i32 190, label %630
    i32 176, label %643
    i32 177, label %659
    i32 184, label %675
    i32 178, label %688
    i32 179, label %704
    i32 188, label %720
    i32 181, label %733
    i32 183, label %746
    i32 187, label %759
    i32 191, label %772
    i32 185, label %785
    i32 189, label %798
    i32 401, label %811
    i32 402, label %824
    i32 403, label %837
    i32 207, label %850
    i32 210, label %850
    i32 213, label %850
    i32 208, label %863
    i32 211, label %863
    i32 214, label %863
    i32 209, label %876
    i32 215, label %876
    i32 212, label %876
    i32 201, label %889
    i32 202, label %908
    i32 203, label %926
    i32 204, label %944
    i32 205, label %954
    i32 140, label %972
    i32 133, label %985
    i32 129, label %1024
    i32 131, label %1063
    i32 229, label %1102
    i32 230, label %1125
    i32 231, label %1155
    i32 227, label %1162
    i32 228, label %1183
    i32 232, label %1211
    i32 233, label %1234
    i32 234, label %1257
    i32 6035, label %1257
    i32 235, label %1283
    i32 236, label %1309
    i32 237, label %1309
    i32 238, label %1335
    i32 239, label %1335
    i32 240, label %1361
    i32 241, label %1387
    i32 242, label %1413
    i32 98, label %1439
    i32 60, label %1493
    i32 99, label %1644
    i32 104, label %1822
    i32 103, label %1822
    i32 105, label %2055
    i32 106, label %2219
    i32 107, label %2274
    i32 100, label %2329
    i32 116, label %2420
    i32 66, label %2448
    i32 65, label %2448
    i32 67, label %2448
    i32 62, label %2466
    i32 225, label %2542
    i32 224, label %2549
    i32 147, label %2564
    i32 144, label %2664
    i32 145, label %2664
    i32 146, label %2827
    i32 149, label %2967
    i32 150, label %2967
    i32 151, label %3158
    i32 152, label %3158
    i32 68, label %3228
    i32 4421, label %3264
    i32 4422, label %3264
    i32 4432, label %3264
    i32 4428, label %3264
    i32 4429, label %3264
    i32 4430, label %3264
    i32 5585, label %3269
    i32 5586, label %3279
    i32 5587, label %3289
    i32 5588, label %3289
    i32 5589, label %3302
    i32 5590, label %3302
    i32 5591, label %3315
    i32 5592, label %3315
    i32 5593, label %3328
    i32 5594, label %3328
    i32 5595, label %3341
    i32 5596, label %3341
    i32 5597, label %3354
    i32 5598, label %3403
    i32 5380, label %3452
    i32 5381, label %3464
    i32 5364, label %3529
    i32 5365, label %3529
    i32 4447, label %3540
    i32 6021, label %3547
    i32 4473, label %3554
    i32 4477, label %3632
    i32 6016, label %3660
    i32 6030, label %3685
    i32 6029, label %3710
    i32 6020, label %3735
    i32 6019, label %3790
    i32 6024, label %3845
    i32 6023, label %3900
    i32 6022, label %3955
    i32 6028, label %4010
    i32 6027, label %4065
    i32 6031, label %4120
    i32 6032, label %4175
    i32 6025, label %4230
    i32 4479, label %4285
    i32 6018, label %4340
    i32 6026, label %4395
    i32 4476, label %4420
    i32 4475, label %4435
    i32 4474, label %4459
    i32 117, label %4474
    i32 120, label %4474
    i32 124, label %4474
    i32 4450, label %4618
    i32 4451, label %4618
    i32 4452, label %4618
    i32 4453, label %4826
    i32 4454, label %4826
    i32 4455, label %4826
    i32 5295, label %5084
  ]

464:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %465 = load ptr, ptr %5, align 8, !tbaa !5
  %466 = getelementptr inbounds i32, ptr %465, i64 1
  %467 = load i32, ptr %466, align 4, !tbaa !15
  store i32 %467, ptr %10, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  %468 = load ptr, ptr %5, align 8, !tbaa !5
  %469 = getelementptr inbounds i32, ptr %468, i64 2
  %470 = load i32, ptr %469, align 4, !tbaa !15
  store i32 %470, ptr %11, align 4, !tbaa !15
  %471 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %448)
  br i1 %471, label %472, label %482

472:                                              ; preds = %464
  %473 = load ptr, ptr %5, align 8, !tbaa !5
  %474 = getelementptr inbounds i32, ptr %473, i64 0
  %475 = load i32, ptr %474, align 4, !tbaa !15
  %476 = load i32, ptr %10, align 4, !tbaa !15
  %477 = load i32, ptr %11, align 4, !tbaa !15
  %478 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %475, i32 noundef %476, i32 noundef %477)
  br i1 %478, label %481, label %479

479:                                              ; preds = %472
  %480 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %480)
  br label %481

481:                                              ; preds = %479, %472
  br label %494

482:                                              ; preds = %464
  %483 = load i32, ptr %11, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef %483)
  %484 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %12, i32 0, i32 0
  %485 = load i32, ptr %484, align 4
  %486 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %485, i32 noundef 11)
  %487 = icmp eq i32 %486, 20
  br i1 %487, label %488, label %492

488:                                              ; preds = %482
  %489 = load i32, ptr %10, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef %489)
  %490 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %13, i32 0, i32 0
  %491 = load i32, ptr %490, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %491, i32 noundef 11, i32 noundef 20)
  br label %492

492:                                              ; preds = %488, %482
  %493 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %493)
  br label %494

494:                                              ; preds = %492, %481
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  br label %5106

495:                                              ; preds = %2
  %496 = load ptr, ptr %5, align 8, !tbaa !5
  %497 = getelementptr inbounds i32, ptr %496, i64 0
  %498 = load i32, ptr %497, align 4, !tbaa !15
  %499 = load ptr, ptr %5, align 8, !tbaa !5
  %500 = getelementptr inbounds i32, ptr %499, i64 1
  %501 = load i32, ptr %500, align 4, !tbaa !15
  %502 = load ptr, ptr %5, align 8, !tbaa !5
  %503 = getelementptr inbounds i32, ptr %502, i64 2
  %504 = load i32, ptr %503, align 4, !tbaa !15
  %505 = load ptr, ptr %5, align 8, !tbaa !5
  %506 = getelementptr inbounds i32, ptr %505, i64 3
  %507 = load i32, ptr %506, align 4, !tbaa !15
  %508 = load i32, ptr %8, align 4, !tbaa !16
  %509 = load i32, ptr %6, align 4, !tbaa !13
  %510 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %509)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %498, i32 noundef %501, i32 noundef %504, i32 noundef %507, ptr noundef @.str.945, i32 noundef %508, i1 noundef zeroext %510, i1 noundef zeroext false)
  br label %5106

511:                                              ; preds = %2, %2
  %512 = load ptr, ptr %5, align 8, !tbaa !5
  %513 = getelementptr inbounds i32, ptr %512, i64 0
  %514 = load i32, ptr %513, align 4, !tbaa !15
  %515 = load ptr, ptr %5, align 8, !tbaa !5
  %516 = getelementptr inbounds i32, ptr %515, i64 1
  %517 = load i32, ptr %516, align 4, !tbaa !15
  %518 = load ptr, ptr %5, align 8, !tbaa !5
  %519 = getelementptr inbounds i32, ptr %518, i64 2
  %520 = load i32, ptr %519, align 4, !tbaa !15
  %521 = load ptr, ptr %5, align 8, !tbaa !5
  %522 = getelementptr inbounds i32, ptr %521, i64 3
  %523 = load i32, ptr %522, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %514, i32 noundef %517, i32 noundef %520, i32 noundef %523, ptr noundef @.str.945)
  br label %5106

524:                                              ; preds = %2
  %525 = load ptr, ptr %5, align 8, !tbaa !5
  %526 = getelementptr inbounds i32, ptr %525, i64 0
  %527 = load i32, ptr %526, align 4, !tbaa !15
  %528 = load ptr, ptr %5, align 8, !tbaa !5
  %529 = getelementptr inbounds i32, ptr %528, i64 1
  %530 = load i32, ptr %529, align 4, !tbaa !15
  %531 = load ptr, ptr %5, align 8, !tbaa !5
  %532 = getelementptr inbounds i32, ptr %531, i64 2
  %533 = load i32, ptr %532, align 4, !tbaa !15
  %534 = load ptr, ptr %5, align 8, !tbaa !5
  %535 = getelementptr inbounds i32, ptr %534, i64 3
  %536 = load i32, ptr %535, align 4, !tbaa !15
  %537 = load i32, ptr %8, align 4, !tbaa !16
  %538 = load i32, ptr %6, align 4, !tbaa !13
  %539 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %538)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %527, i32 noundef %530, i32 noundef %533, i32 noundef %536, ptr noundef @.str.946, i32 noundef %537, i1 noundef zeroext %539, i1 noundef zeroext false)
  br label %5106

540:                                              ; preds = %2, %2
  %541 = load ptr, ptr %5, align 8, !tbaa !5
  %542 = getelementptr inbounds i32, ptr %541, i64 0
  %543 = load i32, ptr %542, align 4, !tbaa !15
  %544 = load ptr, ptr %5, align 8, !tbaa !5
  %545 = getelementptr inbounds i32, ptr %544, i64 1
  %546 = load i32, ptr %545, align 4, !tbaa !15
  %547 = load ptr, ptr %5, align 8, !tbaa !5
  %548 = getelementptr inbounds i32, ptr %547, i64 2
  %549 = load i32, ptr %548, align 4, !tbaa !15
  %550 = load ptr, ptr %5, align 8, !tbaa !5
  %551 = getelementptr inbounds i32, ptr %550, i64 3
  %552 = load i32, ptr %551, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %543, i32 noundef %546, i32 noundef %549, i32 noundef %552, ptr noundef @.str.946)
  br label %5106

553:                                              ; preds = %2
  %554 = load ptr, ptr %5, align 8, !tbaa !5
  %555 = getelementptr inbounds i32, ptr %554, i64 0
  %556 = load i32, ptr %555, align 4, !tbaa !15
  %557 = load ptr, ptr %5, align 8, !tbaa !5
  %558 = getelementptr inbounds i32, ptr %557, i64 1
  %559 = load i32, ptr %558, align 4, !tbaa !15
  %560 = load ptr, ptr %5, align 8, !tbaa !5
  %561 = getelementptr inbounds i32, ptr %560, i64 2
  %562 = load i32, ptr %561, align 4, !tbaa !15
  %563 = load ptr, ptr %5, align 8, !tbaa !5
  %564 = getelementptr inbounds i32, ptr %563, i64 3
  %565 = load i32, ptr %564, align 4, !tbaa !15
  %566 = load i32, ptr %9, align 4, !tbaa !16
  %567 = load i32, ptr %6, align 4, !tbaa !13
  %568 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %567)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %556, i32 noundef %559, i32 noundef %562, i32 noundef %565, ptr noundef @.str.290, i32 noundef %566, i1 noundef zeroext %568, i1 noundef zeroext false)
  br label %5106

569:                                              ; preds = %2
  %570 = load ptr, ptr %5, align 8, !tbaa !5
  %571 = getelementptr inbounds i32, ptr %570, i64 0
  %572 = load i32, ptr %571, align 4, !tbaa !15
  %573 = load ptr, ptr %5, align 8, !tbaa !5
  %574 = getelementptr inbounds i32, ptr %573, i64 1
  %575 = load i32, ptr %574, align 4, !tbaa !15
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds i32, ptr %576, i64 2
  %578 = load i32, ptr %577, align 4, !tbaa !15
  %579 = load ptr, ptr %5, align 8, !tbaa !5
  %580 = getelementptr inbounds i32, ptr %579, i64 3
  %581 = load i32, ptr %580, align 4, !tbaa !15
  %582 = load i32, ptr %8, align 4, !tbaa !16
  %583 = load i32, ptr %6, align 4, !tbaa !13
  %584 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %583)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %572, i32 noundef %575, i32 noundef %578, i32 noundef %581, ptr noundef @.str.290, i32 noundef %582, i1 noundef zeroext %584, i1 noundef zeroext false)
  br label %5106

585:                                              ; preds = %2
  %586 = load ptr, ptr %5, align 8, !tbaa !5
  %587 = getelementptr inbounds i32, ptr %586, i64 0
  %588 = load i32, ptr %587, align 4, !tbaa !15
  %589 = load ptr, ptr %5, align 8, !tbaa !5
  %590 = getelementptr inbounds i32, ptr %589, i64 1
  %591 = load i32, ptr %590, align 4, !tbaa !15
  %592 = load ptr, ptr %5, align 8, !tbaa !5
  %593 = getelementptr inbounds i32, ptr %592, i64 2
  %594 = load i32, ptr %593, align 4, !tbaa !15
  %595 = load ptr, ptr %5, align 8, !tbaa !5
  %596 = getelementptr inbounds i32, ptr %595, i64 3
  %597 = load i32, ptr %596, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %588, i32 noundef %591, i32 noundef %594, i32 noundef %597, ptr noundef @.str.290)
  br label %5106

598:                                              ; preds = %2
  %599 = load ptr, ptr %5, align 8, !tbaa !5
  %600 = getelementptr inbounds i32, ptr %599, i64 0
  %601 = load i32, ptr %600, align 4, !tbaa !15
  %602 = load ptr, ptr %5, align 8, !tbaa !5
  %603 = getelementptr inbounds i32, ptr %602, i64 1
  %604 = load i32, ptr %603, align 4, !tbaa !15
  %605 = load ptr, ptr %5, align 8, !tbaa !5
  %606 = getelementptr inbounds i32, ptr %605, i64 2
  %607 = load i32, ptr %606, align 4, !tbaa !15
  %608 = load ptr, ptr %5, align 8, !tbaa !5
  %609 = getelementptr inbounds i32, ptr %608, i64 3
  %610 = load i32, ptr %609, align 4, !tbaa !15
  %611 = load i32, ptr %9, align 4, !tbaa !16
  %612 = load i32, ptr %6, align 4, !tbaa !13
  %613 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %612)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %601, i32 noundef %604, i32 noundef %607, i32 noundef %610, ptr noundef @.str.947, i32 noundef %611, i1 noundef zeroext %613, i1 noundef zeroext false)
  br label %5106

614:                                              ; preds = %2
  %615 = load ptr, ptr %5, align 8, !tbaa !5
  %616 = getelementptr inbounds i32, ptr %615, i64 0
  %617 = load i32, ptr %616, align 4, !tbaa !15
  %618 = load ptr, ptr %5, align 8, !tbaa !5
  %619 = getelementptr inbounds i32, ptr %618, i64 1
  %620 = load i32, ptr %619, align 4, !tbaa !15
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  %622 = getelementptr inbounds i32, ptr %621, i64 2
  %623 = load i32, ptr %622, align 4, !tbaa !15
  %624 = load ptr, ptr %5, align 8, !tbaa !5
  %625 = getelementptr inbounds i32, ptr %624, i64 3
  %626 = load i32, ptr %625, align 4, !tbaa !15
  %627 = load i32, ptr %8, align 4, !tbaa !16
  %628 = load i32, ptr %6, align 4, !tbaa !13
  %629 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %628)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %617, i32 noundef %620, i32 noundef %623, i32 noundef %626, ptr noundef @.str.947, i32 noundef %627, i1 noundef zeroext %629, i1 noundef zeroext false)
  br label %5106

630:                                              ; preds = %2
  %631 = load ptr, ptr %5, align 8, !tbaa !5
  %632 = getelementptr inbounds i32, ptr %631, i64 0
  %633 = load i32, ptr %632, align 4, !tbaa !15
  %634 = load ptr, ptr %5, align 8, !tbaa !5
  %635 = getelementptr inbounds i32, ptr %634, i64 1
  %636 = load i32, ptr %635, align 4, !tbaa !15
  %637 = load ptr, ptr %5, align 8, !tbaa !5
  %638 = getelementptr inbounds i32, ptr %637, i64 2
  %639 = load i32, ptr %638, align 4, !tbaa !15
  %640 = load ptr, ptr %5, align 8, !tbaa !5
  %641 = getelementptr inbounds i32, ptr %640, i64 3
  %642 = load i32, ptr %641, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %633, i32 noundef %636, i32 noundef %639, i32 noundef %642, ptr noundef @.str.947)
  br label %5106

643:                                              ; preds = %2
  %644 = load ptr, ptr %5, align 8, !tbaa !5
  %645 = getelementptr inbounds i32, ptr %644, i64 0
  %646 = load i32, ptr %645, align 4, !tbaa !15
  %647 = load ptr, ptr %5, align 8, !tbaa !5
  %648 = getelementptr inbounds i32, ptr %647, i64 1
  %649 = load i32, ptr %648, align 4, !tbaa !15
  %650 = load ptr, ptr %5, align 8, !tbaa !5
  %651 = getelementptr inbounds i32, ptr %650, i64 2
  %652 = load i32, ptr %651, align 4, !tbaa !15
  %653 = load ptr, ptr %5, align 8, !tbaa !5
  %654 = getelementptr inbounds i32, ptr %653, i64 3
  %655 = load i32, ptr %654, align 4, !tbaa !15
  %656 = load i32, ptr %9, align 4, !tbaa !16
  %657 = load i32, ptr %6, align 4, !tbaa !13
  %658 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %657)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %646, i32 noundef %649, i32 noundef %652, i32 noundef %655, ptr noundef @.str.948, i32 noundef %656, i1 noundef zeroext %658, i1 noundef zeroext false)
  br label %5106

659:                                              ; preds = %2
  %660 = load ptr, ptr %5, align 8, !tbaa !5
  %661 = getelementptr inbounds i32, ptr %660, i64 0
  %662 = load i32, ptr %661, align 4, !tbaa !15
  %663 = load ptr, ptr %5, align 8, !tbaa !5
  %664 = getelementptr inbounds i32, ptr %663, i64 1
  %665 = load i32, ptr %664, align 4, !tbaa !15
  %666 = load ptr, ptr %5, align 8, !tbaa !5
  %667 = getelementptr inbounds i32, ptr %666, i64 2
  %668 = load i32, ptr %667, align 4, !tbaa !15
  %669 = load ptr, ptr %5, align 8, !tbaa !5
  %670 = getelementptr inbounds i32, ptr %669, i64 3
  %671 = load i32, ptr %670, align 4, !tbaa !15
  %672 = load i32, ptr %8, align 4, !tbaa !16
  %673 = load i32, ptr %6, align 4, !tbaa !13
  %674 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %673)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %662, i32 noundef %665, i32 noundef %668, i32 noundef %671, ptr noundef @.str.948, i32 noundef %672, i1 noundef zeroext %674, i1 noundef zeroext false)
  br label %5106

675:                                              ; preds = %2
  %676 = load ptr, ptr %5, align 8, !tbaa !5
  %677 = getelementptr inbounds i32, ptr %676, i64 0
  %678 = load i32, ptr %677, align 4, !tbaa !15
  %679 = load ptr, ptr %5, align 8, !tbaa !5
  %680 = getelementptr inbounds i32, ptr %679, i64 1
  %681 = load i32, ptr %680, align 4, !tbaa !15
  %682 = load ptr, ptr %5, align 8, !tbaa !5
  %683 = getelementptr inbounds i32, ptr %682, i64 2
  %684 = load i32, ptr %683, align 4, !tbaa !15
  %685 = load ptr, ptr %5, align 8, !tbaa !5
  %686 = getelementptr inbounds i32, ptr %685, i64 3
  %687 = load i32, ptr %686, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %678, i32 noundef %681, i32 noundef %684, i32 noundef %687, ptr noundef @.str.948)
  br label %5106

688:                                              ; preds = %2
  %689 = load ptr, ptr %5, align 8, !tbaa !5
  %690 = getelementptr inbounds i32, ptr %689, i64 0
  %691 = load i32, ptr %690, align 4, !tbaa !15
  %692 = load ptr, ptr %5, align 8, !tbaa !5
  %693 = getelementptr inbounds i32, ptr %692, i64 1
  %694 = load i32, ptr %693, align 4, !tbaa !15
  %695 = load ptr, ptr %5, align 8, !tbaa !5
  %696 = getelementptr inbounds i32, ptr %695, i64 2
  %697 = load i32, ptr %696, align 4, !tbaa !15
  %698 = load ptr, ptr %5, align 8, !tbaa !5
  %699 = getelementptr inbounds i32, ptr %698, i64 3
  %700 = load i32, ptr %699, align 4, !tbaa !15
  %701 = load i32, ptr %9, align 4, !tbaa !16
  %702 = load i32, ptr %6, align 4, !tbaa !13
  %703 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %702)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %691, i32 noundef %694, i32 noundef %697, i32 noundef %700, ptr noundef @.str.949, i32 noundef %701, i1 noundef zeroext %703, i1 noundef zeroext false)
  br label %5106

704:                                              ; preds = %2
  %705 = load ptr, ptr %5, align 8, !tbaa !5
  %706 = getelementptr inbounds i32, ptr %705, i64 0
  %707 = load i32, ptr %706, align 4, !tbaa !15
  %708 = load ptr, ptr %5, align 8, !tbaa !5
  %709 = getelementptr inbounds i32, ptr %708, i64 1
  %710 = load i32, ptr %709, align 4, !tbaa !15
  %711 = load ptr, ptr %5, align 8, !tbaa !5
  %712 = getelementptr inbounds i32, ptr %711, i64 2
  %713 = load i32, ptr %712, align 4, !tbaa !15
  %714 = load ptr, ptr %5, align 8, !tbaa !5
  %715 = getelementptr inbounds i32, ptr %714, i64 3
  %716 = load i32, ptr %715, align 4, !tbaa !15
  %717 = load i32, ptr %8, align 4, !tbaa !16
  %718 = load i32, ptr %6, align 4, !tbaa !13
  %719 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %718)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %707, i32 noundef %710, i32 noundef %713, i32 noundef %716, ptr noundef @.str.949, i32 noundef %717, i1 noundef zeroext %719, i1 noundef zeroext false)
  br label %5106

720:                                              ; preds = %2
  %721 = load ptr, ptr %5, align 8, !tbaa !5
  %722 = getelementptr inbounds i32, ptr %721, i64 0
  %723 = load i32, ptr %722, align 4, !tbaa !15
  %724 = load ptr, ptr %5, align 8, !tbaa !5
  %725 = getelementptr inbounds i32, ptr %724, i64 1
  %726 = load i32, ptr %725, align 4, !tbaa !15
  %727 = load ptr, ptr %5, align 8, !tbaa !5
  %728 = getelementptr inbounds i32, ptr %727, i64 2
  %729 = load i32, ptr %728, align 4, !tbaa !15
  %730 = load ptr, ptr %5, align 8, !tbaa !5
  %731 = getelementptr inbounds i32, ptr %730, i64 3
  %732 = load i32, ptr %731, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %723, i32 noundef %726, i32 noundef %729, i32 noundef %732, ptr noundef @.str.949)
  br label %5106

733:                                              ; preds = %2
  %734 = load ptr, ptr %5, align 8, !tbaa !5
  %735 = getelementptr inbounds i32, ptr %734, i64 0
  %736 = load i32, ptr %735, align 4, !tbaa !15
  %737 = load ptr, ptr %5, align 8, !tbaa !5
  %738 = getelementptr inbounds i32, ptr %737, i64 1
  %739 = load i32, ptr %738, align 4, !tbaa !15
  %740 = load ptr, ptr %5, align 8, !tbaa !5
  %741 = getelementptr inbounds i32, ptr %740, i64 2
  %742 = load i32, ptr %741, align 4, !tbaa !15
  %743 = load ptr, ptr %5, align 8, !tbaa !5
  %744 = getelementptr inbounds i32, ptr %743, i64 3
  %745 = load i32, ptr %744, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %736, i32 noundef %739, i32 noundef %742, i32 noundef %745, ptr noundef @.str.945)
  br label %5106

746:                                              ; preds = %2
  %747 = load ptr, ptr %5, align 8, !tbaa !5
  %748 = getelementptr inbounds i32, ptr %747, i64 0
  %749 = load i32, ptr %748, align 4, !tbaa !15
  %750 = load ptr, ptr %5, align 8, !tbaa !5
  %751 = getelementptr inbounds i32, ptr %750, i64 1
  %752 = load i32, ptr %751, align 4, !tbaa !15
  %753 = load ptr, ptr %5, align 8, !tbaa !5
  %754 = getelementptr inbounds i32, ptr %753, i64 2
  %755 = load i32, ptr %754, align 4, !tbaa !15
  %756 = load ptr, ptr %5, align 8, !tbaa !5
  %757 = getelementptr inbounds i32, ptr %756, i64 3
  %758 = load i32, ptr %757, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %749, i32 noundef %752, i32 noundef %755, i32 noundef %758, ptr noundef @.str.946)
  br label %5106

759:                                              ; preds = %2
  %760 = load ptr, ptr %5, align 8, !tbaa !5
  %761 = getelementptr inbounds i32, ptr %760, i64 0
  %762 = load i32, ptr %761, align 4, !tbaa !15
  %763 = load ptr, ptr %5, align 8, !tbaa !5
  %764 = getelementptr inbounds i32, ptr %763, i64 1
  %765 = load i32, ptr %764, align 4, !tbaa !15
  %766 = load ptr, ptr %5, align 8, !tbaa !5
  %767 = getelementptr inbounds i32, ptr %766, i64 2
  %768 = load i32, ptr %767, align 4, !tbaa !15
  %769 = load ptr, ptr %5, align 8, !tbaa !5
  %770 = getelementptr inbounds i32, ptr %769, i64 3
  %771 = load i32, ptr %770, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %762, i32 noundef %765, i32 noundef %768, i32 noundef %771, ptr noundef @.str.290)
  br label %5106

772:                                              ; preds = %2
  %773 = load ptr, ptr %5, align 8, !tbaa !5
  %774 = getelementptr inbounds i32, ptr %773, i64 0
  %775 = load i32, ptr %774, align 4, !tbaa !15
  %776 = load ptr, ptr %5, align 8, !tbaa !5
  %777 = getelementptr inbounds i32, ptr %776, i64 1
  %778 = load i32, ptr %777, align 4, !tbaa !15
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = getelementptr inbounds i32, ptr %779, i64 2
  %781 = load i32, ptr %780, align 4, !tbaa !15
  %782 = load ptr, ptr %5, align 8, !tbaa !5
  %783 = getelementptr inbounds i32, ptr %782, i64 3
  %784 = load i32, ptr %783, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %775, i32 noundef %778, i32 noundef %781, i32 noundef %784, ptr noundef @.str.947)
  br label %5106

785:                                              ; preds = %2
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  %787 = getelementptr inbounds i32, ptr %786, i64 0
  %788 = load i32, ptr %787, align 4, !tbaa !15
  %789 = load ptr, ptr %5, align 8, !tbaa !5
  %790 = getelementptr inbounds i32, ptr %789, i64 1
  %791 = load i32, ptr %790, align 4, !tbaa !15
  %792 = load ptr, ptr %5, align 8, !tbaa !5
  %793 = getelementptr inbounds i32, ptr %792, i64 2
  %794 = load i32, ptr %793, align 4, !tbaa !15
  %795 = load ptr, ptr %5, align 8, !tbaa !5
  %796 = getelementptr inbounds i32, ptr %795, i64 3
  %797 = load i32, ptr %796, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %788, i32 noundef %791, i32 noundef %794, i32 noundef %797, ptr noundef @.str.948)
  br label %5106

798:                                              ; preds = %2
  %799 = load ptr, ptr %5, align 8, !tbaa !5
  %800 = getelementptr inbounds i32, ptr %799, i64 0
  %801 = load i32, ptr %800, align 4, !tbaa !15
  %802 = load ptr, ptr %5, align 8, !tbaa !5
  %803 = getelementptr inbounds i32, ptr %802, i64 1
  %804 = load i32, ptr %803, align 4, !tbaa !15
  %805 = load ptr, ptr %5, align 8, !tbaa !5
  %806 = getelementptr inbounds i32, ptr %805, i64 2
  %807 = load i32, ptr %806, align 4, !tbaa !15
  %808 = load ptr, ptr %5, align 8, !tbaa !5
  %809 = getelementptr inbounds i32, ptr %808, i64 3
  %810 = load i32, ptr %809, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %801, i32 noundef %804, i32 noundef %807, i32 noundef %810, ptr noundef @.str.949)
  br label %5106

811:                                              ; preds = %2
  %812 = load ptr, ptr %5, align 8, !tbaa !5
  %813 = getelementptr inbounds i32, ptr %812, i64 0
  %814 = load i32, ptr %813, align 4, !tbaa !15
  %815 = load ptr, ptr %5, align 8, !tbaa !5
  %816 = getelementptr inbounds i32, ptr %815, i64 1
  %817 = load i32, ptr %816, align 4, !tbaa !15
  %818 = load ptr, ptr %5, align 8, !tbaa !5
  %819 = getelementptr inbounds i32, ptr %818, i64 2
  %820 = load i32, ptr %819, align 4, !tbaa !15
  %821 = load ptr, ptr %5, align 8, !tbaa !5
  %822 = getelementptr inbounds i32, ptr %821, i64 3
  %823 = load i32, ptr %822, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL18emit_binary_ptr_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %814, i32 noundef %817, i32 noundef %820, i32 noundef %823, ptr noundef @.str.945)
  br label %5106

824:                                              ; preds = %2
  %825 = load ptr, ptr %5, align 8, !tbaa !5
  %826 = getelementptr inbounds i32, ptr %825, i64 0
  %827 = load i32, ptr %826, align 4, !tbaa !15
  %828 = load ptr, ptr %5, align 8, !tbaa !5
  %829 = getelementptr inbounds i32, ptr %828, i64 1
  %830 = load i32, ptr %829, align 4, !tbaa !15
  %831 = load ptr, ptr %5, align 8, !tbaa !5
  %832 = getelementptr inbounds i32, ptr %831, i64 2
  %833 = load i32, ptr %832, align 4, !tbaa !15
  %834 = load ptr, ptr %5, align 8, !tbaa !5
  %835 = getelementptr inbounds i32, ptr %834, i64 3
  %836 = load i32, ptr %835, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL18emit_binary_ptr_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %827, i32 noundef %830, i32 noundef %833, i32 noundef %836, ptr noundef @.str.946)
  br label %5106

837:                                              ; preds = %2
  %838 = load ptr, ptr %5, align 8, !tbaa !5
  %839 = getelementptr inbounds i32, ptr %838, i64 0
  %840 = load i32, ptr %839, align 4, !tbaa !15
  %841 = load ptr, ptr %5, align 8, !tbaa !5
  %842 = getelementptr inbounds i32, ptr %841, i64 1
  %843 = load i32, ptr %842, align 4, !tbaa !15
  %844 = load ptr, ptr %5, align 8, !tbaa !5
  %845 = getelementptr inbounds i32, ptr %844, i64 2
  %846 = load i32, ptr %845, align 4, !tbaa !15
  %847 = load ptr, ptr %5, align 8, !tbaa !5
  %848 = getelementptr inbounds i32, ptr %847, i64 3
  %849 = load i32, ptr %848, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL18emit_binary_ptr_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %840, i32 noundef %843, i32 noundef %846, i32 noundef %849, ptr noundef @.str.950)
  br label %5106

850:                                              ; preds = %2, %2, %2
  %851 = load ptr, ptr %5, align 8, !tbaa !5
  %852 = getelementptr inbounds i32, ptr %851, i64 0
  %853 = load i32, ptr %852, align 4, !tbaa !15
  %854 = load ptr, ptr %5, align 8, !tbaa !5
  %855 = getelementptr inbounds i32, ptr %854, i64 1
  %856 = load i32, ptr %855, align 4, !tbaa !15
  %857 = load ptr, ptr %5, align 8, !tbaa !5
  %858 = getelementptr inbounds i32, ptr %857, i64 2
  %859 = load i32, ptr %858, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %853, i32 noundef %856, i32 noundef %859, ptr noundef @.str.951)
  %860 = load ptr, ptr %5, align 8, !tbaa !5
  %861 = getelementptr inbounds i32, ptr %860, i64 1
  %862 = load i32, ptr %861, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %862)
  br label %5106

863:                                              ; preds = %2, %2, %2
  %864 = load ptr, ptr %5, align 8, !tbaa !5
  %865 = getelementptr inbounds i32, ptr %864, i64 0
  %866 = load i32, ptr %865, align 4, !tbaa !15
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  %868 = getelementptr inbounds i32, ptr %867, i64 1
  %869 = load i32, ptr %868, align 4, !tbaa !15
  %870 = load ptr, ptr %5, align 8, !tbaa !5
  %871 = getelementptr inbounds i32, ptr %870, i64 2
  %872 = load i32, ptr %871, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %866, i32 noundef %869, i32 noundef %872, ptr noundef @.str.952)
  %873 = load ptr, ptr %5, align 8, !tbaa !5
  %874 = getelementptr inbounds i32, ptr %873, i64 1
  %875 = load i32, ptr %874, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %875)
  br label %5106

876:                                              ; preds = %2, %2, %2
  %877 = load ptr, ptr %5, align 8, !tbaa !5
  %878 = getelementptr inbounds i32, ptr %877, i64 0
  %879 = load i32, ptr %878, align 4, !tbaa !15
  %880 = load ptr, ptr %5, align 8, !tbaa !5
  %881 = getelementptr inbounds i32, ptr %880, i64 1
  %882 = load i32, ptr %881, align 4, !tbaa !15
  %883 = load ptr, ptr %5, align 8, !tbaa !5
  %884 = getelementptr inbounds i32, ptr %883, i64 2
  %885 = load i32, ptr %884, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %879, i32 noundef %882, i32 noundef %885, ptr noundef @.str.953)
  %886 = load ptr, ptr %5, align 8, !tbaa !5
  %887 = getelementptr inbounds i32, ptr %886, i64 1
  %888 = load i32, ptr %887, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %888)
  br label %5106

889:                                              ; preds = %2
  %890 = load ptr, ptr %5, align 8, !tbaa !5
  %891 = getelementptr inbounds i32, ptr %890, i64 0
  %892 = load i32, ptr %891, align 4, !tbaa !15
  %893 = load ptr, ptr %5, align 8, !tbaa !5
  %894 = getelementptr inbounds i32, ptr %893, i64 1
  %895 = load i32, ptr %894, align 4, !tbaa !15
  %896 = load ptr, ptr %5, align 8, !tbaa !5
  %897 = getelementptr inbounds i32, ptr %896, i64 2
  %898 = load i32, ptr %897, align 4, !tbaa !15
  %899 = load ptr, ptr %5, align 8, !tbaa !5
  %900 = getelementptr inbounds i32, ptr %899, i64 3
  %901 = load i32, ptr %900, align 4, !tbaa !15
  %902 = load ptr, ptr %5, align 8, !tbaa !5
  %903 = getelementptr inbounds i32, ptr %902, i64 4
  %904 = load i32, ptr %903, align 4, !tbaa !15
  %905 = load ptr, ptr %5, align 8, !tbaa !5
  %906 = getelementptr inbounds i32, ptr %905, i64 5
  %907 = load i32, ptr %906, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_bitfield_insert_opEjjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %892, i32 noundef %895, i32 noundef %898, i32 noundef %901, i32 noundef %904, i32 noundef %907, ptr noundef @.str.954, i32 noundef 8)
  br label %5106

908:                                              ; preds = %2
  %909 = load ptr, ptr %5, align 8, !tbaa !5
  %910 = getelementptr inbounds i32, ptr %909, i64 0
  %911 = load i32, ptr %910, align 4, !tbaa !15
  %912 = load ptr, ptr %5, align 8, !tbaa !5
  %913 = getelementptr inbounds i32, ptr %912, i64 1
  %914 = load i32, ptr %913, align 4, !tbaa !15
  %915 = load ptr, ptr %5, align 8, !tbaa !5
  %916 = getelementptr inbounds i32, ptr %915, i64 2
  %917 = load i32, ptr %916, align 4, !tbaa !15
  %918 = load ptr, ptr %5, align 8, !tbaa !5
  %919 = getelementptr inbounds i32, ptr %918, i64 3
  %920 = load i32, ptr %919, align 4, !tbaa !15
  %921 = load ptr, ptr %5, align 8, !tbaa !5
  %922 = getelementptr inbounds i32, ptr %921, i64 4
  %923 = load i32, ptr %922, align 4, !tbaa !15
  %924 = load i32, ptr %8, align 4, !tbaa !16
  %925 = load i32, ptr %8, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %911, i32 noundef %914, i32 noundef %917, i32 noundef %920, i32 noundef %923, ptr noundef @.str.955, i32 noundef %924, i32 noundef %925, i32 noundef 8, i32 noundef 8)
  br label %5106

926:                                              ; preds = %2
  %927 = load ptr, ptr %5, align 8, !tbaa !5
  %928 = getelementptr inbounds i32, ptr %927, i64 0
  %929 = load i32, ptr %928, align 4, !tbaa !15
  %930 = load ptr, ptr %5, align 8, !tbaa !5
  %931 = getelementptr inbounds i32, ptr %930, i64 1
  %932 = load i32, ptr %931, align 4, !tbaa !15
  %933 = load ptr, ptr %5, align 8, !tbaa !5
  %934 = getelementptr inbounds i32, ptr %933, i64 2
  %935 = load i32, ptr %934, align 4, !tbaa !15
  %936 = load ptr, ptr %5, align 8, !tbaa !5
  %937 = getelementptr inbounds i32, ptr %936, i64 3
  %938 = load i32, ptr %937, align 4, !tbaa !15
  %939 = load ptr, ptr %5, align 8, !tbaa !5
  %940 = getelementptr inbounds i32, ptr %939, i64 4
  %941 = load i32, ptr %940, align 4, !tbaa !15
  %942 = load i32, ptr %9, align 4, !tbaa !16
  %943 = load i32, ptr %9, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %929, i32 noundef %932, i32 noundef %935, i32 noundef %938, i32 noundef %941, ptr noundef @.str.955, i32 noundef %942, i32 noundef %943, i32 noundef 8, i32 noundef 8)
  br label %5106

944:                                              ; preds = %2
  %945 = load ptr, ptr %5, align 8, !tbaa !5
  %946 = getelementptr inbounds i32, ptr %945, i64 0
  %947 = load i32, ptr %946, align 4, !tbaa !15
  %948 = load ptr, ptr %5, align 8, !tbaa !5
  %949 = getelementptr inbounds i32, ptr %948, i64 1
  %950 = load i32, ptr %949, align 4, !tbaa !15
  %951 = load ptr, ptr %5, align 8, !tbaa !5
  %952 = getelementptr inbounds i32, ptr %951, i64 2
  %953 = load i32, ptr %952, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %947, i32 noundef %950, i32 noundef %953, ptr noundef @.str.956)
  br label %5106

954:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %955 = load ptr, ptr %5, align 8, !tbaa !5
  %956 = getelementptr inbounds i32, ptr %955, i64 2
  %957 = load i32, ptr %956, align 4, !tbaa !15
  %958 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %957)
  %959 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %958, i32 0, i32 2
  %960 = load i32, ptr %959, align 8, !tbaa !18
  store i32 %960, ptr %14, align 4, !tbaa !16
  %961 = load ptr, ptr %5, align 8, !tbaa !5
  %962 = getelementptr inbounds i32, ptr %961, i64 0
  %963 = load i32, ptr %962, align 4, !tbaa !15
  %964 = load ptr, ptr %5, align 8, !tbaa !5
  %965 = getelementptr inbounds i32, ptr %964, i64 1
  %966 = load i32, ptr %965, align 4, !tbaa !15
  %967 = load ptr, ptr %5, align 8, !tbaa !5
  %968 = getelementptr inbounds i32, ptr %967, i64 2
  %969 = load i32, ptr %968, align 4, !tbaa !15
  %970 = load i32, ptr %14, align 4, !tbaa !16
  %971 = load i32, ptr %14, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %963, i32 noundef %966, i32 noundef %969, ptr noundef @.str.957, i32 noundef %970, i32 noundef %971)
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %5106

972:                                              ; preds = %2
  %973 = load ptr, ptr %5, align 8, !tbaa !5
  %974 = getelementptr inbounds i32, ptr %973, i64 0
  %975 = load i32, ptr %974, align 4, !tbaa !15
  %976 = load ptr, ptr %5, align 8, !tbaa !5
  %977 = getelementptr inbounds i32, ptr %976, i64 1
  %978 = load i32, ptr %977, align 4, !tbaa !15
  %979 = load ptr, ptr %5, align 8, !tbaa !5
  %980 = getelementptr inbounds i32, ptr %979, i64 2
  %981 = load i32, ptr %980, align 4, !tbaa !15
  %982 = load ptr, ptr %5, align 8, !tbaa !5
  %983 = getelementptr inbounds i32, ptr %982, i64 3
  %984 = load i32, ptr %983, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %975, i32 noundef %978, i32 noundef %981, i32 noundef %984, ptr noundef @.str.958)
  br label %5106

985:                                              ; preds = %2
  %986 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %987 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %986, i32 0, i32 40
  %988 = load i8, ptr %987, align 1, !tbaa !44, !range !192, !noundef !193
  %989 = trunc i8 %988 to i1
  br i1 %989, label %997, label %990

990:                                              ; preds = %985
  %991 = load ptr, ptr %5, align 8, !tbaa !5
  %992 = getelementptr inbounds i32, ptr %991, i64 1
  %993 = load i32, ptr %992, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef %993)
  %994 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %15, i32 0, i32 0
  %995 = load i32, ptr %994, align 4
  %996 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %995, i32 noundef 42)
  br i1 %996, label %997, label %1010

997:                                              ; preds = %990, %985
  %998 = load ptr, ptr %5, align 8, !tbaa !5
  %999 = getelementptr inbounds i32, ptr %998, i64 0
  %1000 = load i32, ptr %999, align 4, !tbaa !15
  %1001 = load ptr, ptr %5, align 8, !tbaa !5
  %1002 = getelementptr inbounds i32, ptr %1001, i64 1
  %1003 = load i32, ptr %1002, align 4, !tbaa !15
  %1004 = load ptr, ptr %5, align 8, !tbaa !5
  %1005 = getelementptr inbounds i32, ptr %1004, i64 2
  %1006 = load i32, ptr %1005, align 4, !tbaa !15
  %1007 = load ptr, ptr %5, align 8, !tbaa !5
  %1008 = getelementptr inbounds i32, ptr %1007, i64 3
  %1009 = load i32, ptr %1008, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1000, i32 noundef %1003, i32 noundef %1006, i32 noundef %1009, ptr noundef @.str.959)
  br label %1023

1010:                                             ; preds = %990
  %1011 = load ptr, ptr %5, align 8, !tbaa !5
  %1012 = getelementptr inbounds i32, ptr %1011, i64 0
  %1013 = load i32, ptr %1012, align 4, !tbaa !15
  %1014 = load ptr, ptr %5, align 8, !tbaa !5
  %1015 = getelementptr inbounds i32, ptr %1014, i64 1
  %1016 = load i32, ptr %1015, align 4, !tbaa !15
  %1017 = load ptr, ptr %5, align 8, !tbaa !5
  %1018 = getelementptr inbounds i32, ptr %1017, i64 2
  %1019 = load i32, ptr %1018, align 4, !tbaa !15
  %1020 = load ptr, ptr %5, align 8, !tbaa !5
  %1021 = getelementptr inbounds i32, ptr %1020, i64 3
  %1022 = load i32, ptr %1021, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1013, i32 noundef %1016, i32 noundef %1019, i32 noundef %1022, ptr noundef @.str.960)
  br label %1023

1023:                                             ; preds = %1010, %997
  br label %5106

1024:                                             ; preds = %2
  %1025 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %1026 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1025, i32 0, i32 40
  %1027 = load i8, ptr %1026, align 1, !tbaa !44, !range !192, !noundef !193
  %1028 = trunc i8 %1027 to i1
  br i1 %1028, label %1036, label %1029

1029:                                             ; preds = %1024
  %1030 = load ptr, ptr %5, align 8, !tbaa !5
  %1031 = getelementptr inbounds i32, ptr %1030, i64 1
  %1032 = load i32, ptr %1031, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef %1032)
  %1033 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %16, i32 0, i32 0
  %1034 = load i32, ptr %1033, align 4
  %1035 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1034, i32 noundef 42)
  br i1 %1035, label %1036, label %1049

1036:                                             ; preds = %1029, %1024
  %1037 = load ptr, ptr %5, align 8, !tbaa !5
  %1038 = getelementptr inbounds i32, ptr %1037, i64 0
  %1039 = load i32, ptr %1038, align 4, !tbaa !15
  %1040 = load ptr, ptr %5, align 8, !tbaa !5
  %1041 = getelementptr inbounds i32, ptr %1040, i64 1
  %1042 = load i32, ptr %1041, align 4, !tbaa !15
  %1043 = load ptr, ptr %5, align 8, !tbaa !5
  %1044 = getelementptr inbounds i32, ptr %1043, i64 2
  %1045 = load i32, ptr %1044, align 4, !tbaa !15
  %1046 = load ptr, ptr %5, align 8, !tbaa !5
  %1047 = getelementptr inbounds i32, ptr %1046, i64 3
  %1048 = load i32, ptr %1047, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1039, i32 noundef %1042, i32 noundef %1045, i32 noundef %1048, ptr noundef @.str.961)
  br label %1062

1049:                                             ; preds = %1029
  %1050 = load ptr, ptr %5, align 8, !tbaa !5
  %1051 = getelementptr inbounds i32, ptr %1050, i64 0
  %1052 = load i32, ptr %1051, align 4, !tbaa !15
  %1053 = load ptr, ptr %5, align 8, !tbaa !5
  %1054 = getelementptr inbounds i32, ptr %1053, i64 1
  %1055 = load i32, ptr %1054, align 4, !tbaa !15
  %1056 = load ptr, ptr %5, align 8, !tbaa !5
  %1057 = getelementptr inbounds i32, ptr %1056, i64 2
  %1058 = load i32, ptr %1057, align 4, !tbaa !15
  %1059 = load ptr, ptr %5, align 8, !tbaa !5
  %1060 = getelementptr inbounds i32, ptr %1059, i64 3
  %1061 = load i32, ptr %1060, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1052, i32 noundef %1055, i32 noundef %1058, i32 noundef %1061, ptr noundef @.str.962)
  br label %1062

1062:                                             ; preds = %1049, %1036
  br label %5106

1063:                                             ; preds = %2
  %1064 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %1065 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1064, i32 0, i32 40
  %1066 = load i8, ptr %1065, align 1, !tbaa !44, !range !192, !noundef !193
  %1067 = trunc i8 %1066 to i1
  br i1 %1067, label %1075, label %1068

1068:                                             ; preds = %1063
  %1069 = load ptr, ptr %5, align 8, !tbaa !5
  %1070 = getelementptr inbounds i32, ptr %1069, i64 1
  %1071 = load i32, ptr %1070, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %1071)
  %1072 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %17, i32 0, i32 0
  %1073 = load i32, ptr %1072, align 4
  %1074 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1073, i32 noundef 42)
  br i1 %1074, label %1075, label %1088

1075:                                             ; preds = %1068, %1063
  %1076 = load ptr, ptr %5, align 8, !tbaa !5
  %1077 = getelementptr inbounds i32, ptr %1076, i64 0
  %1078 = load i32, ptr %1077, align 4, !tbaa !15
  %1079 = load ptr, ptr %5, align 8, !tbaa !5
  %1080 = getelementptr inbounds i32, ptr %1079, i64 1
  %1081 = load i32, ptr %1080, align 4, !tbaa !15
  %1082 = load ptr, ptr %5, align 8, !tbaa !5
  %1083 = getelementptr inbounds i32, ptr %1082, i64 2
  %1084 = load i32, ptr %1083, align 4, !tbaa !15
  %1085 = load ptr, ptr %5, align 8, !tbaa !5
  %1086 = getelementptr inbounds i32, ptr %1085, i64 3
  %1087 = load i32, ptr %1086, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1078, i32 noundef %1081, i32 noundef %1084, i32 noundef %1087, ptr noundef @.str.963)
  br label %1101

1088:                                             ; preds = %1068
  %1089 = load ptr, ptr %5, align 8, !tbaa !5
  %1090 = getelementptr inbounds i32, ptr %1089, i64 0
  %1091 = load i32, ptr %1090, align 4, !tbaa !15
  %1092 = load ptr, ptr %5, align 8, !tbaa !5
  %1093 = getelementptr inbounds i32, ptr %1092, i64 1
  %1094 = load i32, ptr %1093, align 4, !tbaa !15
  %1095 = load ptr, ptr %5, align 8, !tbaa !5
  %1096 = getelementptr inbounds i32, ptr %1095, i64 2
  %1097 = load i32, ptr %1096, align 4, !tbaa !15
  %1098 = load ptr, ptr %5, align 8, !tbaa !5
  %1099 = getelementptr inbounds i32, ptr %1098, i64 3
  %1100 = load i32, ptr %1099, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1091, i32 noundef %1094, i32 noundef %1097, i32 noundef %1100, ptr noundef @.str.950)
  br label %1101

1101:                                             ; preds = %1088, %1075
  br label %5106

1102:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %1103 = load ptr, ptr %5, align 8, !tbaa !5
  %1104 = getelementptr inbounds i32, ptr %1103, i64 0
  %1105 = load i32, ptr %1104, align 4, !tbaa !15
  store i32 %1105, ptr %18, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %1106 = load ptr, ptr %5, align 8, !tbaa !5
  %1107 = getelementptr inbounds i32, ptr %1106, i64 1
  %1108 = load i32, ptr %1107, align 4, !tbaa !15
  store i32 %1108, ptr %19, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  %1109 = load ptr, ptr %5, align 8, !tbaa !5
  %1110 = getelementptr inbounds i32, ptr %1109, i64 2
  %1111 = load i32, ptr %1110, align 4, !tbaa !15
  store i32 %1111, ptr %20, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %1112 = load ptr, ptr %5, align 8, !tbaa !5
  %1113 = getelementptr inbounds i32, ptr %1112, i64 4
  %1114 = load i32, ptr %1113, align 4, !tbaa !15
  store i32 %1114, ptr %21, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %1115 = load ptr, ptr %5, align 8, !tbaa !5
  %1116 = getelementptr inbounds i32, ptr %1115, i64 5
  %1117 = load i32, ptr %1116, align 4, !tbaa !15
  store i32 %1117, ptr %22, align 4, !tbaa !15
  %1118 = load i32, ptr %18, align 4, !tbaa !15
  %1119 = load i32, ptr %19, align 4, !tbaa !15
  %1120 = load i32, ptr %6, align 4, !tbaa !13
  %1121 = load i32, ptr %21, align 4, !tbaa !15
  %1122 = load i32, ptr %21, align 4, !tbaa !15
  %1123 = load i32, ptr %20, align 4, !tbaa !15
  %1124 = load i32, ptr %22, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1118, i32 noundef %1119, ptr noundef @.str.964, i32 noundef %1120, i32 noundef %1121, i32 noundef %1122, i1 noundef zeroext false, i32 noundef %1123, i32 noundef %1124, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %5106

1125:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %1126 = load ptr, ptr %5, align 8, !tbaa !5
  %1127 = getelementptr inbounds i32, ptr %1126, i64 0
  %1128 = load i32, ptr %1127, align 4, !tbaa !15
  store i32 %1128, ptr %23, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %1129 = load ptr, ptr %5, align 8, !tbaa !5
  %1130 = getelementptr inbounds i32, ptr %1129, i64 1
  %1131 = load i32, ptr %1130, align 4, !tbaa !15
  store i32 %1131, ptr %24, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %1132 = load ptr, ptr %5, align 8, !tbaa !5
  %1133 = getelementptr inbounds i32, ptr %1132, i64 2
  %1134 = load i32, ptr %1133, align 4, !tbaa !15
  store i32 %1134, ptr %25, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %1135 = load ptr, ptr %5, align 8, !tbaa !5
  %1136 = getelementptr inbounds i32, ptr %1135, i64 4
  %1137 = load i32, ptr %1136, align 4, !tbaa !15
  store i32 %1137, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %1138 = load ptr, ptr %5, align 8, !tbaa !5
  %1139 = getelementptr inbounds i32, ptr %1138, i64 5
  %1140 = load i32, ptr %1139, align 4, !tbaa !15
  store i32 %1140, ptr %27, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %1141 = load ptr, ptr %5, align 8, !tbaa !5
  %1142 = getelementptr inbounds i32, ptr %1141, i64 6
  %1143 = load i32, ptr %1142, align 4, !tbaa !15
  store i32 %1143, ptr %28, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %1144 = load ptr, ptr %5, align 8, !tbaa !5
  %1145 = getelementptr inbounds i32, ptr %1144, i64 7
  %1146 = load i32, ptr %1145, align 4, !tbaa !15
  store i32 %1146, ptr %29, align 4, !tbaa !15
  %1147 = load i32, ptr %23, align 4, !tbaa !15
  %1148 = load i32, ptr %24, align 4, !tbaa !15
  %1149 = load i32, ptr %6, align 4, !tbaa !13
  %1150 = load i32, ptr %26, align 4, !tbaa !15
  %1151 = load i32, ptr %27, align 4, !tbaa !15
  %1152 = load i32, ptr %25, align 4, !tbaa !15
  %1153 = load i32, ptr %29, align 4, !tbaa !15
  %1154 = load i32, ptr %28, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1147, i32 noundef %1148, ptr noundef @.str.965, i32 noundef %1149, i32 noundef %1150, i32 noundef %1151, i1 noundef zeroext true, i32 noundef %1152, i32 noundef %1153, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef %1154)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %5106

1155:                                             ; preds = %2
  %1156 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1156, ptr noundef @.str.966)
          to label %1157 unwind label %1158

1157:                                             ; preds = %1155
  call void @__cxa_throw(ptr %1156, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1158:                                             ; preds = %1155
  %1159 = landingpad { ptr, i32 }
          cleanup
  %1160 = extractvalue { ptr, i32 } %1159, 0
  store ptr %1160, ptr %30, align 8
  %1161 = extractvalue { ptr, i32 } %1159, 1
  store i32 %1161, ptr %31, align 4
  call void @__cxa_free_exception(ptr %1156) #9
  br label %5109

1162:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %1163 = load ptr, ptr %5, align 8, !tbaa !5
  %1164 = getelementptr inbounds i32, ptr %1163, i64 0
  %1165 = load i32, ptr %1164, align 4, !tbaa !15
  store i32 %1165, ptr %32, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %1166 = load ptr, ptr %5, align 8, !tbaa !5
  %1167 = getelementptr inbounds i32, ptr %1166, i64 1
  %1168 = load i32, ptr %1167, align 4, !tbaa !15
  store i32 %1168, ptr %33, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %1169 = load ptr, ptr %5, align 8, !tbaa !5
  %1170 = getelementptr inbounds i32, ptr %1169, i64 2
  %1171 = load i32, ptr %1170, align 4, !tbaa !15
  store i32 %1171, ptr %34, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %1172 = load ptr, ptr %5, align 8, !tbaa !5
  %1173 = getelementptr inbounds i32, ptr %1172, i64 4
  %1174 = load i32, ptr %1173, align 4, !tbaa !15
  store i32 %1174, ptr %35, align 4, !tbaa !15
  %1175 = load i32, ptr %34, align 4, !tbaa !15
  %1176 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1175)
  %1177 = load i32, ptr %32, align 4, !tbaa !15
  %1178 = load i32, ptr %33, align 4, !tbaa !15
  %1179 = load i32, ptr %6, align 4, !tbaa !13
  %1180 = load i32, ptr %35, align 4, !tbaa !15
  %1181 = load i32, ptr %35, align 4, !tbaa !15
  %1182 = load i32, ptr %34, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1177, i32 noundef %1178, ptr noundef @.str.967, i32 noundef %1179, i32 noundef %1180, i32 noundef %1181, i1 noundef zeroext false, i32 noundef %1182, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %5106

1183:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %1184 = load ptr, ptr %5, align 8, !tbaa !5
  %1185 = getelementptr inbounds i32, ptr %1184, i64 0
  %1186 = load i32, ptr %1185, align 4, !tbaa !15
  %1187 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1186)
  %1188 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1187, i32 0, i32 1
  %1189 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1188)
  store i32 %1189, ptr %36, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  %1190 = load ptr, ptr %5, align 8, !tbaa !5
  %1191 = getelementptr inbounds i32, ptr %1190, i64 0
  %1192 = load i32, ptr %1191, align 4, !tbaa !15
  store i32 %1192, ptr %37, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %1193 = load ptr, ptr %5, align 8, !tbaa !5
  %1194 = getelementptr inbounds i32, ptr %1193, i64 0
  %1195 = load i32, ptr %1194, align 4, !tbaa !15
  store i32 %1195, ptr %38, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  %1196 = load ptr, ptr %5, align 8, !tbaa !5
  %1197 = getelementptr inbounds i32, ptr %1196, i64 2
  %1198 = load i32, ptr %1197, align 4, !tbaa !15
  store i32 %1198, ptr %39, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %1199 = load ptr, ptr %5, align 8, !tbaa !5
  %1200 = getelementptr inbounds i32, ptr %1199, i64 3
  %1201 = load i32, ptr %1200, align 4, !tbaa !15
  store i32 %1201, ptr %40, align 4, !tbaa !15
  %1202 = load i32, ptr %38, align 4, !tbaa !15
  %1203 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1202)
  %1204 = load i32, ptr %36, align 4, !tbaa !15
  %1205 = load i32, ptr %37, align 4, !tbaa !15
  %1206 = load i32, ptr %6, align 4, !tbaa !13
  %1207 = load i32, ptr %39, align 4, !tbaa !15
  %1208 = load i32, ptr %39, align 4, !tbaa !15
  %1209 = load i32, ptr %38, align 4, !tbaa !15
  %1210 = load i32, ptr %40, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1204, i32 noundef %1205, ptr noundef @.str.968, i32 noundef %1206, i32 noundef %1207, i32 noundef %1208, i1 noundef zeroext false, i32 noundef %1209, i32 noundef %1210, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %5106

1211:                                             ; preds = %2
  br label %1212

1212:                                             ; preds = %1211
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %1213 = load ptr, ptr %5, align 8, !tbaa !5
  %1214 = getelementptr inbounds i32, ptr %1213, i64 0
  %1215 = load i32, ptr %1214, align 4, !tbaa !15
  store i32 %1215, ptr %41, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %1216 = load ptr, ptr %5, align 8, !tbaa !5
  %1217 = getelementptr inbounds i32, ptr %1216, i64 1
  %1218 = load i32, ptr %1217, align 4, !tbaa !15
  store i32 %1218, ptr %42, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %1219 = load ptr, ptr %5, align 8, !tbaa !5
  %1220 = getelementptr inbounds i32, ptr %1219, i64 2
  %1221 = load i32, ptr %1220, align 4, !tbaa !15
  store i32 %1221, ptr %43, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %1222 = load ptr, ptr %5, align 8, !tbaa !5
  %1223 = getelementptr inbounds i32, ptr %1222, i64 4
  %1224 = load i32, ptr %1223, align 4, !tbaa !15
  store i32 %1224, ptr %44, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 1, ptr %45, align 4, !tbaa !15
  %1225 = load i32, ptr %41, align 4, !tbaa !15
  %1226 = load i32, ptr %42, align 4, !tbaa !15
  %1227 = load i32, ptr %6, align 4, !tbaa !13
  %1228 = load i32, ptr %44, align 4, !tbaa !15
  %1229 = load i32, ptr %44, align 4, !tbaa !15
  %1230 = load i32, ptr %43, align 4, !tbaa !15
  %1231 = load i32, ptr %45, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1225, i32 noundef %1226, ptr noundef @.str.969, i32 noundef %1227, i32 noundef %1228, i32 noundef %1229, i1 noundef zeroext false, i32 noundef %1230, i32 noundef %1231, i1 noundef zeroext false, i1 noundef zeroext true, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %1232

1232:                                             ; preds = %1212
  br label %1233

1233:                                             ; preds = %1232
  br label %5106

1234:                                             ; preds = %2
  br label %1235

1235:                                             ; preds = %1234
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %1236 = load ptr, ptr %5, align 8, !tbaa !5
  %1237 = getelementptr inbounds i32, ptr %1236, i64 0
  %1238 = load i32, ptr %1237, align 4, !tbaa !15
  store i32 %1238, ptr %46, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %1239 = load ptr, ptr %5, align 8, !tbaa !5
  %1240 = getelementptr inbounds i32, ptr %1239, i64 1
  %1241 = load i32, ptr %1240, align 4, !tbaa !15
  store i32 %1241, ptr %47, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %1242 = load ptr, ptr %5, align 8, !tbaa !5
  %1243 = getelementptr inbounds i32, ptr %1242, i64 2
  %1244 = load i32, ptr %1243, align 4, !tbaa !15
  store i32 %1244, ptr %48, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %1245 = load ptr, ptr %5, align 8, !tbaa !5
  %1246 = getelementptr inbounds i32, ptr %1245, i64 4
  %1247 = load i32, ptr %1246, align 4, !tbaa !15
  store i32 %1247, ptr %49, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  store i32 1, ptr %50, align 4, !tbaa !15
  %1248 = load i32, ptr %46, align 4, !tbaa !15
  %1249 = load i32, ptr %47, align 4, !tbaa !15
  %1250 = load i32, ptr %6, align 4, !tbaa !13
  %1251 = load i32, ptr %49, align 4, !tbaa !15
  %1252 = load i32, ptr %49, align 4, !tbaa !15
  %1253 = load i32, ptr %48, align 4, !tbaa !15
  %1254 = load i32, ptr %50, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1248, i32 noundef %1249, ptr noundef @.str.970, i32 noundef %1250, i32 noundef %1251, i32 noundef %1252, i1 noundef zeroext false, i32 noundef %1253, i32 noundef %1254, i1 noundef zeroext false, i1 noundef zeroext true, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %1255

1255:                                             ; preds = %1235
  br label %1256

1256:                                             ; preds = %1255
  br label %5106

1257:                                             ; preds = %2, %2
  br label %1258

1258:                                             ; preds = %1257
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  %1259 = load ptr, ptr %5, align 8, !tbaa !5
  %1260 = getelementptr inbounds i32, ptr %1259, i64 0
  %1261 = load i32, ptr %1260, align 4, !tbaa !15
  store i32 %1261, ptr %51, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  %1262 = load ptr, ptr %5, align 8, !tbaa !5
  %1263 = getelementptr inbounds i32, ptr %1262, i64 1
  %1264 = load i32, ptr %1263, align 4, !tbaa !15
  store i32 %1264, ptr %52, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  %1265 = load ptr, ptr %5, align 8, !tbaa !5
  %1266 = getelementptr inbounds i32, ptr %1265, i64 2
  %1267 = load i32, ptr %1266, align 4, !tbaa !15
  store i32 %1267, ptr %53, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  %1268 = load ptr, ptr %5, align 8, !tbaa !5
  %1269 = getelementptr inbounds i32, ptr %1268, i64 4
  %1270 = load i32, ptr %1269, align 4, !tbaa !15
  store i32 %1270, ptr %54, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %1271 = load ptr, ptr %5, align 8, !tbaa !5
  %1272 = getelementptr inbounds i32, ptr %1271, i64 5
  %1273 = load i32, ptr %1272, align 4, !tbaa !15
  store i32 %1273, ptr %55, align 4, !tbaa !15
  %1274 = load i32, ptr %51, align 4, !tbaa !15
  %1275 = load i32, ptr %52, align 4, !tbaa !15
  %1276 = load i32, ptr %6, align 4, !tbaa !13
  %1277 = load i32, ptr %54, align 4, !tbaa !15
  %1278 = load i32, ptr %54, align 4, !tbaa !15
  %1279 = load i32, ptr %53, align 4, !tbaa !15
  %1280 = load i32, ptr %55, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1274, i32 noundef %1275, ptr noundef @.str.969, i32 noundef %1276, i32 noundef %1277, i32 noundef %1278, i1 noundef zeroext false, i32 noundef %1279, i32 noundef %1280, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  br label %1281

1281:                                             ; preds = %1258
  br label %1282

1282:                                             ; preds = %1281
  br label %5106

1283:                                             ; preds = %2
  br label %1284

1284:                                             ; preds = %1283
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %1285 = load ptr, ptr %5, align 8, !tbaa !5
  %1286 = getelementptr inbounds i32, ptr %1285, i64 0
  %1287 = load i32, ptr %1286, align 4, !tbaa !15
  store i32 %1287, ptr %56, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %1288 = load ptr, ptr %5, align 8, !tbaa !5
  %1289 = getelementptr inbounds i32, ptr %1288, i64 1
  %1290 = load i32, ptr %1289, align 4, !tbaa !15
  store i32 %1290, ptr %57, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #9
  %1291 = load ptr, ptr %5, align 8, !tbaa !5
  %1292 = getelementptr inbounds i32, ptr %1291, i64 2
  %1293 = load i32, ptr %1292, align 4, !tbaa !15
  store i32 %1293, ptr %58, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %1294 = load ptr, ptr %5, align 8, !tbaa !5
  %1295 = getelementptr inbounds i32, ptr %1294, i64 4
  %1296 = load i32, ptr %1295, align 4, !tbaa !15
  store i32 %1296, ptr %59, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #9
  %1297 = load ptr, ptr %5, align 8, !tbaa !5
  %1298 = getelementptr inbounds i32, ptr %1297, i64 5
  %1299 = load i32, ptr %1298, align 4, !tbaa !15
  store i32 %1299, ptr %60, align 4, !tbaa !15
  %1300 = load i32, ptr %56, align 4, !tbaa !15
  %1301 = load i32, ptr %57, align 4, !tbaa !15
  %1302 = load i32, ptr %6, align 4, !tbaa !13
  %1303 = load i32, ptr %59, align 4, !tbaa !15
  %1304 = load i32, ptr %59, align 4, !tbaa !15
  %1305 = load i32, ptr %58, align 4, !tbaa !15
  %1306 = load i32, ptr %60, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1300, i32 noundef %1301, ptr noundef @.str.970, i32 noundef %1302, i32 noundef %1303, i32 noundef %1304, i1 noundef zeroext false, i32 noundef %1305, i32 noundef %1306, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %1307

1307:                                             ; preds = %1284
  br label %1308

1308:                                             ; preds = %1307
  br label %5106

1309:                                             ; preds = %2, %2
  br label %1310

1310:                                             ; preds = %1309
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  %1311 = load ptr, ptr %5, align 8, !tbaa !5
  %1312 = getelementptr inbounds i32, ptr %1311, i64 0
  %1313 = load i32, ptr %1312, align 4, !tbaa !15
  store i32 %1313, ptr %61, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #9
  %1314 = load ptr, ptr %5, align 8, !tbaa !5
  %1315 = getelementptr inbounds i32, ptr %1314, i64 1
  %1316 = load i32, ptr %1315, align 4, !tbaa !15
  store i32 %1316, ptr %62, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #9
  %1317 = load ptr, ptr %5, align 8, !tbaa !5
  %1318 = getelementptr inbounds i32, ptr %1317, i64 2
  %1319 = load i32, ptr %1318, align 4, !tbaa !15
  store i32 %1319, ptr %63, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #9
  %1320 = load ptr, ptr %5, align 8, !tbaa !5
  %1321 = getelementptr inbounds i32, ptr %1320, i64 4
  %1322 = load i32, ptr %1321, align 4, !tbaa !15
  store i32 %1322, ptr %64, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  %1323 = load ptr, ptr %5, align 8, !tbaa !5
  %1324 = getelementptr inbounds i32, ptr %1323, i64 5
  %1325 = load i32, ptr %1324, align 4, !tbaa !15
  store i32 %1325, ptr %65, align 4, !tbaa !15
  %1326 = load i32, ptr %61, align 4, !tbaa !15
  %1327 = load i32, ptr %62, align 4, !tbaa !15
  %1328 = load i32, ptr %6, align 4, !tbaa !13
  %1329 = load i32, ptr %64, align 4, !tbaa !15
  %1330 = load i32, ptr %64, align 4, !tbaa !15
  %1331 = load i32, ptr %63, align 4, !tbaa !15
  %1332 = load i32, ptr %65, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1326, i32 noundef %1327, ptr noundef @.str.971, i32 noundef %1328, i32 noundef %1329, i32 noundef %1330, i1 noundef zeroext false, i32 noundef %1331, i32 noundef %1332, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %1333

1333:                                             ; preds = %1310
  br label %1334

1334:                                             ; preds = %1333
  br label %5106

1335:                                             ; preds = %2, %2
  br label %1336

1336:                                             ; preds = %1335
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  %1337 = load ptr, ptr %5, align 8, !tbaa !5
  %1338 = getelementptr inbounds i32, ptr %1337, i64 0
  %1339 = load i32, ptr %1338, align 4, !tbaa !15
  store i32 %1339, ptr %66, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  %1340 = load ptr, ptr %5, align 8, !tbaa !5
  %1341 = getelementptr inbounds i32, ptr %1340, i64 1
  %1342 = load i32, ptr %1341, align 4, !tbaa !15
  store i32 %1342, ptr %67, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  %1343 = load ptr, ptr %5, align 8, !tbaa !5
  %1344 = getelementptr inbounds i32, ptr %1343, i64 2
  %1345 = load i32, ptr %1344, align 4, !tbaa !15
  store i32 %1345, ptr %68, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  %1346 = load ptr, ptr %5, align 8, !tbaa !5
  %1347 = getelementptr inbounds i32, ptr %1346, i64 4
  %1348 = load i32, ptr %1347, align 4, !tbaa !15
  store i32 %1348, ptr %69, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  %1349 = load ptr, ptr %5, align 8, !tbaa !5
  %1350 = getelementptr inbounds i32, ptr %1349, i64 5
  %1351 = load i32, ptr %1350, align 4, !tbaa !15
  store i32 %1351, ptr %70, align 4, !tbaa !15
  %1352 = load i32, ptr %66, align 4, !tbaa !15
  %1353 = load i32, ptr %67, align 4, !tbaa !15
  %1354 = load i32, ptr %6, align 4, !tbaa !13
  %1355 = load i32, ptr %69, align 4, !tbaa !15
  %1356 = load i32, ptr %69, align 4, !tbaa !15
  %1357 = load i32, ptr %68, align 4, !tbaa !15
  %1358 = load i32, ptr %70, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1352, i32 noundef %1353, ptr noundef @.str.972, i32 noundef %1354, i32 noundef %1355, i32 noundef %1356, i1 noundef zeroext false, i32 noundef %1357, i32 noundef %1358, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  br label %1359

1359:                                             ; preds = %1336
  br label %1360

1360:                                             ; preds = %1359
  br label %5106

1361:                                             ; preds = %2
  br label %1362

1362:                                             ; preds = %1361
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  %1363 = load ptr, ptr %5, align 8, !tbaa !5
  %1364 = getelementptr inbounds i32, ptr %1363, i64 0
  %1365 = load i32, ptr %1364, align 4, !tbaa !15
  store i32 %1365, ptr %71, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #9
  %1366 = load ptr, ptr %5, align 8, !tbaa !5
  %1367 = getelementptr inbounds i32, ptr %1366, i64 1
  %1368 = load i32, ptr %1367, align 4, !tbaa !15
  store i32 %1368, ptr %72, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  %1369 = load ptr, ptr %5, align 8, !tbaa !5
  %1370 = getelementptr inbounds i32, ptr %1369, i64 2
  %1371 = load i32, ptr %1370, align 4, !tbaa !15
  store i32 %1371, ptr %73, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  %1372 = load ptr, ptr %5, align 8, !tbaa !5
  %1373 = getelementptr inbounds i32, ptr %1372, i64 4
  %1374 = load i32, ptr %1373, align 4, !tbaa !15
  store i32 %1374, ptr %74, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %1375 = load ptr, ptr %5, align 8, !tbaa !5
  %1376 = getelementptr inbounds i32, ptr %1375, i64 5
  %1377 = load i32, ptr %1376, align 4, !tbaa !15
  store i32 %1377, ptr %75, align 4, !tbaa !15
  %1378 = load i32, ptr %71, align 4, !tbaa !15
  %1379 = load i32, ptr %72, align 4, !tbaa !15
  %1380 = load i32, ptr %6, align 4, !tbaa !13
  %1381 = load i32, ptr %74, align 4, !tbaa !15
  %1382 = load i32, ptr %74, align 4, !tbaa !15
  %1383 = load i32, ptr %73, align 4, !tbaa !15
  %1384 = load i32, ptr %75, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1378, i32 noundef %1379, ptr noundef @.str.973, i32 noundef %1380, i32 noundef %1381, i32 noundef %1382, i1 noundef zeroext false, i32 noundef %1383, i32 noundef %1384, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  br label %1385

1385:                                             ; preds = %1362
  br label %1386

1386:                                             ; preds = %1385
  br label %5106

1387:                                             ; preds = %2
  br label %1388

1388:                                             ; preds = %1387
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %1389 = load ptr, ptr %5, align 8, !tbaa !5
  %1390 = getelementptr inbounds i32, ptr %1389, i64 0
  %1391 = load i32, ptr %1390, align 4, !tbaa !15
  store i32 %1391, ptr %76, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #9
  %1392 = load ptr, ptr %5, align 8, !tbaa !5
  %1393 = getelementptr inbounds i32, ptr %1392, i64 1
  %1394 = load i32, ptr %1393, align 4, !tbaa !15
  store i32 %1394, ptr %77, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %1395 = load ptr, ptr %5, align 8, !tbaa !5
  %1396 = getelementptr inbounds i32, ptr %1395, i64 2
  %1397 = load i32, ptr %1396, align 4, !tbaa !15
  store i32 %1397, ptr %78, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %1398 = load ptr, ptr %5, align 8, !tbaa !5
  %1399 = getelementptr inbounds i32, ptr %1398, i64 4
  %1400 = load i32, ptr %1399, align 4, !tbaa !15
  store i32 %1400, ptr %79, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %1401 = load ptr, ptr %5, align 8, !tbaa !5
  %1402 = getelementptr inbounds i32, ptr %1401, i64 5
  %1403 = load i32, ptr %1402, align 4, !tbaa !15
  store i32 %1403, ptr %80, align 4, !tbaa !15
  %1404 = load i32, ptr %76, align 4, !tbaa !15
  %1405 = load i32, ptr %77, align 4, !tbaa !15
  %1406 = load i32, ptr %6, align 4, !tbaa !13
  %1407 = load i32, ptr %79, align 4, !tbaa !15
  %1408 = load i32, ptr %79, align 4, !tbaa !15
  %1409 = load i32, ptr %78, align 4, !tbaa !15
  %1410 = load i32, ptr %80, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1404, i32 noundef %1405, ptr noundef @.str.974, i32 noundef %1406, i32 noundef %1407, i32 noundef %1408, i1 noundef zeroext false, i32 noundef %1409, i32 noundef %1410, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  br label %1411

1411:                                             ; preds = %1388
  br label %1412

1412:                                             ; preds = %1411
  br label %5106

1413:                                             ; preds = %2
  br label %1414

1414:                                             ; preds = %1413
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  %1415 = load ptr, ptr %5, align 8, !tbaa !5
  %1416 = getelementptr inbounds i32, ptr %1415, i64 0
  %1417 = load i32, ptr %1416, align 4, !tbaa !15
  store i32 %1417, ptr %81, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %1418 = load ptr, ptr %5, align 8, !tbaa !5
  %1419 = getelementptr inbounds i32, ptr %1418, i64 1
  %1420 = load i32, ptr %1419, align 4, !tbaa !15
  store i32 %1420, ptr %82, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  %1421 = load ptr, ptr %5, align 8, !tbaa !5
  %1422 = getelementptr inbounds i32, ptr %1421, i64 2
  %1423 = load i32, ptr %1422, align 4, !tbaa !15
  store i32 %1423, ptr %83, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #9
  %1424 = load ptr, ptr %5, align 8, !tbaa !5
  %1425 = getelementptr inbounds i32, ptr %1424, i64 4
  %1426 = load i32, ptr %1425, align 4, !tbaa !15
  store i32 %1426, ptr %84, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #9
  %1427 = load ptr, ptr %5, align 8, !tbaa !5
  %1428 = getelementptr inbounds i32, ptr %1427, i64 5
  %1429 = load i32, ptr %1428, align 4, !tbaa !15
  store i32 %1429, ptr %85, align 4, !tbaa !15
  %1430 = load i32, ptr %81, align 4, !tbaa !15
  %1431 = load i32, ptr %82, align 4, !tbaa !15
  %1432 = load i32, ptr %6, align 4, !tbaa !13
  %1433 = load i32, ptr %84, align 4, !tbaa !15
  %1434 = load i32, ptr %84, align 4, !tbaa !15
  %1435 = load i32, ptr %83, align 4, !tbaa !15
  %1436 = load i32, ptr %85, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %1430, i32 noundef %1431, ptr noundef @.str.975, i32 noundef %1432, i32 noundef %1433, i32 noundef %1434, i1 noundef zeroext false, i32 noundef %1435, i32 noundef %1436, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  br label %1437

1437:                                             ; preds = %1414
  br label %1438

1438:                                             ; preds = %1437
  br label %5106

1439:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #9
  %1440 = load ptr, ptr %5, align 8, !tbaa !5
  %1441 = getelementptr inbounds i32, ptr %1440, i64 2
  %1442 = load i32, ptr %1441, align 4, !tbaa !15
  store i32 %1442, ptr %86, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #9
  %1443 = load i32, ptr %86, align 4, !tbaa !15
  %1444 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1443)
  store ptr %1444, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #9
  %1445 = load i32, ptr %86, align 4, !tbaa !15
  %1446 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1445)
  store ptr %1446, ptr %88, align 8, !tbaa !5
  %1447 = load ptr, ptr %87, align 8, !tbaa !5
  %1448 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1447, i32 0, i32 14
  %1449 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1448, i32 0, i32 1
  %1450 = load i32, ptr %1449, align 4, !tbaa !194
  %1451 = icmp ne i32 %1450, 6
  br i1 %1451, label %1452, label %1467

1452:                                             ; preds = %1439
  %1453 = load ptr, ptr %88, align 8, !tbaa !5
  %1454 = icmp ne ptr %1453, null
  br i1 %1454, label %1455, label %1466

1455:                                             ; preds = %1452
  %1456 = load ptr, ptr %88, align 8, !tbaa !5
  %1457 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1456, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %89, ptr align 8 %1457, i64 4, i1 false), !tbaa.struct !195
  %1458 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %89, i32 0, i32 0
  %1459 = load i32, ptr %1458, align 4
  %1460 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1459, i32 noundef 25)
  br i1 %1460, label %1461, label %1466

1461:                                             ; preds = %1455
  %1462 = load ptr, ptr %88, align 8, !tbaa !5
  %1463 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1462, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 8 %1463, i64 4, i1 false), !tbaa.struct !195
  %1464 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %90, i32 0, i32 0
  %1465 = load i32, ptr %1464, align 4
  call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1465, i32 noundef 25)
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %448)
  br label %1466

1466:                                             ; preds = %1461, %1455, %1452
  br label %1467

1467:                                             ; preds = %1466, %1439
  %1468 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %1469 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %1468, i32 0, i32 61
  %1470 = load i8, ptr %1469, align 4, !tbaa !196, !range !192, !noundef !193
  %1471 = trunc i8 %1470 to i1
  br i1 %1471, label %1472, label %1488

1472:                                             ; preds = %1467
  %1473 = load ptr, ptr %88, align 8, !tbaa !5
  %1474 = icmp ne ptr %1473, null
  br i1 %1474, label %1475, label %1488

1475:                                             ; preds = %1472
  %1476 = load ptr, ptr %88, align 8, !tbaa !5
  %1477 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1476, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %91, ptr align 8 %1477, i64 4, i1 false), !tbaa.struct !195
  %1478 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %91, i32 0, i32 0
  %1479 = load i32, ptr %1478, align 4
  %1480 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1479, i32 noundef 24)
  br i1 %1480, label %1488, label %1481

1481:                                             ; preds = %1475
  call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %448, i8 noundef zeroext 73)
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #9
  %1482 = load i32, ptr %86, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1482, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA15_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 1 dereferenceable(15) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %1483 unwind label %1484

1483:                                             ; preds = %1481
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #9
  br label %1488

1484:                                             ; preds = %1481
  %1485 = landingpad { ptr, i32 }
          cleanup
  %1486 = extractvalue { ptr, i32 } %1485, 0
  store ptr %1486, ptr %30, align 8
  %1487 = extractvalue { ptr, i32 } %1485, 1
  store i32 %1487, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #9
  br label %5109

1488:                                             ; preds = %1483, %1475, %1472, %1467
  %1489 = load ptr, ptr %4, align 8, !tbaa !5
  %1490 = load ptr, ptr %448, align 8, !tbaa !197
  %1491 = getelementptr inbounds ptr, ptr %1490, i64 16
  %1492 = load ptr, ptr %1491, align 8
  call void %1492(ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 4 dereferenceable(12) %1489, i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #9
  br label %5106

1493:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %1494 = load ptr, ptr %5, align 8, !tbaa !5
  %1495 = getelementptr inbounds i32, ptr %1494, i64 2
  %1496 = load i32, ptr %1495, align 4, !tbaa !15
  %1497 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1496)
  store ptr %1497, ptr %93, align 8, !tbaa !5
  %1498 = load ptr, ptr %93, align 8, !tbaa !5
  %1499 = icmp ne ptr %1498, null
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #9
  br i1 %1499, label %1500, label %1507

1500:                                             ; preds = %1493
  %1501 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 109
  %1502 = load ptr, ptr %93, align 8, !tbaa !5
  %1503 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1502, i32 0, i32 1
  %1504 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1503)
  store i32 %1504, ptr %94, align 4, !tbaa !15
  %1505 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1501, ptr noundef nonnull align 4 dereferenceable(4) %94)
  %1506 = icmp ne i64 %1505, 0
  br label %1507

1507:                                             ; preds = %1500, %1493
  %1508 = phi i1 [ false, %1493 ], [ %1506, %1500 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  br i1 %1508, label %1509, label %1597

1509:                                             ; preds = %1507
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  %1510 = load ptr, ptr %5, align 8, !tbaa !5
  %1511 = getelementptr inbounds i32, ptr %1510, i64 0
  %1512 = load i32, ptr %1511, align 4, !tbaa !15
  store i32 %1512, ptr %95, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #9
  %1513 = load ptr, ptr %5, align 8, !tbaa !5
  %1514 = getelementptr inbounds i32, ptr %1513, i64 1
  %1515 = load i32, ptr %1514, align 4, !tbaa !15
  store i32 %1515, ptr %96, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %97) #9
  %1516 = load ptr, ptr %5, align 8, !tbaa !5
  %1517 = getelementptr inbounds i32, ptr %1516, i64 3
  %1518 = load i32, ptr %1517, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1518, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #9
  %1519 = load ptr, ptr %5, align 8, !tbaa !5
  %1520 = getelementptr inbounds i32, ptr %1519, i64 2
  %1521 = load i32, ptr %1520, align 4, !tbaa !15
  %1522 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1521)
          to label %1523 unwind label %1536

1523:                                             ; preds = %1509
  store ptr %1522, ptr %98, align 8, !tbaa !5
  %1524 = load ptr, ptr %98, 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 !194
  %1528 = icmp eq i32 %1527, 1
  br i1 %1528, label %1529, label %1549

1529:                                             ; preds = %1523
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #9
  %1530 = load ptr, ptr %5, align 8, !tbaa !5
  %1531 = getelementptr inbounds i32, ptr %1530, i64 2
  %1532 = load i32, ptr %1531, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1532, i1 noundef zeroext true)
          to label %1533 unwind label %1540

1533:                                             ; preds = %1529
  invoke void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 1 dereferenceable(23) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %100, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1534 unwind label %1544

1534:                                             ; preds = %1533
  %1535 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #9
  br label %1549

1536:                                             ; preds = %1509
  %1537 = landingpad { ptr, i32 }
          cleanup
  %1538 = extractvalue { ptr, i32 } %1537, 0
  store ptr %1538, ptr %30, align 8
  %1539 = extractvalue { ptr, i32 } %1537, 1
  store i32 %1539, ptr %31, align 4
  br label %1596

1540:                                             ; preds = %1529
  %1541 = landingpad { ptr, i32 }
          cleanup
  %1542 = extractvalue { ptr, i32 } %1541, 0
  store ptr %1542, ptr %30, align 8
  %1543 = extractvalue { ptr, i32 } %1541, 1
  store i32 %1543, ptr %31, align 4
  br label %1548

1544:                                             ; preds = %1533
  %1545 = landingpad { ptr, i32 }
          cleanup
  %1546 = extractvalue { ptr, i32 } %1545, 0
  store ptr %1546, ptr %30, align 8
  %1547 = extractvalue { ptr, i32 } %1545, 1
  store i32 %1547, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #9
  br label %1548

1548:                                             ; preds = %1544, %1540
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #9
  br label %1596

1549:                                             ; preds = %1534, %1523
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  %1550 = load i32, ptr %96, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #9
  %1551 = load ptr, ptr %5, align 8, !tbaa !5
  %1552 = getelementptr inbounds i32, ptr %1551, i64 2
  %1553 = load i32, ptr %1552, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1553, i1 noundef zeroext true)
          to label %1554 unwind label %1573

1554:                                             ; preds = %1549
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA9_KcRS6_RA2_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull align 1 dereferenceable(9) @.str.978, ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %1555 unwind label %1577

1555:                                             ; preds = %1554
  call void @llvm.lifetime.start.p0(i64 1, ptr %104) #9
  store i8 1, ptr %104, align 1, !tbaa !199
  %1556 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1550, ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef nonnull align 4 dereferenceable(4) %95, ptr noundef nonnull align 1 dereferenceable(1) %104)
          to label %1557 unwind label %1581

1557:                                             ; preds = %1555
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  store ptr %1556, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #9
  %1558 = load ptr, ptr %93, align 8, !tbaa !5
  %1559 = icmp ne ptr %1558, null
  br i1 %1559, label %1560, label %1563

1560:                                             ; preds = %1557
  %1561 = load ptr, ptr %93, align 8, !tbaa !5
  %1562 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1561, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %105, ptr align 8 %1562, i64 4, i1 false), !tbaa.struct !195
  br label %1565

1563:                                             ; preds = %1557
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %105, i32 noundef 0)
          to label %1564 unwind label %1587

1564:                                             ; preds = %1563
  br label %1565

1565:                                             ; preds = %1564, %1560
  %1566 = load ptr, ptr %101, align 8, !tbaa !5
  %1567 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1566, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1567, ptr align 4 %105, i64 4, i1 false), !tbaa.struct !195
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #9
  %1568 = load i32, ptr %96, align 4, !tbaa !15
  %1569 = load ptr, ptr %5, align 8, !tbaa !5
  %1570 = getelementptr inbounds i32, ptr %1569, i64 3
  %1571 = load i32, ptr %1570, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1568, i32 noundef %1571)
          to label %1572 unwind label %1591

1572:                                             ; preds = %1565
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1642

1573:                                             ; preds = %1549
  %1574 = landingpad { ptr, i32 }
          cleanup
  %1575 = extractvalue { ptr, i32 } %1574, 0
  store ptr %1575, ptr %30, align 8
  %1576 = extractvalue { ptr, i32 } %1574, 1
  store i32 %1576, ptr %31, align 4
  br label %1586

1577:                                             ; preds = %1554
  %1578 = landingpad { ptr, i32 }
          cleanup
  %1579 = extractvalue { ptr, i32 } %1578, 0
  store ptr %1579, ptr %30, align 8
  %1580 = extractvalue { ptr, i32 } %1578, 1
  store i32 %1580, ptr %31, align 4
  br label %1585

1581:                                             ; preds = %1555
  %1582 = landingpad { ptr, i32 }
          cleanup
  %1583 = extractvalue { ptr, i32 } %1582, 0
  store ptr %1583, ptr %30, align 8
  %1584 = extractvalue { ptr, i32 } %1582, 1
  store i32 %1584, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  br label %1585

1585:                                             ; preds = %1581, %1577
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  br label %1586

1586:                                             ; preds = %1585, %1573
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  br label %1595

1587:                                             ; preds = %1563
  %1588 = landingpad { ptr, i32 }
          cleanup
  %1589 = extractvalue { ptr, i32 } %1588, 0
  store ptr %1589, ptr %30, align 8
  %1590 = extractvalue { ptr, i32 } %1588, 1
  store i32 %1590, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #9
  br label %1595

1591:                                             ; preds = %1565
  %1592 = landingpad { ptr, i32 }
          cleanup
  %1593 = extractvalue { ptr, i32 } %1592, 0
  store ptr %1593, ptr %30, align 8
  %1594 = extractvalue { ptr, i32 } %1592, 1
  store i32 %1594, ptr %31, align 4
  br label %1595

1595:                                             ; preds = %1591, %1587, %1586
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1596

1596:                                             ; preds = %1595, %1548, %1536
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1643

1597:                                             ; preds = %1507
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #9
  %1598 = load ptr, ptr %5, align 8, !tbaa !5
  %1599 = getelementptr inbounds i32, ptr %1598, i64 0
  %1600 = load i32, ptr %1599, align 4, !tbaa !15
  store i32 %1600, ptr %106, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #9
  %1601 = load ptr, ptr %5, align 8, !tbaa !5
  %1602 = getelementptr inbounds i32, ptr %1601, i64 1
  %1603 = load i32, ptr %1602, align 4, !tbaa !15
  store i32 %1603, ptr %107, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #9
  %1604 = load i32, ptr %107, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #9
  %1605 = load ptr, ptr %5, align 8, !tbaa !5
  %1606 = getelementptr inbounds i32, ptr %1605, i64 2
  %1607 = load i32, ptr %1606, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1607, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %111) #9
  %1608 = load ptr, ptr %5, align 8, !tbaa !5
  %1609 = getelementptr inbounds i32, ptr %1608, i64 3
  %1610 = load i32, ptr %1609, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %111, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef 8, i32 noundef %1610)
          to label %1611 unwind label %1628

1611:                                             ; preds = %1597
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 1 dereferenceable(2) @.str.979, ptr noundef nonnull align 8 dereferenceable(32) %111)
          to label %1612 unwind label %1632

1612:                                             ; preds = %1611
  call void @llvm.lifetime.start.p0(i64 1, ptr %112) #9
  store i8 1, ptr %112, align 1, !tbaa !199
  %1613 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1604, ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 1 dereferenceable(1) %112)
          to label %1614 unwind label %1636

1614:                                             ; preds = %1612
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %111) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #9
  store ptr %1613, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #9
  %1615 = load ptr, ptr %93, align 8, !tbaa !5
  %1616 = icmp ne ptr %1615, null
  br i1 %1616, label %1617, label %1620

1617:                                             ; preds = %1614
  %1618 = load ptr, ptr %93, align 8, !tbaa !5
  %1619 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1618, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %113, ptr align 8 %1619, i64 4, i1 false), !tbaa.struct !195
  br label %1621

1620:                                             ; preds = %1614
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %113, i32 noundef 0)
  br label %1621

1621:                                             ; preds = %1620, %1617
  %1622 = load ptr, ptr %108, align 8, !tbaa !5
  %1623 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1622, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1623, ptr align 4 %113, i64 4, i1 false), !tbaa.struct !195
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  %1624 = load i32, ptr %107, align 4, !tbaa !15
  %1625 = load ptr, ptr %5, align 8, !tbaa !5
  %1626 = getelementptr inbounds i32, ptr %1625, i64 3
  %1627 = load i32, ptr %1626, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1624, i32 noundef %1627)
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  br label %1642

1628:                                             ; preds = %1597
  %1629 = landingpad { ptr, i32 }
          cleanup
  %1630 = extractvalue { ptr, i32 } %1629, 0
  store ptr %1630, ptr %30, align 8
  %1631 = extractvalue { ptr, i32 } %1629, 1
  store i32 %1631, ptr %31, align 4
  br label %1641

1632:                                             ; preds = %1611
  %1633 = landingpad { ptr, i32 }
          cleanup
  %1634 = extractvalue { ptr, i32 } %1633, 0
  store ptr %1634, ptr %30, align 8
  %1635 = extractvalue { ptr, i32 } %1633, 1
  store i32 %1635, ptr %31, align 4
  br label %1640

1636:                                             ; preds = %1612
  %1637 = landingpad { ptr, i32 }
          cleanup
  %1638 = extractvalue { ptr, i32 } %1637, 0
  store ptr %1638, ptr %30, align 8
  %1639 = extractvalue { ptr, i32 } %1637, 1
  store i32 %1639, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  br label %1640

1640:                                             ; preds = %1636, %1632
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #9
  br label %1641

1641:                                             ; preds = %1640, %1628
  call void @llvm.lifetime.end.p0(i64 32, ptr %111) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  br label %1643

1642:                                             ; preds = %1621, %1572
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  br label %5106

1643:                                             ; preds = %1641, %1596
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  br label %5109

1644:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #9
  %1645 = load ptr, ptr %5, align 8, !tbaa !5
  %1646 = getelementptr inbounds i32, ptr %1645, i64 0
  %1647 = load i32, ptr %1646, align 4, !tbaa !15
  store i32 %1647, ptr %114, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #9
  %1648 = load ptr, ptr %5, align 8, !tbaa !5
  %1649 = getelementptr inbounds i32, ptr %1648, i64 1
  %1650 = load i32, ptr %1649, align 4, !tbaa !15
  store i32 %1650, ptr %115, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #9
  %1651 = load ptr, ptr %5, align 8, !tbaa !5
  %1652 = getelementptr inbounds i32, ptr %1651, i64 2
  %1653 = load i32, ptr %1652, align 4, !tbaa !15
  store i32 %1653, ptr %116, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #9
  %1654 = load ptr, ptr %5, align 8, !tbaa !5
  %1655 = getelementptr inbounds i32, ptr %1654, i64 3
  store ptr %1655, ptr %117, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #9
  %1656 = load ptr, ptr %4, align 8, !tbaa !5
  %1657 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %1656, i32 0, i32 3
  %1658 = load i32, ptr %1657, align 4, !tbaa !200
  %1659 = sub i32 %1658, 3
  store i32 %1659, ptr %118, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #9
  %1660 = load i32, ptr %114, align 4, !tbaa !15
  %1661 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1660)
  store ptr %1661, ptr %119, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #9
  %1662 = load ptr, ptr %119, align 8, !tbaa !5
  %1663 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1662, i32 0, i32 1
  %1664 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1663)
  %1665 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1664)
  store ptr %1665, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #9
  %1666 = load i32, ptr %114, align 4, !tbaa !15
  %1667 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1666)
  store ptr %1667, ptr %121, align 8, !tbaa !5
  %1668 = load ptr, ptr %121, align 8, !tbaa !5
  %1669 = icmp ne ptr %1668, null
  br i1 %1669, label %1670, label %1681

1670:                                             ; preds = %1644
  %1671 = load ptr, ptr %121, align 8, !tbaa !5
  %1672 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1671, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %122, ptr align 8 %1672, i64 4, i1 false), !tbaa.struct !195
  %1673 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %122, i32 0, i32 0
  %1674 = load i32, ptr %1673, align 4
  %1675 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1674, i32 noundef 24)
  br i1 %1675, label %1676, label %1681

1676:                                             ; preds = %1670
  %1677 = load ptr, ptr %121, align 8, !tbaa !5
  %1678 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1677, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %123, ptr align 8 %1678, i64 4, i1 false), !tbaa.struct !195
  %1679 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %123, i32 0, i32 0
  %1680 = load i32, ptr %1679, align 4
  call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %1680, i32 noundef 24)
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %448)
  br label %1681

1681:                                             ; preds = %1676, %1670, %1644
  call void @llvm.lifetime.start.p0(i64 1, ptr %124) #9
  store i8 0, ptr %124, align 1, !tbaa !199
  call void @llvm.lifetime.start.p0(i64 4, ptr %125) #9
  store i32 0, ptr %125, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #9
  store i32 0, ptr %126, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #9
  store i32 0, ptr %127, align 4, !tbaa !15
  %1682 = load i32, ptr %118, align 4, !tbaa !15
  %1683 = icmp ne i32 %1682, 0
  br i1 %1683, label %1684, label %1690

1684:                                             ; preds = %1681
  %1685 = load ptr, ptr %117, align 8, !tbaa !5
  %1686 = getelementptr inbounds i32, ptr %1685, i32 1
  store ptr %1686, ptr %117, align 8, !tbaa !5
  %1687 = load i32, ptr %1685, align 4, !tbaa !15
  store i32 %1687, ptr %127, align 4, !tbaa !15
  %1688 = load i32, ptr %118, align 4, !tbaa !15
  %1689 = add i32 %1688, -1
  store i32 %1689, ptr %118, align 4, !tbaa !15
  br label %1690

1690:                                             ; preds = %1684, %1681
  call void @llvm.lifetime.start.p0(i64 24, ptr %128) #9
  %1691 = getelementptr inbounds %class.anon.568, ptr %128, i32 0, i32 0
  store ptr %118, ptr %1691, align 8, !tbaa !5
  %1692 = getelementptr inbounds %class.anon.568, ptr %128, i32 0, i32 1
  store ptr %127, ptr %1692, align 8, !tbaa !5
  %1693 = getelementptr inbounds %class.anon.568, ptr %128, i32 0, i32 2
  store ptr %117, ptr %1693, align 8, !tbaa !5
  call void @"_ZZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionEENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(24) %128, ptr noundef nonnull align 4 dereferenceable(4) %125, i32 noundef 1)
  call void @"_ZZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionEENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(24) %128, ptr noundef nonnull align 4 dereferenceable(4) %126, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1694 = load i32, ptr %116, align 4, !tbaa !15
  %1695 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1694)
  store ptr %1695, ptr %129, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %130) #9
  %1696 = load ptr, ptr %129, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %130, ptr noundef nonnull align 8 dereferenceable(336) %1696)
  %1697 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %130, i32 0, i32 4
  store i32 4, ptr %1697, align 8, !tbaa !201
  call void @llvm.lifetime.start.p0(i64 80, ptr %131) #9
  %1698 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 0
  %1699 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1698, i32 0, i32 0
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %1699, i32 noundef 0)
          to label %1700 unwind label %1741

1700:                                             ; preds = %1690
  %1701 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1698, i32 0, i32 2
  store ptr null, ptr %1701, align 8, !tbaa !202
  %1702 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1698, i32 0, i32 3
  store i8 0, ptr %1702, align 8, !tbaa !204
  %1703 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1698, i32 0, i32 4
  store i8 0, ptr %1703, align 1, !tbaa !205
  %1704 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1698, i32 0, i32 5
  store i8 0, ptr %1704, align 2, !tbaa !206
  %1705 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 1
  store i32 0, ptr %1705, align 8, !tbaa !207
  %1706 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 2
  store i32 0, ptr %1706, align 4, !tbaa !209
  %1707 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 3
  store i32 0, ptr %1707, align 8, !tbaa !210
  %1708 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 4
  store i32 0, ptr %1708, align 4, !tbaa !211
  %1709 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 5
  store i32 0, ptr %1709, align 8, !tbaa !212
  %1710 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 6
  store i32 0, ptr %1710, align 4, !tbaa !213
  %1711 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 7
  store i32 0, ptr %1711, align 8, !tbaa !214
  %1712 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 8
  store i32 0, ptr %1712, align 4, !tbaa !215
  %1713 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 9
  store i32 0, ptr %1713, align 8, !tbaa !216
  %1714 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 10
  store i32 0, ptr %1714, align 4, !tbaa !217
  %1715 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 11
  store i32 0, ptr %1715, align 8, !tbaa !218
  %1716 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 12
  store i32 0, ptr %1716, align 4, !tbaa !219
  %1717 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 13
  store i8 0, ptr %1717, align 8, !tbaa !220
  %1718 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 14
  store i8 0, ptr %1718, align 1, !tbaa !221
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #9
  %1719 = load i32, ptr %114, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %132, i32 noundef %1719)
          to label %1720 unwind label %1745

1720:                                             ; preds = %1700
  %1721 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 0
  %1722 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1721, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1722, ptr align 4 %132, i64 4, i1 false), !tbaa.struct !195
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #9
  %1723 = load ptr, ptr %120, align 8, !tbaa !5
  %1724 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 0
  %1725 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1724, i32 0, i32 2
  store ptr %1723, ptr %1725, align 8, !tbaa !222
  %1726 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 0
  %1727 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %1726, i32 0, i32 3
  store i8 1, ptr %1727, align 8, !tbaa !223
  %1728 = load i32, ptr %115, align 4, !tbaa !15
  %1729 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 1
  store i32 %1728, ptr %1729, align 8, !tbaa !207
  %1730 = load i32, ptr %126, align 4, !tbaa !15
  %1731 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %131, i32 0, i32 6
  store i32 %1730, ptr %1731, align 4, !tbaa !213
  call void @llvm.lifetime.start.p0(i64 32, ptr %133) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  %1732 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %448)
          to label %1733 unwind label %1749

1733:                                             ; preds = %1720
  br i1 %1732, label %1734, label %1762

1734:                                             ; preds = %1733
  call void @llvm.lifetime.start.p0(i64 32, ptr %134) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %135) #9
  %1735 = load ptr, ptr %448, align 8, !tbaa !197
  %1736 = getelementptr inbounds ptr, ptr %1735, i64 20
  %1737 = load ptr, ptr %1736, align 8
  invoke void %1737(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef 23, i32 noundef 1)
          to label %1738 unwind label %1753

1738:                                             ; preds = %1734
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 1 dereferenceable(16) @.str.980)
          to label %1739 unwind label %1757

1739:                                             ; preds = %1738
  %1740 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #9
  br label %1762

1741:                                             ; preds = %1690
  %1742 = landingpad { ptr, i32 }
          cleanup
  %1743 = extractvalue { ptr, i32 } %1742, 0
  store ptr %1743, ptr %30, align 8
  %1744 = extractvalue { ptr, i32 } %1742, 1
  store i32 %1744, ptr %31, align 4
  br label %1821

1745:                                             ; preds = %1700
  %1746 = landingpad { ptr, i32 }
          cleanup
  %1747 = extractvalue { ptr, i32 } %1746, 0
  store ptr %1747, ptr %30, align 8
  %1748 = extractvalue { ptr, i32 } %1746, 1
  store i32 %1748, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #9
  br label %1821

1749:                                             ; preds = %1817, %1813, %1809, %1777, %1774, %1720
  %1750 = landingpad { ptr, i32 }
          cleanup
  %1751 = extractvalue { ptr, i32 } %1750, 0
  store ptr %1751, ptr %30, align 8
  %1752 = extractvalue { ptr, i32 } %1750, 1
  store i32 %1752, ptr %31, align 4
  br label %1820

1753:                                             ; preds = %1734
  %1754 = landingpad { ptr, i32 }
          cleanup
  %1755 = extractvalue { ptr, i32 } %1754, 0
  store ptr %1755, ptr %30, align 8
  %1756 = extractvalue { ptr, i32 } %1754, 1
  store i32 %1756, ptr %31, align 4
  br label %1761

1757:                                             ; preds = %1738
  %1758 = landingpad { ptr, i32 }
          cleanup
  %1759 = extractvalue { ptr, i32 } %1758, 0
  store ptr %1759, ptr %30, align 8
  %1760 = extractvalue { ptr, i32 } %1758, 1
  store i32 %1760, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  br label %1761

1761:                                             ; preds = %1757, %1753
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #9
  br label %1820

1762:                                             ; preds = %1739, %1733
  call void @llvm.lifetime.start.p0(i64 32, ptr %136) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %137) #9
  %1763 = load i32, ptr %114, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1763, i1 noundef zeroext true)
          to label %1764 unwind label %1780

1764:                                             ; preds = %1762
  call void @llvm.lifetime.start.p0(i64 32, ptr %138) #9
  %1765 = load ptr, ptr %129, align 8, !tbaa !5
  %1766 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1765, i32 0, i32 4
  %1767 = load i32, ptr %1766, align 8, !tbaa !201
  call void @llvm.lifetime.start.p0(i64 32, ptr %139) #9
  %1768 = load i32, ptr %116, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %139, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1768, i1 noundef zeroext true)
          to label %1769 unwind label %1784

1769:                                             ; preds = %1764
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %130, i32 noundef %1767, ptr noundef nonnull align 8 dereferenceable(32) %139)
          to label %1770 unwind label %1788

1770:                                             ; preds = %1769
  call void @llvm.lifetime.start.p0(i64 32, ptr %140) #9
  invoke void @_ZN11spirv_cross11CompilerMSL16to_function_argsB5cxx11ERKNS_12CompilerGLSL24TextureFunctionArgumentsEPb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %140, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(74) %131, ptr noundef %124)
          to label %1771 unwind label %1792

1771:                                             ; preds = %1770
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcS6_RA3_S7_S6_RA2_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %136, ptr noundef nonnull align 8 dereferenceable(32) %137, ptr noundef nonnull align 1 dereferenceable(8) @.str.981, ptr noundef nonnull align 8 dereferenceable(32) %138, 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.53)
          to label %1772 unwind label %1796

1772:                                             ; preds = %1771
  %1773 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 8 dereferenceable(32) %136)
          to label %1774 unwind label %1800

1774:                                             ; preds = %1772
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %140) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #9
  %1775 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %448)
          to label %1776 unwind label %1749

1776:                                             ; preds = %1774
  br i1 %1775, label %1777, label %1809

1777:                                             ; preds = %1776
  %1778 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef @.str.53)
          to label %1779 unwind label %1749

1779:                                             ; preds = %1777
  br label %1809

1780:                                             ; preds = %1762
  %1781 = landingpad { ptr, i32 }
          cleanup
  %1782 = extractvalue { ptr, i32 } %1781, 0
  store ptr %1782, ptr %30, align 8
  %1783 = extractvalue { ptr, i32 } %1781, 1
  store i32 %1783, ptr %31, align 4
  br label %1808

1784:                                             ; preds = %1764
  %1785 = landingpad { ptr, i32 }
          cleanup
  %1786 = extractvalue { ptr, i32 } %1785, 0
  store ptr %1786, ptr %30, align 8
  %1787 = extractvalue { ptr, i32 } %1785, 1
  store i32 %1787, ptr %31, align 4
  br label %1807

1788:                                             ; preds = %1769
  %1789 = landingpad { ptr, i32 }
          cleanup
  %1790 = extractvalue { ptr, i32 } %1789, 0
  store ptr %1790, ptr %30, align 8
  %1791 = extractvalue { ptr, i32 } %1789, 1
  store i32 %1791, ptr %31, align 4
  br label %1806

1792:                                             ; preds = %1770
  %1793 = landingpad { ptr, i32 }
          cleanup
  %1794 = extractvalue { ptr, i32 } %1793, 0
  store ptr %1794, ptr %30, align 8
  %1795 = extractvalue { ptr, i32 } %1793, 1
  store i32 %1795, ptr %31, align 4
  br label %1805

1796:                                             ; preds = %1771
  %1797 = landingpad { ptr, i32 }
          cleanup
  %1798 = extractvalue { ptr, i32 } %1797, 0
  store ptr %1798, ptr %30, align 8
  %1799 = extractvalue { ptr, i32 } %1797, 1
  store i32 %1799, ptr %31, align 4
  br label %1804

1800:                                             ; preds = %1772
  %1801 = landingpad { ptr, i32 }
          cleanup
  %1802 = extractvalue { ptr, i32 } %1801, 0
  store ptr %1802, ptr %30, align 8
  %1803 = extractvalue { ptr, i32 } %1801, 1
  store i32 %1803, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  br label %1804

1804:                                             ; preds = %1800, %1796
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #9
  br label %1805

1805:                                             ; preds = %1804, %1792
  call void @llvm.lifetime.end.p0(i64 32, ptr %140) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  br label %1806

1806:                                             ; preds = %1805, %1788
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #9
  br label %1807

1807:                                             ; preds = %1806, %1784
  call void @llvm.lifetime.end.p0(i64 32, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #9
  br label %1808

1808:                                             ; preds = %1807, %1780
  call void @llvm.lifetime.end.p0(i64 32, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #9
  br label %1820

1809:                                             ; preds = %1779, %1776
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %1810 unwind label %1749

1810:                                             ; preds = %1809
  %1811 = load ptr, ptr %121, align 8, !tbaa !5
  %1812 = icmp ne ptr %1811, null
  br i1 %1812, label %1813, label %1819

1813:                                             ; preds = %1810
  %1814 = load ptr, ptr %121, align 8, !tbaa !5
  %1815 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler27variable_storage_is_aliasedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %448, ptr noundef nonnull align 8 dereferenceable(176) %1814)
          to label %1816 unwind label %1749

1816:                                             ; preds = %1813
  br i1 %1815, label %1817, label %1819

1817:                                             ; preds = %1816
  invoke void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %448)
          to label %1818 unwind label %1749

1818:                                             ; preds = %1817
  br label %1819

1819:                                             ; preds = %1818, %1816, %1810
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %131) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %130) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #9
  br label %5106

1820:                                             ; preds = %1808, %1761, %1749
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #9
  br label %1821

1821:                                             ; preds = %1820, %1745, %1741
  call void @llvm.lifetime.end.p0(i64 80, ptr %131) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %130) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #9
  br label %5109

1822:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %141) #9
  %1823 = load ptr, ptr %5, align 8, !tbaa !5
  %1824 = getelementptr inbounds i32, ptr %1823, i64 0
  %1825 = load i32, ptr %1824, align 4, !tbaa !15
  store i32 %1825, ptr %141, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #9
  %1826 = load i32, ptr %141, align 4, !tbaa !15
  %1827 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1826)
  store ptr %1827, ptr %142, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #9
  %1828 = load ptr, ptr %5, align 8, !tbaa !5
  %1829 = getelementptr inbounds i32, ptr %1828, i64 1
  %1830 = load i32, ptr %1829, align 4, !tbaa !15
  store i32 %1830, ptr %143, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #9
  %1831 = load ptr, ptr %5, align 8, !tbaa !5
  %1832 = getelementptr inbounds i32, ptr %1831, i64 2
  %1833 = load i32, ptr %1832, align 4, !tbaa !15
  store i32 %1833, ptr %144, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %145) #9
  %1834 = load i32, ptr %144, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %145, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1834, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #9
  %1835 = load i32, ptr %144, align 4, !tbaa !15
  %1836 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %1835)
          to label %1837 unwind label %1855

1837:                                             ; preds = %1822
  store ptr %1836, ptr %146, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %147) #9
  %1838 = load ptr, ptr %146, align 8, !tbaa !5
  %1839 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1838, i32 0, i32 14
  %1840 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1839, i32 0, i32 1
  %1841 = load i32, ptr %1840, align 4, !tbaa !194
  store i32 %1841, ptr %147, align 4, !tbaa !224
  call void @llvm.lifetime.start.p0(i64 1, ptr %148) #9
  %1842 = load ptr, ptr %146, align 8, !tbaa !5
  %1843 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1842, i32 0, i32 14
  %1844 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1843, i32 0, i32 3
  %1845 = load i8, ptr %1844, align 1, !tbaa !225, !range !192, !noundef !193
  %1846 = trunc i8 %1845 to i1
  %1847 = zext i1 %1846 to i8
  store i8 %1847, ptr %148, align 1, !tbaa !199
  %1848 = load ptr, ptr %146, align 8, !tbaa !5
  %1849 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1848, i32 0, i32 2
  %1850 = load i32, ptr %1849, align 8, !tbaa !18
  %1851 = icmp ne i32 %1850, 16
  br i1 %1851, label %1852, label %1867

1852:                                             ; preds = %1837
  %1853 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1853, ptr noundef @.str.982)
          to label %1854 unwind label %1859

1854:                                             ; preds = %1852
  invoke void @__cxa_throw(ptr %1853, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %5115 unwind label %1863

1855:                                             ; preds = %1822
  %1856 = landingpad { ptr, i32 }
          cleanup
  %1857 = extractvalue { ptr, i32 } %1856, 0
  store ptr %1857, ptr %30, align 8
  %1858 = extractvalue { ptr, i32 } %1856, 1
  store i32 %1858, ptr %31, align 4
  br label %2054

1859:                                             ; preds = %1852
  %1860 = landingpad { ptr, i32 }
          cleanup
  %1861 = extractvalue { ptr, i32 } %1860, 0
  store ptr %1861, ptr %30, align 8
  %1862 = extractvalue { ptr, i32 } %1860, 1
  store i32 %1862, ptr %31, align 4
  call void @__cxa_free_exception(ptr %1853) #9
  br label %2053

1863:                                             ; preds = %1854
  %1864 = landingpad { ptr, i32 }
          cleanup
  %1865 = extractvalue { ptr, i32 } %1864, 0
  store ptr %1865, ptr %30, align 8
  %1866 = extractvalue { ptr, i32 } %1864, 1
  store i32 %1866, ptr %31, align 4
  br label %2053

1867:                                             ; preds = %1837
  call void @llvm.lifetime.start.p0(i64 32, ptr %149) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #9
  %1868 = load i32, ptr %6, align 4, !tbaa !13
  %1869 = icmp eq i32 %1868, 103
  br i1 %1869, label %1870, label %1890

1870:                                             ; preds = %1867
  call void @llvm.lifetime.start.p0(i64 32, ptr %150) #9
  %1871 = load ptr, ptr %5, align 8, !tbaa !5
  %1872 = getelementptr inbounds i32, ptr %1871, i64 3
  %1873 = load i32, ptr %1872, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %150, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %1873, i1 noundef zeroext true)
          to label %1874 unwind label %1880

1874:                                             ; preds = %1870
  %1875 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %150, ptr noundef @.str.983)
          to label %1876 unwind label %1884

1876:                                             ; preds = %1874
  br i1 %1875, label %1877, label %1888

1877:                                             ; preds = %1876
  %1878 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 8 dereferenceable(32) %150)
          to label %1879 unwind label %1884

1879:                                             ; preds = %1877
  br label %1888

1880:                                             ; preds = %1870
  %1881 = landingpad { ptr, i32 }
          cleanup
  %1882 = extractvalue { ptr, i32 } %1881, 0
  store ptr %1882, ptr %30, align 8
  %1883 = extractvalue { ptr, i32 } %1881, 1
  store i32 %1883, ptr %31, align 4
  br label %1889

1884:                                             ; preds = %1877, %1874
  %1885 = landingpad { ptr, i32 }
          cleanup
  %1886 = extractvalue { ptr, i32 } %1885, 0
  store ptr %1886, ptr %30, align 8
  %1887 = extractvalue { ptr, i32 } %1885, 1
  store i32 %1887, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #9
  br label %1889

1888:                                             ; preds = %1879, %1876
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %150) #9
  br label %1890

1889:                                             ; preds = %1884, %1880
  call void @llvm.lifetime.end.p0(i64 32, ptr %150) #9
  br label %2052

1890:                                             ; preds = %1888, %1867
  call void @llvm.lifetime.start.p0(i64 32, ptr %151) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %152) #9
  %1891 = load ptr, ptr %142, align 8, !tbaa !5
  %1892 = load ptr, ptr %448, align 8, !tbaa !197
  %1893 = getelementptr inbounds ptr, ptr %1892, i64 19
  %1894 = load ptr, ptr %1893, align 8
  invoke void %1894(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %152, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %1891, i32 noundef 0)
          to label %1895 unwind label %1917

1895:                                             ; preds = %1890
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %151, ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef @.str.58)
          to label %1896 unwind label %1921

1896:                                             ; preds = %1895
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %153) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %154) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %155) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %155, ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.984)
          to label %1897 unwind label %1926

1897:                                             ; preds = %1896
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %154, ptr noundef nonnull align 8 dereferenceable(32) %155, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1898 unwind label %1930

1898:                                             ; preds = %1897
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 8 dereferenceable(32) %154, ptr noundef @.str.53)
          to label %1899 unwind label %1934

1899:                                             ; preds = %1898
  %1900 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %153)
          to label %1901 unwind label %1938

1901:                                             ; preds = %1899
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %155) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #9
  %1902 = load i32, ptr %147, align 4, !tbaa !224
  %1903 = icmp eq i32 %1902, 1
  br i1 %1903, label %1910, label %1904

1904:                                             ; preds = %1901
  %1905 = load i32, ptr %147, align 4, !tbaa !224
  %1906 = icmp eq i32 %1905, 3
  br i1 %1906, label %1910, label %1907

1907:                                             ; preds = %1904
  %1908 = load i32, ptr %147, align 4, !tbaa !224
  %1909 = icmp eq i32 %1908, 2
  br i1 %1909, label %1910, label %1969

1910:                                             ; preds = %1907, %1904, %1901
  call void @llvm.lifetime.start.p0(i64 32, ptr %156) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %157) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %158) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %159) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %159, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %145)
          to label %1911 unwind label %1945

1911:                                             ; preds = %1910
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %158, ptr noundef nonnull align 8 dereferenceable(32) %159, ptr noundef @.str.985)
          to label %1912 unwind label %1949

1912:                                             ; preds = %1911
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %157, ptr noundef nonnull align 8 dereferenceable(32) %158, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1913 unwind label %1953

1913:                                             ; preds = %1912
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %156, ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef @.str.53)
          to label %1914 unwind label %1957

1914:                                             ; preds = %1913
  %1915 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %156)
          to label %1916 unwind label %1961

1916:                                             ; preds = %1914
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %159) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %156) #9
  br label %1969

1917:                                             ; preds = %1890
  %1918 = landingpad { ptr, i32 }
          cleanup
  %1919 = extractvalue { ptr, i32 } %1918, 0
  store ptr %1919, ptr %30, align 8
  %1920 = extractvalue { ptr, i32 } %1918, 1
  store i32 %1920, ptr %31, align 4
  br label %1925

1921:                                             ; preds = %1895
  %1922 = landingpad { ptr, i32 }
          cleanup
  %1923 = extractvalue { ptr, i32 } %1922, 0
  store ptr %1923, ptr %30, align 8
  %1924 = extractvalue { ptr, i32 } %1922, 1
  store i32 %1924, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #9
  br label %1925

1925:                                             ; preds = %1921, %1917
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #9
  br label %2051

1926:                                             ; preds = %1896
  %1927 = landingpad { ptr, i32 }
          cleanup
  %1928 = extractvalue { ptr, i32 } %1927, 0
  store ptr %1928, ptr %30, align 8
  %1929 = extractvalue { ptr, i32 } %1927, 1
  store i32 %1929, ptr %31, align 4
  br label %1944

1930:                                             ; preds = %1897
  %1931 = landingpad { ptr, i32 }
          cleanup
  %1932 = extractvalue { ptr, i32 } %1931, 0
  store ptr %1932, ptr %30, align 8
  %1933 = extractvalue { ptr, i32 } %1931, 1
  store i32 %1933, ptr %31, align 4
  br label %1943

1934:                                             ; preds = %1898
  %1935 = landingpad { ptr, i32 }
          cleanup
  %1936 = extractvalue { ptr, i32 } %1935, 0
  store ptr %1936, ptr %30, align 8
  %1937 = extractvalue { ptr, i32 } %1935, 1
  store i32 %1937, ptr %31, align 4
  br label %1942

1938:                                             ; preds = %1899
  %1939 = landingpad { ptr, i32 }
          cleanup
  %1940 = extractvalue { ptr, i32 } %1939, 0
  store ptr %1940, ptr %30, align 8
  %1941 = extractvalue { ptr, i32 } %1939, 1
  store i32 %1941, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  br label %1942

1942:                                             ; preds = %1938, %1934
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #9
  br label %1943

1943:                                             ; preds = %1942, %1930
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #9
  br label %1944

1944:                                             ; preds = %1943, %1926
  call void @llvm.lifetime.end.p0(i64 32, ptr %155) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #9
  br label %2050

1945:                                             ; preds = %1910
  %1946 = landingpad { ptr, i32 }
          cleanup
  %1947 = extractvalue { ptr, i32 } %1946, 0
  store ptr %1947, ptr %30, align 8
  %1948 = extractvalue { ptr, i32 } %1946, 1
  store i32 %1948, ptr %31, align 4
  br label %1968

1949:                                             ; preds = %1911
  %1950 = landingpad { ptr, i32 }
          cleanup
  %1951 = extractvalue { ptr, i32 } %1950, 0
  store ptr %1951, ptr %30, align 8
  %1952 = extractvalue { ptr, i32 } %1950, 1
  store i32 %1952, ptr %31, align 4
  br label %1967

1953:                                             ; preds = %1912
  %1954 = landingpad { ptr, i32 }
          cleanup
  %1955 = extractvalue { ptr, i32 } %1954, 0
  store ptr %1955, ptr %30, align 8
  %1956 = extractvalue { ptr, i32 } %1954, 1
  store i32 %1956, ptr %31, align 4
  br label %1966

1957:                                             ; preds = %1913
  %1958 = landingpad { ptr, i32 }
          cleanup
  %1959 = extractvalue { ptr, i32 } %1958, 0
  store ptr %1959, ptr %30, align 8
  %1960 = extractvalue { ptr, i32 } %1958, 1
  store i32 %1960, ptr %31, align 4
  br label %1965

1961:                                             ; preds = %1914
  %1962 = landingpad { ptr, i32 }
          cleanup
  %1963 = extractvalue { ptr, i32 } %1962, 0
  store ptr %1963, ptr %30, align 8
  %1964 = extractvalue { ptr, i32 } %1962, 1
  store i32 %1964, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #9
  br label %1965

1965:                                             ; preds = %1961, %1957
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  br label %1966

1966:                                             ; preds = %1965, %1953
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #9
  br label %1967

1967:                                             ; preds = %1966, %1949
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #9
  br label %1968

1968:                                             ; preds = %1967, %1945
  call void @llvm.lifetime.end.p0(i64 32, ptr %159) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %156) #9
  br label %2050

1969:                                             ; preds = %1916, %1907
  %1970 = load i32, ptr %147, align 4, !tbaa !224
  %1971 = icmp eq i32 %1970, 2
  br i1 %1971, label %1972, label %2003

1972:                                             ; preds = %1969
  call void @llvm.lifetime.start.p0(i64 32, ptr %160) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %161) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %162) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %163) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %163, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %145)
          to label %1973 unwind label %1979

1973:                                             ; preds = %1972
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %162, ptr noundef nonnull align 8 dereferenceable(32) %163, ptr noundef @.str.986)
          to label %1974 unwind label %1983

1974:                                             ; preds = %1973
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %161, ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull align 8 dereferenceable(32) %149)
          to label %1975 unwind label %1987

1975:                                             ; preds = %1974
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %160, ptr noundef nonnull align 8 dereferenceable(32) %161, ptr noundef @.str.53)
          to label %1976 unwind label %1991

1976:                                             ; preds = %1975
  %1977 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %160)
          to label %1978 unwind label %1995

1978:                                             ; preds = %1976
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %163) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %161) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %160) #9
  br label %2003

1979:                                             ; preds = %1972
  %1980 = landingpad { ptr, i32 }
          cleanup
  %1981 = extractvalue { ptr, i32 } %1980, 0
  store ptr %1981, ptr %30, align 8
  %1982 = extractvalue { ptr, i32 } %1980, 1
  store i32 %1982, ptr %31, align 4
  br label %2002

1983:                                             ; preds = %1973
  %1984 = landingpad { ptr, i32 }
          cleanup
  %1985 = extractvalue { ptr, i32 } %1984, 0
  store ptr %1985, ptr %30, align 8
  %1986 = extractvalue { ptr, i32 } %1984, 1
  store i32 %1986, ptr %31, align 4
  br label %2001

1987:                                             ; preds = %1974
  %1988 = landingpad { ptr, i32 }
          cleanup
  %1989 = extractvalue { ptr, i32 } %1988, 0
  store ptr %1989, ptr %30, align 8
  %1990 = extractvalue { ptr, i32 } %1988, 1
  store i32 %1990, ptr %31, align 4
  br label %2000

1991:                                             ; preds = %1975
  %1992 = landingpad { ptr, i32 }
          cleanup
  %1993 = extractvalue { ptr, i32 } %1992, 0
  store ptr %1993, ptr %30, align 8
  %1994 = extractvalue { ptr, i32 } %1992, 1
  store i32 %1994, ptr %31, align 4
  br label %1999

1995:                                             ; preds = %1976
  %1996 = landingpad { ptr, i32 }
          cleanup
  %1997 = extractvalue { ptr, i32 } %1996, 0
  store ptr %1997, ptr %30, align 8
  %1998 = extractvalue { ptr, i32 } %1996, 1
  store i32 %1998, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #9
  br label %1999

1999:                                             ; preds = %1995, %1991
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #9
  br label %2000

2000:                                             ; preds = %1999, %1987
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #9
  br label %2001

2001:                                             ; preds = %2000, %1983
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #9
  br label %2002

2002:                                             ; preds = %2001, %1979
  call void @llvm.lifetime.end.p0(i64 32, ptr %163) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %161) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %160) #9
  br label %2050

2003:                                             ; preds = %1978, %1969
  %2004 = load i8, ptr %148, align 1, !tbaa !199, !range !192, !noundef !193
  %2005 = trunc i8 %2004 to i1
  br i1 %2005, label %2006, label %2040

2006:                                             ; preds = %2003
  call void @llvm.lifetime.start.p0(i64 32, ptr %164) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %165) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %165, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %145)
          to label %2007 unwind label %2021

2007:                                             ; preds = %2006
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %164, ptr noundef nonnull align 8 dereferenceable(32) %165, ptr noundef @.str.987)
          to label %2008 unwind label %2025

2008:                                             ; preds = %2007
  %2009 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %164)
          to label %2010 unwind label %2029

2010:                                             ; preds = %2008
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %165) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %164) #9
  %2011 = load i32, ptr %147, align 4, !tbaa !224
  %2012 = icmp eq i32 %2011, 3
  br i1 %2012, label %2013, label %2039

2013:                                             ; preds = %2010
  %2014 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %2015 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2014, i32 0, i32 41
  %2016 = load i8, ptr %2015, align 2, !tbaa !226, !range !192, !noundef !193
  %2017 = trunc i8 %2016 to i1
  br i1 %2017, label %2018, label %2039

2018:                                             ; preds = %2013
  %2019 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef @.str.988)
          to label %2020 unwind label %2035

2020:                                             ; preds = %2018
  br label %2039

2021:                                             ; preds = %2006
  %2022 = landingpad { ptr, i32 }
          cleanup
  %2023 = extractvalue { ptr, i32 } %2022, 0
  store ptr %2023, ptr %30, align 8
  %2024 = extractvalue { ptr, i32 } %2022, 1
  store i32 %2024, ptr %31, align 4
  br label %2034

2025:                                             ; preds = %2007
  %2026 = landingpad { ptr, i32 }
          cleanup
  %2027 = extractvalue { ptr, i32 } %2026, 0
  store ptr %2027, ptr %30, align 8
  %2028 = extractvalue { ptr, i32 } %2026, 1
  store i32 %2028, ptr %31, align 4
  br label %2033

2029:                                             ; preds = %2008
  %2030 = landingpad { ptr, i32 }
          cleanup
  %2031 = extractvalue { ptr, i32 } %2030, 0
  store ptr %2031, ptr %30, align 8
  %2032 = extractvalue { ptr, i32 } %2030, 1
  store i32 %2032, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #9
  br label %2033

2033:                                             ; preds = %2029, %2025
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #9
  br label %2034

2034:                                             ; preds = %2033, %2021
  call void @llvm.lifetime.end.p0(i64 32, ptr %165) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %164) #9
  br label %2050

2035:                                             ; preds = %2047, %2042, %2040, %2018
  %2036 = landingpad { ptr, i32 }
          cleanup
  %2037 = extractvalue { ptr, i32 } %2036, 0
  store ptr %2037, ptr %30, align 8
  %2038 = extractvalue { ptr, i32 } %2036, 1
  store i32 %2038, ptr %31, align 4
  br label %2050

2039:                                             ; preds = %2020, %2013, %2010
  br label %2040

2040:                                             ; preds = %2039, %2003
  %2041 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef @.str.53)
          to label %2042 unwind label %2035

2042:                                             ; preds = %2040
  %2043 = load i32, ptr %141, align 4, !tbaa !15
  %2044 = load i32, ptr %143, align 4, !tbaa !15
  %2045 = load i32, ptr %144, align 4, !tbaa !15
  %2046 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2045)
          to label %2047 unwind label %2035

2047:                                             ; preds = %2042
  %2048 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2043, i32 noundef %2044, ptr noundef nonnull align 8 dereferenceable(32) %151, i1 noundef zeroext %2046, i1 noundef zeroext false)
          to label %2049 unwind label %2035

2049:                                             ; preds = %2047
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %151) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %149) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %145) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #9
  br label %5106

2050:                                             ; preds = %2035, %2034, %2002, %1968, %1944
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #9
  br label %2051

2051:                                             ; preds = %2050, %1925
  call void @llvm.lifetime.end.p0(i64 32, ptr %151) #9
  br label %2052

2052:                                             ; preds = %2051, %1889
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %149) #9
  br label %2053

2053:                                             ; preds = %2052, %1863, %1859
  call void @llvm.lifetime.end.p0(i64 1, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #9
  br label %2054

2054:                                             ; preds = %2053, %1855
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %145) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #9
  br label %5109

2055:                                             ; preds = %2
  %2056 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %2057 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %2056, i32 noundef 2, i32 noundef 2, i32 noundef 0)
  br i1 %2057, label %2065, label %2058

2058:                                             ; preds = %2055
  %2059 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2059, ptr noundef @.str.989)
          to label %2060 unwind label %2061

2060:                                             ; preds = %2058
  call void @__cxa_throw(ptr %2059, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2061:                                             ; preds = %2058
  %2062 = landingpad { ptr, i32 }
          cleanup
  %2063 = extractvalue { ptr, i32 } %2062, 0
  store ptr %2063, ptr %30, align 8
  %2064 = extractvalue { ptr, i32 } %2062, 1
  store i32 %2064, ptr %31, align 4
  call void @__cxa_free_exception(ptr %2059) #9
  br label %5109

2065:                                             ; preds = %2055
  call void @llvm.lifetime.start.p0(i64 4, ptr %166) #9
  %2066 = load ptr, ptr %5, align 8, !tbaa !5
  %2067 = getelementptr inbounds i32, ptr %2066, i64 0
  %2068 = load i32, ptr %2067, align 4, !tbaa !15
  store i32 %2068, ptr %166, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %167) #9
  %2069 = load ptr, ptr %5, align 8, !tbaa !5
  %2070 = getelementptr inbounds i32, ptr %2069, i64 1
  %2071 = load i32, ptr %2070, align 4, !tbaa !15
  store i32 %2071, ptr %167, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #9
  %2072 = load ptr, ptr %5, align 8, !tbaa !5
  %2073 = getelementptr inbounds i32, ptr %2072, i64 2
  %2074 = load i32, ptr %2073, align 4, !tbaa !15
  store i32 %2074, ptr %168, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #9
  %2075 = load ptr, ptr %5, align 8, !tbaa !5
  %2076 = getelementptr inbounds i32, ptr %2075, i64 3
  %2077 = load i32, ptr %2076, align 4, !tbaa !15
  store i32 %2077, ptr %169, align 4, !tbaa !15
  %2078 = load i32, ptr %166, align 4, !tbaa !15
  %2079 = load i32, ptr %167, align 4, !tbaa !15
  %2080 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2078, i32 noundef %2079)
  call void @llvm.lifetime.start.p0(i64 32, ptr %170) #9
  %2081 = load i32, ptr %169, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %170, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2081, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %171) #9
  %2082 = load i32, ptr %168, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %171, ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %2082)
          to label %2083 unwind label %2109

2083:                                             ; preds = %2065
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #9
  %2084 = load i32, ptr %168, align 4, !tbaa !15
  %2085 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2084)
          to label %2086 unwind label %2113

2086:                                             ; preds = %2083
  store ptr %2085, ptr %172, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %173) #9
  %2087 = load ptr, ptr %172, align 8, !tbaa !5
  %2088 = icmp ne ptr %2087, null
  br i1 %2088, label %2089, label %2095

2089:                                             ; preds = %2086
  %2090 = load ptr, ptr %172, align 8, !tbaa !5
  %2091 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %2090, i32 0, i32 2
  %2092 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2091)
          to label %2093 unwind label %2117

2093:                                             ; preds = %2089
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %173, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2092, i1 noundef zeroext true)
          to label %2094 unwind label %2117

2094:                                             ; preds = %2093
  br label %2098

2095:                                             ; preds = %2086
  %2096 = load i32, ptr %168, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %173, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2096, i1 noundef zeroext true)
          to label %2097 unwind label %2117

2097:                                             ; preds = %2095
  br label %2098

2098:                                             ; preds = %2097, %2094
  call void @llvm.lifetime.start.p0(i64 8, ptr %174) #9
  %2099 = load i32, ptr %168, align 4, !tbaa !15
  %2100 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2099)
          to label %2101 unwind label %2121

2101:                                             ; preds = %2098
  store ptr %2100, ptr %174, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %175) #9
  %2102 = load i32, ptr %169, align 4, !tbaa !15
  %2103 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2102)
          to label %2104 unwind label %2125

2104:                                             ; preds = %2101
  store ptr %2103, ptr %175, align 8, !tbaa !5
  %2105 = load ptr, ptr %174, align 8, !tbaa !5
  %2106 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2105, i32 0, i32 14
  %2107 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %2106, i32 0, i32 1
  %2108 = load i32, ptr %2107, align 4, !tbaa !194
  switch i32 %2108, label %2180 [
    i32 0, label %2129
    i32 1, label %2142
    i32 3, label %2161
    i32 2, label %2161
  ]

2109:                                             ; preds = %2065
  %2110 = landingpad { ptr, i32 }
          cleanup
  %2111 = extractvalue { ptr, i32 } %2110, 0
  store ptr %2111, ptr %30, align 8
  %2112 = extractvalue { ptr, i32 } %2110, 1
  store i32 %2112, ptr %31, align 4
  br label %2218

2113:                                             ; preds = %2083
  %2114 = landingpad { ptr, i32 }
          cleanup
  %2115 = extractvalue { ptr, i32 } %2114, 0
  store ptr %2115, ptr %30, align 8
  %2116 = extractvalue { ptr, i32 } %2114, 1
  store i32 %2116, ptr %31, align 4
  br label %2217

2117:                                             ; preds = %2095, %2093, %2089
  %2118 = landingpad { ptr, i32 }
          cleanup
  %2119 = extractvalue { ptr, i32 } %2118, 0
  store ptr %2119, ptr %30, align 8
  %2120 = extractvalue { ptr, i32 } %2118, 1
  store i32 %2120, ptr %31, align 4
  br label %2216

2121:                                             ; preds = %2098
  %2122 = landingpad { ptr, i32 }
          cleanup
  %2123 = extractvalue { ptr, i32 } %2122, 0
  store ptr %2123, ptr %30, align 8
  %2124 = extractvalue { ptr, i32 } %2122, 1
  store i32 %2124, ptr %31, align 4
  br label %2215

2125:                                             ; preds = %2193, %2182, %2136, %2101
  %2126 = landingpad { ptr, i32 }
          cleanup
  %2127 = extractvalue { ptr, i32 } %2126, 0
  store ptr %2127, ptr %30, align 8
  %2128 = extractvalue { ptr, i32 } %2126, 1
  store i32 %2128, ptr %31, align 4
  br label %2214

2129:                                             ; preds = %2104
  %2130 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %2131 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2130, i32 0, i32 31
  %2132 = load i8, ptr %2131, align 1, !tbaa !227, !range !192, !noundef !193
  %2133 = trunc i8 %2132 to i1
  br i1 %2133, label %2141, label %2134

2134:                                             ; preds = %2129
  %2135 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2135, ptr noundef @.str.990)
          to label %2136 unwind label %2137

2136:                                             ; preds = %2134
  invoke void @__cxa_throw(ptr %2135, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %5115 unwind label %2125

2137:                                             ; preds = %2134
  %2138 = landingpad { ptr, i32 }
          cleanup
  %2139 = extractvalue { ptr, i32 } %2138, 0
  store ptr %2139, ptr %30, align 8
  %2140 = extractvalue { ptr, i32 } %2138, 1
  store i32 %2140, ptr %31, align 4
  call void @__cxa_free_exception(ptr %2135) #9
  br label %2214

2141:                                             ; preds = %2129
  br label %2142

2142:                                             ; preds = %2141, %2104
  %2143 = load ptr, ptr %175, align 8, !tbaa !5
  %2144 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2143, i32 0, i32 4
  %2145 = load i32, ptr %2144, align 8, !tbaa !201
  %2146 = icmp ugt i32 %2145, 2
  br i1 %2146, label %2147, label %2160

2147:                                             ; preds = %2142
  call void @llvm.lifetime.start.p0(i64 32, ptr %176) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %177) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %177, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %170)
          to label %2148 unwind label %2151

2148:                                             ; preds = %2147
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %176, ptr noundef nonnull align 8 dereferenceable(32) %177, ptr noundef @.str.164)
          to label %2149 unwind label %2155

2149:                                             ; preds = %2148
  %2150 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 8 dereferenceable(32) %176) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %176) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %177) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %176) #9
  br label %2160

2151:                                             ; preds = %2147
  %2152 = landingpad { ptr, i32 }
          cleanup
  %2153 = extractvalue { ptr, i32 } %2152, 0
  store ptr %2153, ptr %30, align 8
  %2154 = extractvalue { ptr, i32 } %2152, 1
  store i32 %2154, ptr %31, align 4
  br label %2159

2155:                                             ; preds = %2148
  %2156 = landingpad { ptr, i32 }
          cleanup
  %2157 = extractvalue { ptr, i32 } %2156, 0
  store ptr %2157, ptr %30, align 8
  %2158 = extractvalue { ptr, i32 } %2156, 1
  store i32 %2158, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #9
  br label %2159

2159:                                             ; preds = %2155, %2151
  call void @llvm.lifetime.end.p0(i64 32, ptr %177) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %176) #9
  br label %2214

2160:                                             ; preds = %2149, %2142
  br label %2187

2161:                                             ; preds = %2104, %2104
  %2162 = load ptr, ptr %175, align 8, !tbaa !5
  %2163 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2162, i32 0, i32 4
  %2164 = load i32, ptr %2163, align 8, !tbaa !201
  %2165 = icmp ugt i32 %2164, 3
  br i1 %2165, label %2166, label %2179

2166:                                             ; preds = %2161
  call void @llvm.lifetime.start.p0(i64 32, ptr %178) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %179) #9
  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) %448, ptr noundef nonnull align 8 dereferenceable(32) %170)
          to label %2167 unwind label %2170

2167:                                             ; preds = %2166
  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.165)
          to label %2168 unwind label %2174

2168:                                             ; preds = %2167
  %2169 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %179) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #9
  br label %2179

2170:                                             ; preds = %2166
  %2171 = landingpad { ptr, i32 }
          cleanup
  %2172 = extractvalue { ptr, i32 } %2171, 0
  store ptr %2172, ptr %30, align 8
  %2173 = extractvalue { ptr, i32 } %2171, 1
  store i32 %2173, ptr %31, align 4
  br label %2178

2174:                                             ; preds = %2167
  %2175 = landingpad { ptr, i32 }
          cleanup
  %2176 = extractvalue { ptr, i32 } %2175, 0
  store ptr %2176, ptr %30, align 8
  %2177 = extractvalue { ptr, i32 } %2175, 1
  store i32 %2177, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #9
  br label %2178

2178:                                             ; preds = %2174, %2170
  call void @llvm.lifetime.end.p0(i64 32, ptr %179) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #9
  br label %2214

2179:                                             ; preds = %2168, %2161
  br label %2187

2180:                                             ; preds = %2104
  %2181 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2181, ptr noundef @.str.991)
          to label %2182 unwind label %2183

2182:                                             ; preds = %2180
  invoke void @__cxa_throw(ptr %2181, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %5115 unwind label %2125

2183:                                             ; preds = %2180
  %2184 = landingpad { ptr, i32 }
          cleanup
  %2185 = extractvalue { ptr, i32 } %2184, 0
  store ptr %2185, ptr %30, align 8
  %2186 = extractvalue { ptr, i32 } %2184, 1
  store i32 %2186, ptr %31, align 4
  call void @__cxa_free_exception(ptr %2181) #9
  br label %2214

2187:                                             ; preds = %2179, %2160
  call void @llvm.lifetime.start.p0(i64 32, ptr %180) #9
  %2188 = load i32, ptr %167, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %180, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2188, i1 noundef zeroext true)
          to label %2189 unwind label %2196

2189:                                             ; preds = %2187
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcRS7_RA24_S8_SB_RA3_S8_SB_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %180, ptr noundef nonnull align 1 dereferenceable(6) @.str.992, ptr noundef nonnull align 8 dereferenceable(32) %173, ptr noundef nonnull align 1 dereferenceable(24) @.str.993, ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %2190 unwind label %2200

2190:                                             ; preds = %2189
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %180) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %181) #9
  %2191 = load i32, ptr %167, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %181, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2191, i1 noundef zeroext true)
          to label %2192 unwind label %2205

2192:                                             ; preds = %2190
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcRS7_RA26_S8_SB_RA3_S8_SB_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %181, ptr noundef nonnull align 1 dereferenceable(6) @.str.994, ptr noundef nonnull align 8 dereferenceable(32) %173, ptr noundef nonnull align 1 dereferenceable(26) @.str.995, ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %2193 unwind label %2209

2193:                                             ; preds = %2192
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %181) #9
  %2194 = load i32, ptr %167, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2194)
          to label %2195 unwind label %2125

2195:                                             ; preds = %2193
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %173) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %170) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %166) #9
  br label %5106

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

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

2204:                                             ; preds = %2200, %2196
  call void @llvm.lifetime.end.p0(i64 32, ptr %180) #9
  br label %2214

2205:                                             ; preds = %2190
  %2206 = landingpad { ptr, i32 }
          cleanup
  %2207 = extractvalue { ptr, i32 } %2206, 0
  store ptr %2207, ptr %30, align 8
  %2208 = extractvalue { ptr, i32 } %2206, 1
  store i32 %2208, ptr %31, align 4
  br label %2213

2209:                                             ; preds = %2192
  %2210 = landingpad { ptr, i32 }
          cleanup
  %2211 = extractvalue { ptr, i32 } %2210, 0
  store ptr %2211, ptr %30, align 8
  %2212 = extractvalue { ptr, i32 } %2210, 1
  store i32 %2212, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #9
  br label %2213

2213:                                             ; preds = %2209, %2205
  call void @llvm.lifetime.end.p0(i64 32, ptr %181) #9
  br label %2214

2214:                                             ; preds = %2213, %2204, %2183, %2178, %2159, %2137, %2125
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #9
  br label %2215

2215:                                             ; preds = %2214, %2121
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #9
  br label %2216

2216:                                             ; preds = %2215, %2117
  call void @llvm.lifetime.end.p0(i64 32, ptr %173) #9
  br label %2217

2217:                                             ; preds = %2216, %2113
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #9
  br label %2218

2218:                                             ; preds = %2217, %2109
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %170) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %166) #9
  br label %5109

2219:                                             ; preds = %2
  br label %2220

2220:                                             ; preds = %2219
  call void @llvm.lifetime.start.p0(i64 4, ptr %182) #9
  %2221 = load ptr, ptr %5, align 8, !tbaa !5
  %2222 = getelementptr inbounds i32, ptr %2221, i64 0
  %2223 = load i32, ptr %2222, align 4, !tbaa !15
  store i32 %2223, ptr %182, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %183) #9
  %2224 = load i32, ptr %182, align 4, !tbaa !15
  %2225 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2224)
  store ptr %2225, ptr %183, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %184) #9
  %2226 = load ptr, ptr %5, align 8, !tbaa !5
  %2227 = getelementptr inbounds i32, ptr %2226, i64 1
  %2228 = load i32, ptr %2227, align 4, !tbaa !15
  store i32 %2228, ptr %184, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %185) #9
  %2229 = load ptr, ptr %5, align 8, !tbaa !5
  %2230 = getelementptr inbounds i32, ptr %2229, i64 2
  %2231 = load i32, ptr %2230, align 4, !tbaa !15
  store i32 %2231, ptr %185, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %186) #9
  %2232 = load i32, ptr %185, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %186, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2232, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %187) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %188) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %189) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %190) #9
  %2233 = load ptr, ptr %183, align 8, !tbaa !5
  %2234 = load ptr, ptr %448, align 8, !tbaa !197
  %2235 = getelementptr inbounds ptr, ptr %2234, i64 19
  %2236 = load ptr, ptr %2235, align 8
  invoke void %2236(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %190, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %2233, i32 noundef 0)
          to label %2237 unwind label %2250

2237:                                             ; preds = %2220
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %189, ptr noundef nonnull align 8 dereferenceable(32) %190, ptr noundef @.str.58)
          to label %2238 unwind label %2254

2238:                                             ; preds = %2237
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %188, ptr noundef nonnull align 8 dereferenceable(32) %189, ptr noundef nonnull align 8 dereferenceable(32) %186)
          to label %2239 unwind label %2258

2239:                                             ; preds = %2238
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %187, ptr noundef nonnull align 8 dereferenceable(32) %188, ptr noundef @.str.996)
          to label %2240 unwind label %2262

2240:                                             ; preds = %2239
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %189) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %188) #9
  %2241 = load i32, ptr %182, align 4, !tbaa !15
  %2242 = load i32, ptr %184, align 4, !tbaa !15
  %2243 = load i32, ptr %185, align 4, !tbaa !15
  %2244 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2243)
          to label %2245 unwind label %2269

2245:                                             ; preds = %2240
  %2246 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2241, i32 noundef %2242, ptr noundef nonnull align 8 dereferenceable(32) %187, i1 noundef zeroext %2244, i1 noundef zeroext false)
          to label %2247 unwind label %2269

2247:                                             ; preds = %2245
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %187) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %186) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %185) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #9
  br label %2248

2248:                                             ; preds = %2247
  br label %2249

2249:                                             ; preds = %2248
  br label %5106

2250:                                             ; preds = %2220
  %2251 = landingpad { ptr, i32 }
          cleanup
  %2252 = extractvalue { ptr, i32 } %2251, 0
  store ptr %2252, ptr %30, align 8
  %2253 = extractvalue { ptr, i32 } %2251, 1
  store i32 %2253, ptr %31, align 4
  br label %2268

2254:                                             ; preds = %2237
  %2255 = landingpad { ptr, i32 }
          cleanup
  %2256 = extractvalue { ptr, i32 } %2255, 0
  store ptr %2256, ptr %30, align 8
  %2257 = extractvalue { ptr, i32 } %2255, 1
  store i32 %2257, ptr %31, align 4
  br label %2267

2258:                                             ; preds = %2238
  %2259 = landingpad { ptr, i32 }
          cleanup
  %2260 = extractvalue { ptr, i32 } %2259, 0
  store ptr %2260, ptr %30, align 8
  %2261 = extractvalue { ptr, i32 } %2259, 1
  store i32 %2261, ptr %31, align 4
  br label %2266

2262:                                             ; preds = %2239
  %2263 = landingpad { ptr, i32 }
          cleanup
  %2264 = extractvalue { ptr, i32 } %2263, 0
  store ptr %2264, ptr %30, align 8
  %2265 = extractvalue { ptr, i32 } %2263, 1
  store i32 %2265, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  br label %2266

2266:                                             ; preds = %2262, %2258
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #9
  br label %2267

2267:                                             ; preds = %2266, %2254
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  br label %2268

2268:                                             ; preds = %2267, %2250
  call void @llvm.lifetime.end.p0(i64 32, ptr %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %189) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %188) #9
  br label %2273

2269:                                             ; preds = %2245, %2240
  %2270 = landingpad { ptr, i32 }
          cleanup
  %2271 = extractvalue { ptr, i32 } %2270, 0
  store ptr %2271, ptr %30, align 8
  %2272 = extractvalue { ptr, i32 } %2270, 1
  store i32 %2272, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #9
  br label %2273

2273:                                             ; preds = %2269, %2268
  call void @llvm.lifetime.end.p0(i64 32, ptr %187) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %186) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %185) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #9
  br label %5109

2274:                                             ; preds = %2
  br label %2275

2275:                                             ; preds = %2274
  call void @llvm.lifetime.start.p0(i64 4, ptr %191) #9
  %2276 = load ptr, ptr %5, align 8, !tbaa !5
  %2277 = getelementptr inbounds i32, ptr %2276, i64 0
  %2278 = load i32, ptr %2277, align 4, !tbaa !15
  store i32 %2278, ptr %191, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %192) #9
  %2279 = load i32, ptr %191, align 4, !tbaa !15
  %2280 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2279)
  store ptr %2280, ptr %192, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %193) #9
  %2281 = load ptr, ptr %5, align 8, !tbaa !5
  %2282 = getelementptr inbounds i32, ptr %2281, i64 1
  %2283 = load i32, ptr %2282, align 4, !tbaa !15
  store i32 %2283, ptr %193, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %194) #9
  %2284 = load ptr, ptr %5, align 8, !tbaa !5
  %2285 = getelementptr inbounds i32, ptr %2284, i64 2
  %2286 = load i32, ptr %2285, align 4, !tbaa !15
  store i32 %2286, ptr %194, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %195) #9
  %2287 = load i32, ptr %194, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %195, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2287, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %196) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %197) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %198) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %199) #9
  %2288 = load ptr, ptr %192, align 8, !tbaa !5
  %2289 = load ptr, ptr %448, align 8, !tbaa !197
  %2290 = getelementptr inbounds ptr, ptr %2289, i64 19
  %2291 = load ptr, ptr %2290, align 8
  invoke void %2291(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %199, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %2288, i32 noundef 0)
          to label %2292 unwind label %2305

2292:                                             ; preds = %2275
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %198, ptr noundef nonnull align 8 dereferenceable(32) %199, ptr noundef @.str.58)
          to label %2293 unwind label %2309

2293:                                             ; preds = %2292
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %197, ptr noundef nonnull align 8 dereferenceable(32) %198, ptr noundef nonnull align 8 dereferenceable(32) %195)
          to label %2294 unwind label %2313

2294:                                             ; preds = %2293
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %196, ptr noundef nonnull align 8 dereferenceable(32) %197, ptr noundef @.str.997)
          to label %2295 unwind label %2317

2295:                                             ; preds = %2294
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %199) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %197) #9
  %2296 = load i32, ptr %191, align 4, !tbaa !15
  %2297 = load i32, ptr %193, align 4, !tbaa !15
  %2298 = load i32, ptr %194, align 4, !tbaa !15
  %2299 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2298)
          to label %2300 unwind label %2324

2300:                                             ; preds = %2295
  %2301 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2296, i32 noundef %2297, ptr noundef nonnull align 8 dereferenceable(32) %196, i1 noundef zeroext %2299, i1 noundef zeroext false)
          to label %2302 unwind label %2324

2302:                                             ; preds = %2300
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %196) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %195) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %194) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #9
  br label %2303

2303:                                             ; preds = %2302
  br label %2304

2304:                                             ; preds = %2303
  br label %5106

2305:                                             ; preds = %2275
  %2306 = landingpad { ptr, i32 }
          cleanup
  %2307 = extractvalue { ptr, i32 } %2306, 0
  store ptr %2307, ptr %30, align 8
  %2308 = extractvalue { ptr, i32 } %2306, 1
  store i32 %2308, ptr %31, align 4
  br label %2323

2309:                                             ; preds = %2292
  %2310 = landingpad { ptr, i32 }
          cleanup
  %2311 = extractvalue { ptr, i32 } %2310, 0
  store ptr %2311, ptr %30, align 8
  %2312 = extractvalue { ptr, i32 } %2310, 1
  store i32 %2312, ptr %31, align 4
  br label %2322

2313:                                             ; preds = %2293
  %2314 = landingpad { ptr, i32 }
          cleanup
  %2315 = extractvalue { ptr, i32 } %2314, 0
  store ptr %2315, ptr %30, align 8
  %2316 = extractvalue { ptr, i32 } %2314, 1
  store i32 %2316, ptr %31, align 4
  br label %2321

2317:                                             ; preds = %2294
  %2318 = landingpad { ptr, i32 }
          cleanup
  %2319 = extractvalue { ptr, i32 } %2318, 0
  store ptr %2319, ptr %30, align 8
  %2320 = extractvalue { ptr, i32 } %2318, 1
  store i32 %2320, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #9
  br label %2321

2321:                                             ; preds = %2317, %2313
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  br label %2322

2322:                                             ; preds = %2321, %2309
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #9
  br label %2323

2323:                                             ; preds = %2322, %2305
  call void @llvm.lifetime.end.p0(i64 32, ptr %199) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %197) #9
  br label %2328

2324:                                             ; preds = %2300, %2295
  %2325 = landingpad { ptr, i32 }
          cleanup
  %2326 = extractvalue { ptr, i32 } %2325, 0
  store ptr %2326, ptr %30, align 8
  %2327 = extractvalue { ptr, i32 } %2325, 1
  store i32 %2327, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #9
  br label %2328

2328:                                             ; preds = %2324, %2323
  call void @llvm.lifetime.end.p0(i64 32, ptr %196) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %195) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %194) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #9
  br label %5109

2329:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %200) #9
  %2330 = load ptr, ptr %5, align 8, !tbaa !5
  %2331 = getelementptr inbounds i32, ptr %2330, i64 0
  %2332 = load i32, ptr %2331, align 4, !tbaa !15
  store i32 %2332, ptr %200, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %201) #9
  %2333 = load ptr, ptr %5, align 8, !tbaa !5
  %2334 = getelementptr inbounds i32, ptr %2333, i64 1
  %2335 = load i32, ptr %2334, align 4, !tbaa !15
  store i32 %2335, ptr %201, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %202) #9
  %2336 = load ptr, ptr %5, align 8, !tbaa !5
  %2337 = getelementptr inbounds i32, ptr %2336, i64 2
  %2338 = load i32, ptr %2337, align 4, !tbaa !15
  %2339 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2338)
  store ptr %2339, ptr %202, align 8, !tbaa !5
  %2340 = load ptr, ptr %202, align 8, !tbaa !5
  %2341 = icmp ne ptr %2340, null
  br i1 %2341, label %2342, label %2366

2342:                                             ; preds = %2329
  call void @llvm.lifetime.start.p0(i64 8, ptr %203) #9
  %2343 = load i32, ptr %200, align 4, !tbaa !15
  %2344 = load i32, ptr %201, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %204) #9
  %2345 = load ptr, ptr %202, align 8, !tbaa !5
  %2346 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %2345, i32 0, i32 2
  %2347 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2346)
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %204, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2347, i1 noundef zeroext true)
  %2348 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2343, i32 noundef %2344, ptr noundef nonnull align 8 dereferenceable(32) %204, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %2349 unwind label %2361

2349:                                             ; preds = %2342
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %204) #9
  store ptr %2348, ptr %203, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %205) #9
  %2350 = load ptr, ptr %202, align 8, !tbaa !5
  %2351 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %2350, i32 0, i32 2
  %2352 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2351)
  %2353 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2352)
  store ptr %2353, ptr %205, align 8, !tbaa !5
  %2354 = load ptr, ptr %205, align 8, !tbaa !5
  %2355 = icmp ne ptr %2354, null
  br i1 %2355, label %2356, label %2365

2356:                                             ; preds = %2349
  %2357 = load ptr, ptr %205, align 8, !tbaa !5
  %2358 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2357, i32 0, i32 1
  %2359 = load ptr, ptr %203, align 8, !tbaa !5
  %2360 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2359, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2360, ptr align 8 %2358, i64 4, i1 false), !tbaa.struct !195
  br label %2365

2361:                                             ; preds = %2342
  %2362 = landingpad { ptr, i32 }
          cleanup
  %2363 = extractvalue { ptr, i32 } %2362, 0
  store ptr %2363, ptr %30, align 8
  %2364 = extractvalue { ptr, i32 } %2362, 1
  store i32 %2364, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %204) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %203) #9
  br label %2419

2365:                                             ; preds = %2356, %2349
  call void @llvm.lifetime.end.p0(i64 8, ptr %205) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %203) #9
  br label %2418

2366:                                             ; preds = %2329
  call void @llvm.lifetime.start.p0(i64 8, ptr %206) #9
  %2367 = load ptr, ptr %5, align 8, !tbaa !5
  %2368 = getelementptr inbounds i32, ptr %2367, i64 2
  %2369 = load i32, ptr %2368, align 4, !tbaa !15
  %2370 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2369)
  store ptr %2370, ptr %206, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %207) #9
  %2371 = load ptr, ptr %206, align 8, !tbaa !5
  %2372 = icmp ne ptr %2371, null
  br i1 %2372, label %2373, label %2396

2373:                                             ; preds = %2366
  %2374 = load ptr, ptr %206, align 8, !tbaa !5
  %2375 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2374, i32 0, i32 1
  %2376 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2375)
  %2377 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2376, i32 noundef 12)
  br i1 %2377, label %2378, label %2396

2378:                                             ; preds = %2373
  %2379 = load i32, ptr %200, align 4, !tbaa !15
  %2380 = load i32, ptr %201, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %208) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %209) #9
  %2381 = load ptr, ptr %5, align 8, !tbaa !5
  %2382 = getelementptr inbounds i32, ptr %2381, i64 2
  %2383 = load i32, ptr %2382, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %209, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2383, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %208, ptr noundef nonnull align 8 dereferenceable(32) %209, ptr noundef nonnull align 1 dereferenceable(8) @.str.998)
          to label %2384 unwind label %2387

2384:                                             ; preds = %2378
  %2385 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2379, i32 noundef %2380, ptr noundef nonnull align 8 dereferenceable(32) %208, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %2386 unwind label %2391

2386:                                             ; preds = %2384
  store ptr %2385, ptr %207, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %209) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %208) #9
  br label %2408

2387:                                             ; preds = %2378
  %2388 = landingpad { ptr, i32 }
          cleanup
  %2389 = extractvalue { ptr, i32 } %2388, 0
  store ptr %2389, ptr %30, align 8
  %2390 = extractvalue { ptr, i32 } %2388, 1
  store i32 %2390, ptr %31, align 4
  br label %2395

2391:                                             ; preds = %2384
  %2392 = landingpad { ptr, i32 }
          cleanup
  %2393 = extractvalue { ptr, i32 } %2392, 0
  store ptr %2393, ptr %30, align 8
  %2394 = extractvalue { ptr, i32 } %2392, 1
  store i32 %2394, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #9
  br label %2395

2395:                                             ; preds = %2391, %2387
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %209) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %208) #9
  br label %2417

2396:                                             ; preds = %2373, %2366
  %2397 = load i32, ptr %200, align 4, !tbaa !15
  %2398 = load i32, ptr %201, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %210) #9
  %2399 = load ptr, ptr %5, align 8, !tbaa !5
  %2400 = getelementptr inbounds i32, ptr %2399, i64 2
  %2401 = load i32, ptr %2400, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %210, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2401, i1 noundef zeroext true)
  %2402 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2397, i32 noundef %2398, ptr noundef nonnull align 8 dereferenceable(32) %210, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %2403 unwind label %2404

2403:                                             ; preds = %2396
  store ptr %2402, ptr %207, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %210) #9
  br label %2408

2404:                                             ; preds = %2396
  %2405 = landingpad { ptr, i32 }
          cleanup
  %2406 = extractvalue { ptr, i32 } %2405, 0
  store ptr %2406, ptr %30, align 8
  %2407 = extractvalue { ptr, i32 } %2405, 1
  store i32 %2407, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %210) #9
  br label %2417

2408:                                             ; preds = %2403, %2386
  %2409 = load ptr, ptr %206, align 8, !tbaa !5
  %2410 = icmp ne ptr %2409, null
  br i1 %2410, label %2411, label %2416

2411:                                             ; preds = %2408
  %2412 = load ptr, ptr %206, align 8, !tbaa !5
  %2413 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2412, i32 0, i32 1
  %2414 = load ptr, ptr %207, align 8, !tbaa !5
  %2415 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2414, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2415, ptr align 8 %2413, i64 4, i1 false), !tbaa.struct !195
  br label %2416

2416:                                             ; preds = %2411, %2408
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #9
  br label %2418

2417:                                             ; preds = %2404, %2395
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #9
  br label %2419

2418:                                             ; preds = %2416, %2365
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #9
  br label %5106

2419:                                             ; preds = %2417, %2361
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #9
  br label %5109

2420:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %211) #9
  %2421 = load ptr, ptr %5, align 8, !tbaa !5
  %2422 = getelementptr inbounds i32, ptr %2421, i64 0
  %2423 = load i32, ptr %2422, align 4, !tbaa !15
  store i32 %2423, ptr %211, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %212) #9
  %2424 = load ptr, ptr %5, align 8, !tbaa !5
  %2425 = getelementptr inbounds i32, ptr %2424, i64 1
  %2426 = load i32, ptr %2425, align 4, !tbaa !15
  store i32 %2426, ptr %212, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %213) #9
  %2427 = load ptr, ptr %5, align 8, !tbaa !5
  %2428 = getelementptr inbounds i32, ptr %2427, i64 2
  %2429 = load i32, ptr %2428, align 4, !tbaa !15
  store i32 %2429, ptr %213, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %214) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %215) #9
  %2430 = load i32, ptr %213, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %215, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2430, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %214, ptr noundef nonnull align 1 dereferenceable(18) @.str.999, ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2431 unwind label %2439

2431:                                             ; preds = %2420
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %215) #9
  %2432 = load i32, ptr %211, align 4, !tbaa !15
  %2433 = load i32, ptr %212, align 4, !tbaa !15
  %2434 = load i32, ptr %213, align 4, !tbaa !15
  %2435 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2434)
          to label %2436 unwind label %2443

2436:                                             ; preds = %2431
  %2437 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2432, i32 noundef %2433, ptr noundef nonnull align 8 dereferenceable(32) %214, i1 noundef zeroext %2435, i1 noundef zeroext false)
          to label %2438 unwind label %2443

2438:                                             ; preds = %2436
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %214) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %213) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %211) #9
  br label %5106

2439:                                             ; preds = %2420
  %2440 = landingpad { ptr, i32 }
          cleanup
  %2441 = extractvalue { ptr, i32 } %2440, 0
  store ptr %2441, ptr %30, align 8
  %2442 = extractvalue { ptr, i32 } %2440, 1
  store i32 %2442, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %215) #9
  br label %2447

2443:                                             ; preds = %2436, %2431
  %2444 = landingpad { ptr, i32 }
          cleanup
  %2445 = extractvalue { ptr, i32 } %2444, 0
  store ptr %2445, ptr %30, align 8
  %2446 = extractvalue { ptr, i32 } %2444, 1
  store i32 %2446, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #9
  br label %2447

2447:                                             ; preds = %2443, %2439
  call void @llvm.lifetime.end.p0(i64 32, ptr %214) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %213) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %211) #9
  br label %5109

2448:                                             ; preds = %2, %2, %2
  %2449 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %448)
  br i1 %2449, label %2450, label %2459

2450:                                             ; preds = %2448
  %2451 = load ptr, ptr %5, align 8, !tbaa !5
  %2452 = load ptr, ptr %4, align 8, !tbaa !5
  %2453 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %2452, i32 0, i32 3
  %2454 = load i32, ptr %2453, align 4, !tbaa !200
  %2455 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef %2451, i32 noundef %2454)
  br i1 %2455, label %2458, label %2456

2456:                                             ; preds = %2450
  %2457 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %2457)
  br label %2458

2458:                                             ; preds = %2456, %2450
  br label %2461

2459:                                             ; preds = %2448
  %2460 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %2460)
  br label %2461

2461:                                             ; preds = %2459, %2458
  %2462 = load ptr, ptr %5, align 8, !tbaa !5
  %2463 = load ptr, ptr %4, align 8, !tbaa !5
  %2464 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %2463, i32 0, i32 3
  %2465 = load i32, ptr %2464, align 4, !tbaa !200
  call void @_ZN11spirv_cross11CompilerMSL31fix_up_interpolant_access_chainEPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef %2462, i32 noundef %2465)
  br label %5106

2466:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %216) #9
  %2467 = load ptr, ptr %5, align 8, !tbaa !5
  %2468 = getelementptr inbounds i32, ptr %2467, i64 0
  %2469 = load i32, ptr %2468, align 4, !tbaa !15
  %2470 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2469)
  store ptr %2470, ptr %216, align 8, !tbaa !5
  %2471 = load ptr, ptr %5, align 8, !tbaa !5
  %2472 = getelementptr inbounds i32, ptr %2471, i64 0
  %2473 = load i32, ptr %2472, align 4, !tbaa !15
  %2474 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL35is_out_of_bounds_tessellation_levelEj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %2473)
  br i1 %2474, label %2475, label %2476

2475:                                             ; preds = %2466
  store i32 2, ptr %217, align 4
  br label %2541

2476:                                             ; preds = %2466
  %2477 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %448)
  br i1 %2477, label %2478, label %2517

2478:                                             ; preds = %2476
  %2479 = load ptr, ptr %216, align 8, !tbaa !5
  %2480 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2479, i32 0, i32 11
  %2481 = load i32, ptr %2480, align 8, !tbaa !228
  %2482 = icmp eq i32 %2481, 12
  br i1 %2482, label %2488, label %2483

2483:                                             ; preds = %2478
  %2484 = load ptr, ptr %216, align 8, !tbaa !5
  %2485 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2484, i32 0, i32 11
  %2486 = load i32, ptr %2485, align 8, !tbaa !228
  %2487 = icmp eq i32 %2486, 2
  br i1 %2487, label %2488, label %2517

2488:                                             ; preds = %2483, %2478
  %2489 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %448, i32 0, i32 1
  %2490 = load ptr, ptr %2489, align 8, !tbaa !229
  %2491 = icmp ne ptr %2490, null
  br i1 %2491, label %2492, label %2493

2492:                                             ; preds = %2488
  br label %2495

2493:                                             ; preds = %2488
  call void @__assert_fail(ptr noundef @.str.1000, ptr noundef @.str.25, i32 noundef 9582, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionE) #11
  unreachable

2494:                                             ; No predecessors!
  br label %2495

2495:                                             ; preds = %2494, %2492
  call void @llvm.lifetime.start.p0(i64 4, ptr %218) #9
  %2496 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %448, i32 0, i32 1
  %2497 = load ptr, ptr %2496, align 8, !tbaa !229
  %2498 = call noundef i32 @_ZNK11spirv_cross8Compiler19continue_block_typeERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %448, ptr noundef nonnull align 8 dereferenceable(976) %2497)
  store i32 %2498, ptr %218, align 4, !tbaa !230
  %2499 = load i32, ptr %218, align 4, !tbaa !230
  %2500 = icmp ne i32 %2499, 0
  br i1 %2500, label %2501, label %2508

2501:                                             ; preds = %2495
  %2502 = load i32, ptr %218, align 4, !tbaa !230
  %2503 = icmp ne i32 %2502, 4
  br i1 %2503, label %2504, label %2508

2504:                                             ; preds = %2501
  %2505 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %448, i32 0, i32 1
  %2506 = load ptr, ptr %2505, align 8, !tbaa !229
  %2507 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2506, i32 0, i32 20
  store i8 1, ptr %2507, align 1, !tbaa !232
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %448)
  br label %2508

2508:                                             ; preds = %2504, %2501, %2495
  call void @llvm.lifetime.start.p0(i64 32, ptr %219) #9
  %2509 = load ptr, ptr %448, align 8, !tbaa !197
  %2510 = getelementptr inbounds ptr, ptr %2509, i64 20
  %2511 = load ptr, ptr %2510, align 8
  call void %2511(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %219, ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef 23, i32 noundef 1)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 1 dereferenceable(6) @.str.1001, ptr noundef nonnull align 8 dereferenceable(32) %219, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2512 unwind label %2513

2512:                                             ; preds = %2508
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %219) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %219) #9
  call void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %448)
  call void @llvm.lifetime.end.p0(i64 4, ptr %218) #9
  br label %2517

2513:                                             ; preds = %2508
  %2514 = landingpad { ptr, i32 }
          cleanup
  %2515 = extractvalue { ptr, i32 } %2514, 0
  store ptr %2515, ptr %30, align 8
  %2516 = extractvalue { ptr, i32 } %2514, 1
  store i32 %2516, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %219) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %219) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %218) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #9
  br label %5109

2517:                                             ; preds = %2512, %2483, %2476
  %2518 = load ptr, ptr %5, align 8, !tbaa !5
  %2519 = getelementptr inbounds i32, ptr %2518, i64 0
  %2520 = load i32, ptr %2519, align 4, !tbaa !15
  %2521 = load ptr, ptr %5, align 8, !tbaa !5
  %2522 = getelementptr inbounds i32, ptr %2521, i64 1
  %2523 = load i32, ptr %2522, align 4, !tbaa !15
  %2524 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL27maybe_emit_array_assignmentEjj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %2520, i32 noundef %2523)
  br i1 %2524, label %2527, label %2525

2525:                                             ; preds = %2517
  %2526 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %2526)
  br label %2527

2527:                                             ; preds = %2525, %2517
  %2528 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %448)
  br i1 %2528, label %2529, label %2540

2529:                                             ; preds = %2527
  %2530 = load ptr, ptr %216, align 8, !tbaa !5
  %2531 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2530, i32 0, i32 11
  %2532 = load i32, ptr %2531, align 8, !tbaa !228
  %2533 = icmp eq i32 %2532, 12
  br i1 %2533, label %2539, label %2534

2534:                                             ; preds = %2529
  %2535 = load ptr, ptr %216, align 8, !tbaa !5
  %2536 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2535, i32 0, i32 11
  %2537 = load i32, ptr %2536, align 8, !tbaa !228
  %2538 = icmp eq i32 %2537, 2
  br i1 %2538, label %2539, label %2540

2539:                                             ; preds = %2534, %2529
  call void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %448)
  br label %2540

2540:                                             ; preds = %2539, %2534, %2527
  store i32 2, ptr %217, align 4
  br label %2541

2541:                                             ; preds = %2540, %2475
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #9
  br label %5106

2542:                                             ; preds = %2
  %2543 = load ptr, ptr %5, align 8, !tbaa !5
  %2544 = getelementptr inbounds i32, ptr %2543, i64 0
  %2545 = load i32, ptr %2544, align 4, !tbaa !15
  %2546 = load ptr, ptr %5, align 8, !tbaa !5
  %2547 = getelementptr inbounds i32, ptr %2546, i64 1
  %2548 = load i32, ptr %2547, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL12emit_barrierEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef 0, i32 noundef %2545, i32 noundef %2548)
  br label %5106

2549:                                             ; preds = %2
  %2550 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 102
  %2551 = load i32, ptr %2550, align 8, !tbaa !254
  %2552 = icmp ne i32 %2551, 225
  br i1 %2552, label %2553, label %2563

2553:                                             ; preds = %2549
  %2554 = load ptr, ptr %5, align 8, !tbaa !5
  %2555 = getelementptr inbounds i32, ptr %2554, i64 0
  %2556 = load i32, ptr %2555, align 4, !tbaa !15
  %2557 = load ptr, ptr %5, align 8, !tbaa !5
  %2558 = getelementptr inbounds i32, ptr %2557, i64 1
  %2559 = load i32, ptr %2558, align 4, !tbaa !15
  %2560 = load ptr, ptr %5, align 8, !tbaa !5
  %2561 = getelementptr inbounds i32, ptr %2560, i64 2
  %2562 = load i32, ptr %2561, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL12emit_barrierEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %2556, i32 noundef %2559, i32 noundef %2562)
  br label %2563

2563:                                             ; preds = %2553, %2549
  br label %5106

2564:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %220) #9
  %2565 = load ptr, ptr %5, align 8, !tbaa !5
  %2566 = getelementptr inbounds i32, ptr %2565, i64 0
  %2567 = load i32, ptr %2566, align 4, !tbaa !15
  store i32 %2567, ptr %220, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %221) #9
  %2568 = load ptr, ptr %5, align 8, !tbaa !5
  %2569 = getelementptr inbounds i32, ptr %2568, i64 1
  %2570 = load i32, ptr %2569, align 4, !tbaa !15
  store i32 %2570, ptr %221, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %222) #9
  %2571 = load ptr, ptr %5, align 8, !tbaa !5
  %2572 = getelementptr inbounds i32, ptr %2571, i64 2
  %2573 = load i32, ptr %2572, align 4, !tbaa !15
  store i32 %2573, ptr %222, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %223) #9
  %2574 = load ptr, ptr %5, align 8, !tbaa !5
  %2575 = getelementptr inbounds i32, ptr %2574, i64 3
  %2576 = load i32, ptr %2575, align 4, !tbaa !15
  store i32 %2576, ptr %223, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %224) #9
  %2577 = load i32, ptr %220, align 4, !tbaa !15
  %2578 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2577)
  store ptr %2578, ptr %224, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %225) #9
  %2579 = load ptr, ptr %224, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %225, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %2579)
  %2580 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef @.str.58)
          to label %2581 unwind label %2589

2581:                                             ; preds = %2564
  call void @llvm.lifetime.start.p0(i64 4, ptr %226) #9
  store i32 0, ptr %226, align 4, !tbaa !15
  br label %2582

2582:                                             ; preds = %2637, %2581
  %2583 = load i32, ptr %226, align 4, !tbaa !15
  %2584 = load ptr, ptr %224, align 8, !tbaa !5
  %2585 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2584, i32 0, i32 5
  %2586 = load i32, ptr %2585, align 4, !tbaa !255
  %2587 = icmp ult i32 %2583, %2586
  br i1 %2587, label %2593, label %2588

2588:                                             ; preds = %2582
  store i32 26, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %226) #9
  br label %2641

2589:                                             ; preds = %2659, %2656, %2653, %2649, %2643, %2641, %2564
  %2590 = landingpad { ptr, i32 }
          cleanup
  %2591 = extractvalue { ptr, i32 } %2590, 0
  store ptr %2591, ptr %30, align 8
  %2592 = extractvalue { ptr, i32 } %2590, 1
  store i32 %2592, ptr %31, align 4
  br label %2663

2593:                                             ; preds = %2582
  call void @llvm.lifetime.start.p0(i64 32, ptr %227) #9
  %2594 = load i32, ptr %222, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %227, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2594, i1 noundef zeroext true)
          to label %2595 unwind label %2614

2595:                                             ; preds = %2593
  %2596 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef nonnull align 8 dereferenceable(32) %227)
          to label %2597 unwind label %2618

2597:                                             ; preds = %2595
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %227) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %227) #9
  %2598 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef @.str.1002)
          to label %2599 unwind label %2623

2599:                                             ; preds = %2597
  call void @llvm.lifetime.start.p0(i64 32, ptr %228) #9
  %2600 = load i32, ptr %223, align 4, !tbaa !15
  %2601 = load i32, ptr %226, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %228, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2600, i32 noundef %2601)
          to label %2602 unwind label %2627

2602:                                             ; preds = %2599
  %2603 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef nonnull align 8 dereferenceable(32) %228)
          to label %2604 unwind label %2631

2604:                                             ; preds = %2602
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %228) #9
  %2605 = load i32, ptr %226, align 4, !tbaa !15
  %2606 = add i32 %2605, 1
  %2607 = load ptr, ptr %224, align 8, !tbaa !5
  %2608 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2607, i32 0, i32 5
  %2609 = load i32, ptr %2608, align 4, !tbaa !255
  %2610 = icmp ult i32 %2606, %2609
  br i1 %2610, label %2611, label %2636

2611:                                             ; preds = %2604
  %2612 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef @.str.55)
          to label %2613 unwind label %2623

2613:                                             ; preds = %2611
  br label %2636

2614:                                             ; preds = %2593
  %2615 = landingpad { ptr, i32 }
          cleanup
  %2616 = extractvalue { ptr, i32 } %2615, 0
  store ptr %2616, ptr %30, align 8
  %2617 = extractvalue { ptr, i32 } %2615, 1
  store i32 %2617, ptr %31, align 4
  br label %2622

2618:                                             ; preds = %2595
  %2619 = landingpad { ptr, i32 }
          cleanup
  %2620 = extractvalue { ptr, i32 } %2619, 0
  store ptr %2620, ptr %30, align 8
  %2621 = extractvalue { ptr, i32 } %2619, 1
  store i32 %2621, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %227) #9
  br label %2622

2622:                                             ; preds = %2618, %2614
  call void @llvm.lifetime.end.p0(i64 32, ptr %227) #9
  br label %2640

2623:                                             ; preds = %2611, %2597
  %2624 = landingpad { ptr, i32 }
          cleanup
  %2625 = extractvalue { ptr, i32 } %2624, 0
  store ptr %2625, ptr %30, align 8
  %2626 = extractvalue { ptr, i32 } %2624, 1
  store i32 %2626, ptr %31, align 4
  br label %2640

2627:                                             ; preds = %2599
  %2628 = landingpad { ptr, i32 }
          cleanup
  %2629 = extractvalue { ptr, i32 } %2628, 0
  store ptr %2629, ptr %30, align 8
  %2630 = extractvalue { ptr, i32 } %2628, 1
  store i32 %2630, ptr %31, align 4
  br label %2635

2631:                                             ; preds = %2602
  %2632 = landingpad { ptr, i32 }
          cleanup
  %2633 = extractvalue { ptr, i32 } %2632, 0
  store ptr %2633, ptr %30, align 8
  %2634 = extractvalue { ptr, i32 } %2632, 1
  store i32 %2634, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #9
  br label %2635

2635:                                             ; preds = %2631, %2627
  call void @llvm.lifetime.end.p0(i64 32, ptr %228) #9
  br label %2640

2636:                                             ; preds = %2613, %2604
  br label %2637

2637:                                             ; preds = %2636
  %2638 = load i32, ptr %226, align 4, !tbaa !15
  %2639 = add i32 %2638, 1
  store i32 %2639, ptr %226, align 4, !tbaa !15
  br label %2582, !llvm.loop !256

2640:                                             ; preds = %2635, %2623, %2622
  call void @llvm.lifetime.end.p0(i64 4, ptr %226) #9
  br label %2663

2641:                                             ; preds = %2588
  %2642 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef @.str.53)
          to label %2643 unwind label %2589

2643:                                             ; preds = %2641
  %2644 = load i32, ptr %220, align 4, !tbaa !15
  %2645 = load i32, ptr %221, align 4, !tbaa !15
  %2646 = load i32, ptr %222, align 4, !tbaa !15
  %2647 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2646)
          to label %2648 unwind label %2589

2648:                                             ; preds = %2643
  br i1 %2647, label %2649, label %2653

2649:                                             ; preds = %2648
  %2650 = load i32, ptr %223, align 4, !tbaa !15
  %2651 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2650)
          to label %2652 unwind label %2589

2652:                                             ; preds = %2649
  br label %2653

2653:                                             ; preds = %2652, %2648
  %2654 = phi i1 [ false, %2648 ], [ %2651, %2652 ]
  %2655 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2644, i32 noundef %2645, ptr noundef nonnull align 8 dereferenceable(32) %225, i1 noundef zeroext %2654, i1 noundef zeroext false)
          to label %2656 unwind label %2589

2656:                                             ; preds = %2653
  %2657 = load i32, ptr %221, align 4, !tbaa !15
  %2658 = load i32, ptr %222, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2657, i32 noundef %2658)
          to label %2659 unwind label %2589

2659:                                             ; preds = %2656
  %2660 = load i32, ptr %221, align 4, !tbaa !15
  %2661 = load i32, ptr %223, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2660, i32 noundef %2661)
          to label %2662 unwind label %2589

2662:                                             ; preds = %2659
  store i32 2, ptr %217, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %225) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %225) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %224) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %223) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %222) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %220) #9
  br label %5106

2663:                                             ; preds = %2640, %2589
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %225) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %225) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %224) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %223) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %222) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %220) #9
  br label %5109

2664:                                             ; preds = %2, %2
  %2665 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %2666 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2665, i32 0, i32 40
  %2667 = load i8, ptr %2666, align 1, !tbaa !44, !range !192, !noundef !193
  %2668 = trunc i8 %2667 to i1
  br i1 %2668, label %2678, label %2669

2669:                                             ; preds = %2664
  %2670 = load ptr, ptr %5, align 8, !tbaa !5
  %2671 = getelementptr inbounds i32, ptr %2670, i64 1
  %2672 = load i32, ptr %2671, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %229, i32 noundef %2672)
  %2673 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %229, i32 0, i32 0
  %2674 = load i32, ptr %2673, align 4
  %2675 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %2674, i32 noundef 42)
  br i1 %2675, label %2678, label %2676

2676:                                             ; preds = %2669
  %2677 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %2677)
  br label %5106

2678:                                             ; preds = %2669, %2664
  call void @llvm.lifetime.start.p0(i64 8, ptr %230) #9
  %2679 = load ptr, ptr %5, align 8, !tbaa !5
  %2680 = load i32, ptr %6, align 4, !tbaa !13
  %2681 = icmp eq i32 %2680, 145
  %2682 = zext i1 %2681 to i64
  %2683 = select i1 %2681, i32 2, i32 3
  %2684 = sext i32 %2683 to i64
  %2685 = getelementptr inbounds i32, ptr %2679, i64 %2684
  %2686 = load i32, ptr %2685, align 4, !tbaa !15
  %2687 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2686)
  store ptr %2687, ptr %230, align 8, !tbaa !5
  %2688 = load ptr, ptr %230, align 8, !tbaa !5
  %2689 = icmp ne ptr %2688, null
  br i1 %2689, label %2690, label %2796

2690:                                             ; preds = %2678
  %2691 = load ptr, ptr %230, align 8, !tbaa !5
  %2692 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2691, i32 0, i32 6
  %2693 = load i8, ptr %2692, align 1, !tbaa !258, !range !192, !noundef !193
  %2694 = trunc i8 %2693 to i1
  br i1 %2694, label %2695, label %2796

2695:                                             ; preds = %2690
  %2696 = load ptr, ptr %230, align 8, !tbaa !5
  %2697 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2696, i32 0, i32 6
  store i8 0, ptr %2697, align 1, !tbaa !258
  call void @llvm.lifetime.start.p0(i64 32, ptr %231) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #9
  %2698 = load i32, ptr %6, align 4, !tbaa !13
  %2699 = icmp eq i32 %2698, 145
  br i1 %2699, label %2700, label %2725

2700:                                             ; preds = %2695
  call void @llvm.lifetime.start.p0(i64 32, ptr %232) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %233) #9
  %2701 = load ptr, ptr %5, align 8, !tbaa !5
  %2702 = getelementptr inbounds i32, ptr %2701, i64 3
  %2703 = load i32, ptr %2702, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %233, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2703, i1 noundef zeroext true)
          to label %2704 unwind label %2711

2704:                                             ; preds = %2700
  call void @llvm.lifetime.start.p0(i64 32, ptr %234) #9
  %2705 = load ptr, ptr %5, align 8, !tbaa !5
  %2706 = getelementptr inbounds i32, ptr %2705, i64 2
  %2707 = load i32, ptr %2706, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %234, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2707)
          to label %2708 unwind label %2715

2708:                                             ; preds = %2704
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %232, ptr noundef nonnull align 1 dereferenceable(21) @.str.1003, ptr noundef nonnull align 8 dereferenceable(32) %233, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %234, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2709 unwind label %2719

2709:                                             ; preds = %2708
  %2710 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %231, ptr noundef nonnull align 8 dereferenceable(32) %232) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %232) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %234) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %234) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %233) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %233) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %232) #9
  br label %2750

2711:                                             ; preds = %2700
  %2712 = landingpad { ptr, i32 }
          cleanup
  %2713 = extractvalue { ptr, i32 } %2712, 0
  store ptr %2713, ptr %30, align 8
  %2714 = extractvalue { ptr, i32 } %2712, 1
  store i32 %2714, ptr %31, align 4
  br label %2724

2715:                                             ; preds = %2704
  %2716 = landingpad { ptr, i32 }
          cleanup
  %2717 = extractvalue { ptr, i32 } %2716, 0
  store ptr %2717, ptr %30, align 8
  %2718 = extractvalue { ptr, i32 } %2716, 1
  store i32 %2718, ptr %31, align 4
  br label %2723

2719:                                             ; preds = %2708
  %2720 = landingpad { ptr, i32 }
          cleanup
  %2721 = extractvalue { ptr, i32 } %2720, 0
  store ptr %2721, ptr %30, align 8
  %2722 = extractvalue { ptr, i32 } %2720, 1
  store i32 %2722, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %234) #9
  br label %2723

2723:                                             ; preds = %2719, %2715
  call void @llvm.lifetime.end.p0(i64 32, ptr %234) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %233) #9
  br label %2724

2724:                                             ; preds = %2723, %2711
  call void @llvm.lifetime.end.p0(i64 32, ptr %233) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %232) #9
  br label %2795

2725:                                             ; preds = %2695
  call void @llvm.lifetime.start.p0(i64 32, ptr %235) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %236) #9
  %2726 = load ptr, ptr %5, align 8, !tbaa !5
  %2727 = getelementptr inbounds i32, ptr %2726, i64 3
  %2728 = load i32, ptr %2727, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %236, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2728)
          to label %2729 unwind label %2736

2729:                                             ; preds = %2725
  call void @llvm.lifetime.start.p0(i64 32, ptr %237) #9
  %2730 = load ptr, ptr %5, align 8, !tbaa !5
  %2731 = getelementptr inbounds i32, ptr %2730, i64 2
  %2732 = load i32, ptr %2731, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %237, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2732, i1 noundef zeroext true)
          to label %2733 unwind label %2740

2733:                                             ; preds = %2729
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %235, ptr noundef nonnull align 1 dereferenceable(21) @.str.1004, ptr noundef nonnull align 8 dereferenceable(32) %236, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %237, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2734 unwind label %2744

2734:                                             ; preds = %2733
  %2735 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %231, ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %237) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %237) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %236) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %236) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %235) #9
  br label %2750

2736:                                             ; preds = %2725
  %2737 = landingpad { ptr, i32 }
          cleanup
  %2738 = extractvalue { ptr, i32 } %2737, 0
  store ptr %2738, ptr %30, align 8
  %2739 = extractvalue { ptr, i32 } %2737, 1
  store i32 %2739, ptr %31, align 4
  br label %2749

2740:                                             ; preds = %2729
  %2741 = landingpad { ptr, i32 }
          cleanup
  %2742 = extractvalue { ptr, i32 } %2741, 0
  store ptr %2742, ptr %30, align 8
  %2743 = extractvalue { ptr, i32 } %2741, 1
  store i32 %2743, ptr %31, align 4
  br label %2748

2744:                                             ; preds = %2733
  %2745 = landingpad { ptr, i32 }
          cleanup
  %2746 = extractvalue { ptr, i32 } %2745, 0
  store ptr %2746, ptr %30, align 8
  %2747 = extractvalue { ptr, i32 } %2745, 1
  store i32 %2747, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %237) #9
  br label %2748

2748:                                             ; preds = %2744, %2740
  call void @llvm.lifetime.end.p0(i64 32, ptr %237) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %236) #9
  br label %2749

2749:                                             ; preds = %2748, %2736
  call void @llvm.lifetime.end.p0(i64 32, ptr %236) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %235) #9
  br label %2795

2750:                                             ; preds = %2734, %2709
  call void @llvm.lifetime.start.p0(i64 1, ptr %238) #9
  %2751 = load ptr, ptr %5, align 8, !tbaa !5
  %2752 = getelementptr inbounds i32, ptr %2751, i64 2
  %2753 = load i32, ptr %2752, align 4, !tbaa !15
  %2754 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2753)
          to label %2755 unwind label %2791

2755:                                             ; preds = %2750
  br i1 %2754, label %2756, label %2762

2756:                                             ; preds = %2755
  %2757 = load ptr, ptr %5, align 8, !tbaa !5
  %2758 = getelementptr inbounds i32, ptr %2757, i64 3
  %2759 = load i32, ptr %2758, align 4, !tbaa !15
  %2760 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2759)
          to label %2761 unwind label %2791

2761:                                             ; preds = %2756
  br label %2762

2762:                                             ; preds = %2761, %2755
  %2763 = phi i1 [ false, %2755 ], [ %2760, %2761 ]
  %2764 = zext i1 %2763 to i8
  store i8 %2764, ptr %238, align 1, !tbaa !199
  %2765 = load ptr, ptr %5, align 8, !tbaa !5
  %2766 = getelementptr inbounds i32, ptr %2765, i64 0
  %2767 = load i32, ptr %2766, align 4, !tbaa !15
  %2768 = load ptr, ptr %5, align 8, !tbaa !5
  %2769 = getelementptr inbounds i32, ptr %2768, i64 1
  %2770 = load i32, ptr %2769, align 4, !tbaa !15
  %2771 = load i8, ptr %238, align 1, !tbaa !199, !range !192, !noundef !193
  %2772 = trunc i8 %2771 to i1
  %2773 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2767, i32 noundef %2770, ptr noundef nonnull align 8 dereferenceable(32) %231, i1 noundef zeroext %2772, i1 noundef zeroext false)
          to label %2774 unwind label %2791

2774:                                             ; preds = %2762
  %2775 = load ptr, ptr %230, align 8, !tbaa !5
  %2776 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2775, i32 0, i32 6
  store i8 1, ptr %2776, align 1, !tbaa !258
  %2777 = load ptr, ptr %5, align 8, !tbaa !5
  %2778 = getelementptr inbounds i32, ptr %2777, i64 1
  %2779 = load i32, ptr %2778, align 4, !tbaa !15
  %2780 = load ptr, ptr %5, align 8, !tbaa !5
  %2781 = getelementptr inbounds i32, ptr %2780, i64 2
  %2782 = load i32, ptr %2781, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2779, i32 noundef %2782)
          to label %2783 unwind label %2791

2783:                                             ; preds = %2774
  %2784 = load ptr, ptr %5, align 8, !tbaa !5
  %2785 = getelementptr inbounds i32, ptr %2784, i64 1
  %2786 = load i32, ptr %2785, align 4, !tbaa !15
  %2787 = load ptr, ptr %5, align 8, !tbaa !5
  %2788 = getelementptr inbounds i32, ptr %2787, i64 3
  %2789 = load i32, ptr %2788, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2786, i32 noundef %2789)
          to label %2790 unwind label %2791

2790:                                             ; preds = %2783
  call void @llvm.lifetime.end.p0(i64 1, ptr %238) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %231) #9
  br label %2826

2791:                                             ; preds = %2783, %2774, %2762, %2756, %2750
  %2792 = landingpad { ptr, i32 }
          cleanup
  %2793 = extractvalue { ptr, i32 } %2792, 0
  store ptr %2793, ptr %30, align 8
  %2794 = extractvalue { ptr, i32 } %2792, 1
  store i32 %2794, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %238) #9
  br label %2795

2795:                                             ; preds = %2791, %2749, %2724
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %231) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #9
  br label %5109

2796:                                             ; preds = %2690, %2678
  %2797 = load i32, ptr %6, align 4, !tbaa !13
  %2798 = icmp eq i32 %2797, 145
  br i1 %2798, label %2799, label %2812

2799:                                             ; preds = %2796
  %2800 = load ptr, ptr %5, align 8, !tbaa !5
  %2801 = getelementptr inbounds i32, ptr %2800, i64 0
  %2802 = load i32, ptr %2801, align 4, !tbaa !15
  %2803 = load ptr, ptr %5, align 8, !tbaa !5
  %2804 = getelementptr inbounds i32, ptr %2803, i64 1
  %2805 = load i32, ptr %2804, align 4, !tbaa !15
  %2806 = load ptr, ptr %5, align 8, !tbaa !5
  %2807 = getelementptr inbounds i32, ptr %2806, i64 2
  %2808 = load i32, ptr %2807, align 4, !tbaa !15
  %2809 = load ptr, ptr %5, align 8, !tbaa !5
  %2810 = getelementptr inbounds i32, ptr %2809, i64 3
  %2811 = load i32, ptr %2810, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2802, i32 noundef %2805, i32 noundef %2808, i32 noundef %2811, ptr noundef @.str.1005)
  br label %2825

2812:                                             ; preds = %2796
  %2813 = load ptr, ptr %5, align 8, !tbaa !5
  %2814 = getelementptr inbounds i32, ptr %2813, i64 0
  %2815 = load i32, ptr %2814, align 4, !tbaa !15
  %2816 = load ptr, ptr %5, align 8, !tbaa !5
  %2817 = getelementptr inbounds i32, ptr %2816, i64 1
  %2818 = load i32, ptr %2817, align 4, !tbaa !15
  %2819 = load ptr, ptr %5, align 8, !tbaa !5
  %2820 = getelementptr inbounds i32, ptr %2819, i64 2
  %2821 = load i32, ptr %2820, align 4, !tbaa !15
  %2822 = load ptr, ptr %5, align 8, !tbaa !5
  %2823 = getelementptr inbounds i32, ptr %2822, i64 3
  %2824 = load i32, ptr %2823, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2815, i32 noundef %2818, i32 noundef %2821, i32 noundef %2824, ptr noundef @.str.1006)
  br label %2825

2825:                                             ; preds = %2812, %2799
  br label %2826

2826:                                             ; preds = %2825, %2790
  store i32 2, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #9
  br label %5106

2827:                                             ; preds = %2
  %2828 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %2829 = getelementptr inbounds %"struct.spirv_cross::CompilerMSL::Options", ptr %2828, i32 0, i32 40
  %2830 = load i8, ptr %2829, align 1, !tbaa !44, !range !192, !noundef !193
  %2831 = trunc i8 %2830 to i1
  br i1 %2831, label %2841, label %2832

2832:                                             ; preds = %2827
  %2833 = load ptr, ptr %5, align 8, !tbaa !5
  %2834 = getelementptr inbounds i32, ptr %2833, i64 1
  %2835 = load i32, ptr %2834, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %239, i32 noundef %2835)
  %2836 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %239, i32 0, i32 0
  %2837 = load i32, ptr %2836, align 4
  %2838 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 %2837, i32 noundef 42)
  br i1 %2838, label %2841, label %2839

2839:                                             ; preds = %2832
  %2840 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %2840)
  br label %5106

2841:                                             ; preds = %2832, %2827
  call void @llvm.lifetime.start.p0(i64 8, ptr %240) #9
  %2842 = load ptr, ptr %5, align 8, !tbaa !5
  %2843 = getelementptr inbounds i32, ptr %2842, i64 2
  %2844 = load i32, ptr %2843, align 4, !tbaa !15
  %2845 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2844)
  store ptr %2845, ptr %240, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %241) #9
  %2846 = load ptr, ptr %5, align 8, !tbaa !5
  %2847 = getelementptr inbounds i32, ptr %2846, i64 3
  %2848 = load i32, ptr %2847, align 4, !tbaa !15
  %2849 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2848)
  store ptr %2849, ptr %241, align 8, !tbaa !5
  %2850 = load ptr, ptr %240, align 8, !tbaa !5
  %2851 = icmp ne ptr %2850, null
  br i1 %2851, label %2852, label %2953

2852:                                             ; preds = %2841
  %2853 = load ptr, ptr %241, align 8, !tbaa !5
  %2854 = icmp ne ptr %2853, null
  br i1 %2854, label %2855, label %2953

2855:                                             ; preds = %2852
  %2856 = load ptr, ptr %240, align 8, !tbaa !5
  %2857 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2856, i32 0, i32 6
  %2858 = load i8, ptr %2857, align 1, !tbaa !258, !range !192, !noundef !193
  %2859 = trunc i8 %2858 to i1
  br i1 %2859, label %2860, label %2953

2860:                                             ; preds = %2855
  %2861 = load ptr, ptr %241, align 8, !tbaa !5
  %2862 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2861, i32 0, i32 6
  %2863 = load i8, ptr %2862, align 1, !tbaa !258, !range !192, !noundef !193
  %2864 = trunc i8 %2863 to i1
  br i1 %2864, label %2865, label %2953

2865:                                             ; preds = %2860
  %2866 = load ptr, ptr %240, align 8, !tbaa !5
  %2867 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2866, i32 0, i32 6
  store i8 0, ptr %2867, align 1, !tbaa !258
  %2868 = load ptr, ptr %241, align 8, !tbaa !5
  %2869 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2868, i32 0, i32 6
  store i8 0, ptr %2869, align 1, !tbaa !258
  call void @llvm.lifetime.start.p0(i64 32, ptr %242) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %243) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %244) #9
  %2870 = load ptr, ptr %5, align 8, !tbaa !5
  %2871 = getelementptr inbounds i32, ptr %2870, i64 3
  %2872 = load i32, ptr %2871, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %244, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2872)
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %243, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %244)
          to label %2873 unwind label %2924

2873:                                             ; preds = %2865
  call void @llvm.lifetime.start.p0(i64 32, ptr %245) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %246) #9
  %2874 = load ptr, ptr %5, align 8, !tbaa !5
  %2875 = getelementptr inbounds i32, ptr %2874, i64 2
  %2876 = load i32, ptr %2875, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %246, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2876)
          to label %2877 unwind label %2928

2877:                                             ; preds = %2873
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %245, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %246)
          to label %2878 unwind label %2932

2878:                                             ; preds = %2877
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %242, ptr noundef nonnull align 1 dereferenceable(21) @.str.1007, ptr noundef nonnull align 8 dereferenceable(32) %243, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %245, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2879 unwind label %2936

2879:                                             ; preds = %2878
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %245) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %246) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %246) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %245) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %243) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %243) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %247) #9
  %2880 = load ptr, ptr %5, align 8, !tbaa !5
  %2881 = getelementptr inbounds i32, ptr %2880, i64 2
  %2882 = load i32, ptr %2881, align 4, !tbaa !15
  %2883 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2882)
          to label %2884 unwind label %2943

2884:                                             ; preds = %2879
  br i1 %2883, label %2885, label %2891

2885:                                             ; preds = %2884
  %2886 = load ptr, ptr %5, align 8, !tbaa !5
  %2887 = getelementptr inbounds i32, ptr %2886, i64 3
  %2888 = load i32, ptr %2887, align 4, !tbaa !15
  %2889 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2888)
          to label %2890 unwind label %2943

2890:                                             ; preds = %2885
  br label %2891

2891:                                             ; preds = %2890, %2884
  %2892 = phi i1 [ false, %2884 ], [ %2889, %2890 ]
  %2893 = zext i1 %2892 to i8
  store i8 %2893, ptr %247, align 1, !tbaa !199
  call void @llvm.lifetime.start.p0(i64 8, ptr %248) #9
  %2894 = load ptr, ptr %5, align 8, !tbaa !5
  %2895 = getelementptr inbounds i32, ptr %2894, i64 0
  %2896 = load i32, ptr %2895, align 4, !tbaa !15
  %2897 = load ptr, ptr %5, align 8, !tbaa !5
  %2898 = getelementptr inbounds i32, ptr %2897, i64 1
  %2899 = load i32, ptr %2898, align 4, !tbaa !15
  %2900 = load i8, ptr %247, align 1, !tbaa !199, !range !192, !noundef !193
  %2901 = trunc i8 %2900 to i1
  %2902 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2896, i32 noundef %2899, ptr noundef nonnull align 8 dereferenceable(32) %242, i1 noundef zeroext %2901, i1 noundef zeroext false)
          to label %2903 unwind label %2947

2903:                                             ; preds = %2891
  store ptr %2902, ptr %248, align 8, !tbaa !5
  %2904 = load ptr, ptr %248, align 8, !tbaa !5
  %2905 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2904, i32 0, i32 6
  store i8 1, ptr %2905, align 1, !tbaa !258
  %2906 = load ptr, ptr %240, align 8, !tbaa !5
  %2907 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2906, i32 0, i32 6
  store i8 1, ptr %2907, align 1, !tbaa !258
  %2908 = load ptr, ptr %241, align 8, !tbaa !5
  %2909 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2908, i32 0, i32 6
  store i8 1, ptr %2909, align 1, !tbaa !258
  %2910 = load ptr, ptr %5, align 8, !tbaa !5
  %2911 = getelementptr inbounds i32, ptr %2910, i64 1
  %2912 = load i32, ptr %2911, align 4, !tbaa !15
  %2913 = load ptr, ptr %5, align 8, !tbaa !5
  %2914 = getelementptr inbounds i32, ptr %2913, i64 2
  %2915 = load i32, ptr %2914, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2912, i32 noundef %2915)
          to label %2916 unwind label %2947

2916:                                             ; preds = %2903
  %2917 = load ptr, ptr %5, align 8, !tbaa !5
  %2918 = getelementptr inbounds i32, ptr %2917, i64 1
  %2919 = load i32, ptr %2918, align 4, !tbaa !15
  %2920 = load ptr, ptr %5, align 8, !tbaa !5
  %2921 = getelementptr inbounds i32, ptr %2920, i64 3
  %2922 = load i32, ptr %2921, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2919, i32 noundef %2922)
          to label %2923 unwind label %2947

2923:                                             ; preds = %2916
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %247) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %242) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %242) #9
  br label %2966

2924:                                             ; preds = %2865
  %2925 = landingpad { ptr, i32 }
          cleanup
  %2926 = extractvalue { ptr, i32 } %2925, 0
  store ptr %2926, ptr %30, align 8
  %2927 = extractvalue { ptr, i32 } %2925, 1
  store i32 %2927, ptr %31, align 4
  br label %2942

2928:                                             ; preds = %2873
  %2929 = landingpad { ptr, i32 }
          cleanup
  %2930 = extractvalue { ptr, i32 } %2929, 0
  store ptr %2930, ptr %30, align 8
  %2931 = extractvalue { ptr, i32 } %2929, 1
  store i32 %2931, ptr %31, align 4
  br label %2941

2932:                                             ; preds = %2877
  %2933 = landingpad { ptr, i32 }
          cleanup
  %2934 = extractvalue { ptr, i32 } %2933, 0
  store ptr %2934, ptr %30, align 8
  %2935 = extractvalue { ptr, i32 } %2933, 1
  store i32 %2935, ptr %31, align 4
  br label %2940

2936:                                             ; preds = %2878
  %2937 = landingpad { ptr, i32 }
          cleanup
  %2938 = extractvalue { ptr, i32 } %2937, 0
  store ptr %2938, ptr %30, align 8
  %2939 = extractvalue { ptr, i32 } %2937, 1
  store i32 %2939, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %245) #9
  br label %2940

2940:                                             ; preds = %2936, %2932
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %246) #9
  br label %2941

2941:                                             ; preds = %2940, %2928
  call void @llvm.lifetime.end.p0(i64 32, ptr %246) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %245) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %243) #9
  br label %2942

2942:                                             ; preds = %2941, %2924
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %243) #9
  br label %2952

2943:                                             ; preds = %2885, %2879
  %2944 = landingpad { ptr, i32 }
          cleanup
  %2945 = extractvalue { ptr, i32 } %2944, 0
  store ptr %2945, ptr %30, align 8
  %2946 = extractvalue { ptr, i32 } %2944, 1
  store i32 %2946, ptr %31, align 4
  br label %2951

2947:                                             ; preds = %2916, %2903, %2891
  %2948 = landingpad { ptr, i32 }
          cleanup
  %2949 = extractvalue { ptr, i32 } %2948, 0
  store ptr %2949, ptr %30, align 8
  %2950 = extractvalue { ptr, i32 } %2948, 1
  store i32 %2950, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #9
  br label %2951

2951:                                             ; preds = %2947, %2943
  call void @llvm.lifetime.end.p0(i64 1, ptr %247) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %242) #9
  br label %2952

2952:                                             ; preds = %2951, %2942
  call void @llvm.lifetime.end.p0(i64 32, ptr %242) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #9
  br label %5109

2953:                                             ; preds = %2860, %2855, %2852, %2841
  %2954 = load ptr, ptr %5, align 8, !tbaa !5
  %2955 = getelementptr inbounds i32, ptr %2954, i64 0
  %2956 = load i32, ptr %2955, align 4, !tbaa !15
  %2957 = load ptr, ptr %5, align 8, !tbaa !5
  %2958 = getelementptr inbounds i32, ptr %2957, i64 1
  %2959 = load i32, ptr %2958, align 4, !tbaa !15
  %2960 = load ptr, ptr %5, align 8, !tbaa !5
  %2961 = getelementptr inbounds i32, ptr %2960, i64 2
  %2962 = load i32, ptr %2961, align 4, !tbaa !15
  %2963 = load ptr, ptr %5, align 8, !tbaa !5
  %2964 = getelementptr inbounds i32, ptr %2963, i64 3
  %2965 = load i32, ptr %2964, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2956, i32 noundef %2959, i32 noundef %2962, i32 noundef %2965, ptr noundef @.str.1008)
  br label %2966

2966:                                             ; preds = %2953, %2923
  store i32 2, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #9
  br label %5106

2967:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %249) #9
  %2968 = load ptr, ptr %5, align 8, !tbaa !5
  %2969 = getelementptr inbounds i32, ptr %2968, i64 0
  %2970 = load i32, ptr %2969, align 4, !tbaa !15
  store i32 %2970, ptr %249, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %250) #9
  %2971 = load ptr, ptr %5, align 8, !tbaa !5
  %2972 = getelementptr inbounds i32, ptr %2971, i64 1
  %2973 = load i32, ptr %2972, align 4, !tbaa !15
  store i32 %2973, ptr %250, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %251) #9
  %2974 = load ptr, ptr %5, align 8, !tbaa !5
  %2975 = getelementptr inbounds i32, ptr %2974, i64 2
  %2976 = load i32, ptr %2975, align 4, !tbaa !15
  store i32 %2976, ptr %251, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %252) #9
  %2977 = load ptr, ptr %5, align 8, !tbaa !5
  %2978 = getelementptr inbounds i32, ptr %2977, i64 3
  %2979 = load i32, ptr %2978, align 4, !tbaa !15
  store i32 %2979, ptr %252, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %253) #9
  %2980 = load i32, ptr %249, align 4, !tbaa !15
  %2981 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2980)
  store ptr %2981, ptr %253, align 8, !tbaa !5
  %2982 = load i32, ptr %249, align 4, !tbaa !15
  %2983 = load i32, ptr %250, align 4, !tbaa !15
  %2984 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2982, i32 noundef %2983)
  call void @llvm.lifetime.start.p0(i64 8, ptr %254) #9
  %2985 = load ptr, ptr %253, align 8, !tbaa !5
  %2986 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2985, i32 0, i32 12
  %2987 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2986, i64 noundef 1) #9
  %2988 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2987)
  %2989 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %2988)
  store ptr %2989, ptr %254, align 8, !tbaa !5
  %2990 = load i32, ptr %6, align 4, !tbaa !13
  %2991 = icmp eq i32 %2990, 149
  br i1 %2991, label %2992, label %3081

2992:                                             ; preds = %2967
  call void @llvm.lifetime.start.p0(i64 32, ptr %255) #9
  %2993 = load i32, ptr %250, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %255, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2993, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %256) #9
  %2994 = load ptr, ptr %253, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %256, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %2994, i32 noundef 0)
          to label %2995 unwind label %3023

2995:                                             ; preds = %2992
  call void @llvm.lifetime.start.p0(i64 32, ptr %257) #9
  %2996 = load i32, ptr %251, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %257, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2996, i1 noundef zeroext true)
          to label %2997 unwind label %3027

2997:                                             ; preds = %2995
  call void @llvm.lifetime.start.p0(i64 32, ptr %258) #9
  %2998 = load i32, ptr %252, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %258, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %2998, i1 noundef zeroext true)
          to label %2999 unwind label %3031

2999:                                             ; preds = %2997
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %255, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %256, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %257, ptr noundef nonnull align 1 dereferenceable(4) @.str.70, ptr noundef nonnull align 8 dereferenceable(32) %258, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %3000 unwind label %3035

3000:                                             ; preds = %2999
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %258) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %258) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %257) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %257) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %256) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %256) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %255) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %255) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %259) #9
  %3001 = load i32, ptr %250, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %259, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3001, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %260) #9
  %3002 = load ptr, ptr %253, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %260, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %3002, i32 noundef 1)
          to label %3003 unwind label %3042

3003:                                             ; preds = %3000
  call void @llvm.lifetime.start.p0(i64 32, ptr %261) #9
  %3004 = load ptr, ptr %254, align 8, !tbaa !5
  %3005 = load ptr, ptr %448, align 8, !tbaa !197
  %3006 = getelementptr inbounds ptr, ptr %3005, i64 19
  %3007 = load ptr, ptr %3006, align 8
  invoke void %3007(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %261, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %3004, i32 noundef 0)
          to label %3008 unwind label %3046

3008:                                             ; preds = %3003
  call void @llvm.lifetime.start.p0(i64 32, ptr %262) #9
  %3009 = load ptr, ptr %254, align 8, !tbaa !5
  %3010 = load ptr, ptr %448, align 8, !tbaa !197
  %3011 = getelementptr inbounds ptr, ptr %3010, i64 19
  %3012 = load ptr, ptr %3011, align 8
  invoke void %3012(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %262, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %3009, i32 noundef 0)
          to label %3013 unwind label %3050

3013:                                             ; preds = %3008
  call void @llvm.lifetime.start.p0(i64 32, ptr %263) #9
  %3014 = load i32, ptr %250, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %263, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3014, i1 noundef zeroext true)
          to label %3015 unwind label %3054

3015:                                             ; preds = %3013
  call void @llvm.lifetime.start.p0(i64 32, ptr %264) #9
  %3016 = load ptr, ptr %253, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %264, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %3016, i32 noundef 0)
          to label %3017 unwind label %3058

3017:                                             ; preds = %3015
  call void @llvm.lifetime.start.p0(i64 32, ptr %265) #9
  %3018 = load i32, ptr %251, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %265, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3018, i1 noundef zeroext true)
          to label %3019 unwind label %3062

3019:                                             ; preds = %3017
  call void @llvm.lifetime.start.p0(i64 32, ptr %266) #9
  %3020 = load i32, ptr %252, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %266, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3020, i1 noundef zeroext true)
          to label %3021 unwind label %3066

3021:                                             ; preds = %3019
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA11_S8_S7_RA6_S8_S7_SE_S7_SA_S7_RA9_S8_S7_RA3_S8_S7_RA4_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %259, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %260, ptr noundef nonnull align 1 dereferenceable(11) @.str.1009, ptr noundef nonnull align 8 dereferenceable(32) %261, ptr noundef nonnull align 1 dereferenceable(6) @.str.1010, ptr noundef nonnull align 8 dereferenceable(32) %262, ptr noundef nonnull align 1 dereferenceable(6) @.str.1011, ptr noundef nonnull align 8 dereferenceable(32) %263, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %264, ptr noundef nonnull align 1 dereferenceable(9) @.str.1012, ptr noundef nonnull align 8 dereferenceable(32) %265, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %266, ptr noundef nonnull align 1 dereferenceable(4) @.str.1013)
          to label %3022 unwind label %3070

3022:                                             ; preds = %3021
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %266) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %265) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %265) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %264) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %263) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %263) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %262) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %261) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %260) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %260) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %259) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %259) #9
  br label %3156

3023:                                             ; preds = %2992
  %3024 = landingpad { ptr, i32 }
          cleanup
  %3025 = extractvalue { ptr, i32 } %3024, 0
  store ptr %3025, ptr %30, align 8
  %3026 = extractvalue { ptr, i32 } %3024, 1
  store i32 %3026, ptr %31, align 4
  br label %3041

3027:                                             ; preds = %2995
  %3028 = landingpad { ptr, i32 }
          cleanup
  %3029 = extractvalue { ptr, i32 } %3028, 0
  store ptr %3029, ptr %30, align 8
  %3030 = extractvalue { ptr, i32 } %3028, 1
  store i32 %3030, ptr %31, align 4
  br label %3040

3031:                                             ; preds = %2997
  %3032 = landingpad { ptr, i32 }
          cleanup
  %3033 = extractvalue { ptr, i32 } %3032, 0
  store ptr %3033, ptr %30, align 8
  %3034 = extractvalue { ptr, i32 } %3032, 1
  store i32 %3034, ptr %31, align 4
  br label %3039

3035:                                             ; preds = %2999
  %3036 = landingpad { ptr, i32 }
          cleanup
  %3037 = extractvalue { ptr, i32 } %3036, 0
  store ptr %3037, ptr %30, align 8
  %3038 = extractvalue { ptr, i32 } %3036, 1
  store i32 %3038, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %258) #9
  br label %3039

3039:                                             ; preds = %3035, %3031
  call void @llvm.lifetime.end.p0(i64 32, ptr %258) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %257) #9
  br label %3040

3040:                                             ; preds = %3039, %3027
  call void @llvm.lifetime.end.p0(i64 32, ptr %257) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %256) #9
  br label %3041

3041:                                             ; preds = %3040, %3023
  call void @llvm.lifetime.end.p0(i64 32, ptr %256) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %255) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %255) #9
  br label %3157

3042:                                             ; preds = %3000
  %3043 = landingpad { ptr, i32 }
          cleanup
  %3044 = extractvalue { ptr, i32 } %3043, 0
  store ptr %3044, ptr %30, align 8
  %3045 = extractvalue { ptr, i32 } %3043, 1
  store i32 %3045, ptr %31, align 4
  br label %3080

3046:                                             ; preds = %3003
  %3047 = landingpad { ptr, i32 }
          cleanup
  %3048 = extractvalue { ptr, i32 } %3047, 0
  store ptr %3048, ptr %30, align 8
  %3049 = extractvalue { ptr, i32 } %3047, 1
  store i32 %3049, ptr %31, align 4
  br label %3079

3050:                                             ; preds = %3008
  %3051 = landingpad { ptr, i32 }
          cleanup
  %3052 = extractvalue { ptr, i32 } %3051, 0
  store ptr %3052, ptr %30, align 8
  %3053 = extractvalue { ptr, i32 } %3051, 1
  store i32 %3053, ptr %31, align 4
  br label %3078

3054:                                             ; preds = %3013
  %3055 = landingpad { ptr, i32 }
          cleanup
  %3056 = extractvalue { ptr, i32 } %3055, 0
  store ptr %3056, ptr %30, align 8
  %3057 = extractvalue { ptr, i32 } %3055, 1
  store i32 %3057, ptr %31, align 4
  br label %3077

3058:                                             ; preds = %3015
  %3059 = landingpad { ptr, i32 }
          cleanup
  %3060 = extractvalue { ptr, i32 } %3059, 0
  store ptr %3060, ptr %30, align 8
  %3061 = extractvalue { ptr, i32 } %3059, 1
  store i32 %3061, ptr %31, align 4
  br label %3076

3062:                                             ; preds = %3017
  %3063 = landingpad { ptr, i32 }
          cleanup
  %3064 = extractvalue { ptr, i32 } %3063, 0
  store ptr %3064, ptr %30, align 8
  %3065 = extractvalue { ptr, i32 } %3063, 1
  store i32 %3065, ptr %31, align 4
  br label %3075

3066:                                             ; preds = %3019
  %3067 = landingpad { ptr, i32 }
          cleanup
  %3068 = extractvalue { ptr, i32 } %3067, 0
  store ptr %3068, ptr %30, align 8
  %3069 = extractvalue { ptr, i32 } %3067, 1
  store i32 %3069, ptr %31, align 4
  br label %3074

3070:                                             ; preds = %3021
  %3071 = landingpad { ptr, i32 }
          cleanup
  %3072 = extractvalue { ptr, i32 } %3071, 0
  store ptr %3072, ptr %30, align 8
  %3073 = extractvalue { ptr, i32 } %3071, 1
  store i32 %3073, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #9
  br label %3074

3074:                                             ; preds = %3070, %3066
  call void @llvm.lifetime.end.p0(i64 32, ptr %266) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %265) #9
  br label %3075

3075:                                             ; preds = %3074, %3062
  call void @llvm.lifetime.end.p0(i64 32, ptr %265) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #9
  br label %3076

3076:                                             ; preds = %3075, %3058
  call void @llvm.lifetime.end.p0(i64 32, ptr %264) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %263) #9
  br label %3077

3077:                                             ; preds = %3076, %3054
  call void @llvm.lifetime.end.p0(i64 32, ptr %263) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #9
  br label %3078

3078:                                             ; preds = %3077, %3050
  call void @llvm.lifetime.end.p0(i64 32, ptr %262) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #9
  br label %3079

3079:                                             ; preds = %3078, %3046
  call void @llvm.lifetime.end.p0(i64 32, ptr %261) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %260) #9
  br label %3080

3080:                                             ; preds = %3079, %3042
  call void @llvm.lifetime.end.p0(i64 32, ptr %260) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %259) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %259) #9
  br label %3157

3081:                                             ; preds = %2967
  call void @llvm.lifetime.start.p0(i64 32, ptr %267) #9
  %3082 = load i32, ptr %250, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %267, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3082, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %268) #9
  %3083 = load ptr, ptr %253, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %268, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %3083, i32 noundef 0)
          to label %3084 unwind label %3108

3084:                                             ; preds = %3081
  call void @llvm.lifetime.start.p0(i64 32, ptr %269) #9
  %3085 = load i32, ptr %251, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %269, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3085, i1 noundef zeroext true)
          to label %3086 unwind label %3112

3086:                                             ; preds = %3084
  call void @llvm.lifetime.start.p0(i64 32, ptr %270) #9
  %3087 = load i32, ptr %252, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %270, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3087, i1 noundef zeroext true)
          to label %3088 unwind label %3116

3088:                                             ; preds = %3086
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %267, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %268, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %269, ptr noundef nonnull align 1 dereferenceable(4) @.str.1014, ptr noundef nonnull align 8 dereferenceable(32) %270, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %3089 unwind label %3120

3089:                                             ; preds = %3088
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %270) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %270) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %269) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %269) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %268) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %267) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %267) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %271) #9
  %3090 = load i32, ptr %250, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %271, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3090, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %272) #9
  %3091 = load ptr, ptr %253, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %272, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(336) %3091, i32 noundef 1)
          to label %3092 unwind label %3127

3092:                                             ; preds = %3089
  call void @llvm.lifetime.start.p0(i64 32, ptr %273) #9
  %3093 = load ptr, ptr %254, align 8, !tbaa !5
  %3094 = load ptr, ptr %448, align 8, !tbaa !197
  %3095 = getelementptr inbounds ptr, ptr %3094, i64 19
  %3096 = load ptr, ptr %3095, align 8
  invoke void %3096(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %273, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %3093, i32 noundef 0)
          to label %3097 unwind label %3131

3097:                                             ; preds = %3092
  call void @llvm.lifetime.start.p0(i64 32, ptr %274) #9
  %3098 = load ptr, ptr %254, align 8, !tbaa !5
  %3099 = load ptr, ptr %448, align 8, !tbaa !197
  %3100 = getelementptr inbounds ptr, ptr %3099, i64 19
  %3101 = load ptr, ptr %3100, align 8
  invoke void %3101(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %274, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %3098, i32 noundef 0)
          to label %3102 unwind label %3135

3102:                                             ; preds = %3097
  call void @llvm.lifetime.start.p0(i64 32, ptr %275) #9
  %3103 = load i32, ptr %251, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %275, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3103, i1 noundef zeroext true)
          to label %3104 unwind label %3139

3104:                                             ; preds = %3102
  call void @llvm.lifetime.start.p0(i64 32, ptr %276) #9
  %3105 = load i32, ptr %252, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %276, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3105, i1 noundef zeroext true)
          to label %3106 unwind label %3143

3106:                                             ; preds = %3104
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA11_S8_S7_RA6_S8_S7_SE_S7_RA5_S8_S7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %271, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %272, ptr noundef nonnull align 1 dereferenceable(11) @.str.1009, ptr noundef nonnull align 8 dereferenceable(32) %273, ptr noundef nonnull align 1 dereferenceable(6) @.str.1010, ptr noundef nonnull align 8 dereferenceable(32) %274, ptr noundef nonnull align 1 dereferenceable(6) @.str.1011, ptr noundef nonnull align 8 dereferenceable(32) %275, ptr noundef nonnull align 1 dereferenceable(5) @.str.1015, ptr noundef nonnull align 8 dereferenceable(32) %276, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %3107 unwind label %3147

3107:                                             ; preds = %3106
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %276) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %276) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %275) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %275) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %274) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %274) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %273) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %273) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %272) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %272) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %271) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %271) #9
  br label %3156

3108:                                             ; preds = %3081
  %3109 = landingpad { ptr, i32 }
          cleanup
  %3110 = extractvalue { ptr, i32 } %3109, 0
  store ptr %3110, ptr %30, align 8
  %3111 = extractvalue { ptr, i32 } %3109, 1
  store i32 %3111, ptr %31, align 4
  br label %3126

3112:                                             ; preds = %3084
  %3113 = landingpad { ptr, i32 }
          cleanup
  %3114 = extractvalue { ptr, i32 } %3113, 0
  store ptr %3114, ptr %30, align 8
  %3115 = extractvalue { ptr, i32 } %3113, 1
  store i32 %3115, ptr %31, align 4
  br label %3125

3116:                                             ; preds = %3086
  %3117 = landingpad { ptr, i32 }
          cleanup
  %3118 = extractvalue { ptr, i32 } %3117, 0
  store ptr %3118, ptr %30, align 8
  %3119 = extractvalue { ptr, i32 } %3117, 1
  store i32 %3119, ptr %31, align 4
  br label %3124

3120:                                             ; preds = %3088
  %3121 = landingpad { ptr, i32 }
          cleanup
  %3122 = extractvalue { ptr, i32 } %3121, 0
  store ptr %3122, ptr %30, align 8
  %3123 = extractvalue { ptr, i32 } %3121, 1
  store i32 %3123, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %270) #9
  br label %3124

3124:                                             ; preds = %3120, %3116
  call void @llvm.lifetime.end.p0(i64 32, ptr %270) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %269) #9
  br label %3125

3125:                                             ; preds = %3124, %3112
  call void @llvm.lifetime.end.p0(i64 32, ptr %269) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #9
  br label %3126

3126:                                             ; preds = %3125, %3108
  call void @llvm.lifetime.end.p0(i64 32, ptr %268) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %267) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %267) #9
  br label %3157

3127:                                             ; preds = %3089
  %3128 = landingpad { ptr, i32 }
          cleanup
  %3129 = extractvalue { ptr, i32 } %3128, 0
  store ptr %3129, ptr %30, align 8
  %3130 = extractvalue { ptr, i32 } %3128, 1
  store i32 %3130, ptr %31, align 4
  br label %3155

3131:                                             ; preds = %3092
  %3132 = landingpad { ptr, i32 }
          cleanup
  %3133 = extractvalue { ptr, i32 } %3132, 0
  store ptr %3133, ptr %30, align 8
  %3134 = extractvalue { ptr, i32 } %3132, 1
  store i32 %3134, ptr %31, align 4
  br label %3154

3135:                                             ; preds = %3097
  %3136 = landingpad { ptr, i32 }
          cleanup
  %3137 = extractvalue { ptr, i32 } %3136, 0
  store ptr %3137, ptr %30, align 8
  %3138 = extractvalue { ptr, i32 } %3136, 1
  store i32 %3138, ptr %31, align 4
  br label %3153

3139:                                             ; preds = %3102
  %3140 = landingpad { ptr, i32 }
          cleanup
  %3141 = extractvalue { ptr, i32 } %3140, 0
  store ptr %3141, ptr %30, align 8
  %3142 = extractvalue { ptr, i32 } %3140, 1
  store i32 %3142, ptr %31, align 4
  br label %3152

3143:                                             ; preds = %3104
  %3144 = landingpad { ptr, i32 }
          cleanup
  %3145 = extractvalue { ptr, i32 } %3144, 0
  store ptr %3145, ptr %30, align 8
  %3146 = extractvalue { ptr, i32 } %3144, 1
  store i32 %3146, ptr %31, align 4
  br label %3151

3147:                                             ; preds = %3106
  %3148 = landingpad { ptr, i32 }
          cleanup
  %3149 = extractvalue { ptr, i32 } %3148, 0
  store ptr %3149, ptr %30, align 8
  %3150 = extractvalue { ptr, i32 } %3148, 1
  store i32 %3150, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %276) #9
  br label %3151

3151:                                             ; preds = %3147, %3143
  call void @llvm.lifetime.end.p0(i64 32, ptr %276) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %275) #9
  br label %3152

3152:                                             ; preds = %3151, %3139
  call void @llvm.lifetime.end.p0(i64 32, ptr %275) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %274) #9
  br label %3153

3153:                                             ; preds = %3152, %3135
  call void @llvm.lifetime.end.p0(i64 32, ptr %274) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %273) #9
  br label %3154

3154:                                             ; preds = %3153, %3131
  call void @llvm.lifetime.end.p0(i64 32, ptr %273) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %272) #9
  br label %3155

3155:                                             ; preds = %3154, %3127
  call void @llvm.lifetime.end.p0(i64 32, ptr %272) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %271) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %271) #9
  br label %3157

3156:                                             ; preds = %3107, %3022
  store i32 2, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %254) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %253) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %252) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %251) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %250) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %249) #9
  br label %5106

3157:                                             ; preds = %3155, %3126, %3080, %3041
  call void @llvm.lifetime.end.p0(i64 8, ptr %254) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %253) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %252) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %251) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %250) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %249) #9
  br label %5109

3158:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %277) #9
  %3159 = load ptr, ptr %5, align 8, !tbaa !5
  %3160 = getelementptr inbounds i32, ptr %3159, i64 0
  %3161 = load i32, ptr %3160, align 4, !tbaa !15
  store i32 %3161, ptr %277, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %278) #9
  %3162 = load ptr, ptr %5, align 8, !tbaa !5
  %3163 = getelementptr inbounds i32, ptr %3162, i64 1
  %3164 = load i32, ptr %3163, align 4, !tbaa !15
  store i32 %3164, ptr %278, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %279) #9
  %3165 = load ptr, ptr %5, align 8, !tbaa !5
  %3166 = getelementptr inbounds i32, ptr %3165, i64 2
  %3167 = load i32, ptr %3166, align 4, !tbaa !15
  store i32 %3167, ptr %279, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %280) #9
  %3168 = load ptr, ptr %5, align 8, !tbaa !5
  %3169 = getelementptr inbounds i32, ptr %3168, i64 3
  %3170 = load i32, ptr %3169, align 4, !tbaa !15
  store i32 %3170, ptr %280, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %281) #9
  %3171 = load i32, ptr %277, align 4, !tbaa !15
  %3172 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3171)
  store ptr %3172, ptr %281, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %282) #9
  %3173 = load ptr, ptr %281, align 8, !tbaa !5
  %3174 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3173, i32 0, i32 12
  %3175 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %3174, i64 noundef 0) #9
  %3176 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %3175)
  %3177 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3176)
  store ptr %3177, ptr %282, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %283) #9
  %3178 = load i32, ptr %6, align 4, !tbaa !13
  %3179 = icmp eq i32 %3178, 152
  br i1 %3179, label %3180, label %3182

3180:                                             ; preds = %3158
  %3181 = load i32, ptr %8, align 4, !tbaa !16
  br label %3184

3182:                                             ; preds = %3158
  %3183 = load i32, ptr %9, align 4, !tbaa !16
  br label %3184

3184:                                             ; preds = %3182, %3180
  %3185 = phi i32 [ %3181, %3180 ], [ %3183, %3182 ]
  store i32 %3185, ptr %283, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %284) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %285) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #9
  %3186 = load i32, ptr %279, align 4, !tbaa !15
  %3187 = load i32, ptr %280, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind writable sret(%"struct.spirv_cross::SPIRType") align 8 %286, ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %284, ptr noundef nonnull align 8 dereferenceable(32) %285, ptr noundef nonnull align 4 dereferenceable(4) %283, i32 noundef %3186, i32 noundef %3187, i1 noundef zeroext false)
          to label %3188 unwind label %3204

3188:                                             ; preds = %3184
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %286) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %287) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %288) #9
  %3189 = load ptr, ptr %281, align 8, !tbaa !5
  %3190 = load ptr, ptr %448, align 8, !tbaa !197
  %3191 = getelementptr inbounds ptr, ptr %3190, i64 19
  %3192 = load ptr, ptr %3191, align 8
  invoke void %3192(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %288, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %3189, i32 noundef 0)
          to label %3193 unwind label %3208

3193:                                             ; preds = %3188
  call void @llvm.lifetime.start.p0(i64 32, ptr %289) #9
  %3194 = load ptr, ptr %282, align 8, !tbaa !5
  %3195 = load ptr, ptr %448, align 8, !tbaa !197
  %3196 = getelementptr inbounds ptr, ptr %3195, i64 19
  %3197 = load ptr, ptr %3196, align 8
  invoke void %3197(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %289, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %3194, i32 noundef 0)
          to label %3198 unwind label %3212

3198:                                             ; preds = %3193
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_RS9_SB_SC_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %287, ptr noundef nonnull align 1 dereferenceable(16) @.str.1016, ptr noundef nonnull align 8 dereferenceable(32) %288, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %289, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %284, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %285, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %3199 unwind label %3216

3199:                                             ; preds = %3198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %289) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %289) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %288) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %288) #9
  %3200 = load i32, ptr %277, align 4, !tbaa !15
  %3201 = load i32, ptr %278, align 4, !tbaa !15
  %3202 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3200, i32 noundef %3201, ptr noundef nonnull align 8 dereferenceable(32) %287, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %3203 unwind label %3222

3203:                                             ; preds = %3199
  store i32 2, ptr %217, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %287) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %287) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %285) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %284) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %283) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %282) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %281) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %280) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %279) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %278) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %277) #9
  br label %5106

3204:                                             ; preds = %3184
  %3205 = landingpad { ptr, i32 }
          cleanup
  %3206 = extractvalue { ptr, i32 } %3205, 0
  store ptr %3206, ptr %30, align 8
  %3207 = extractvalue { ptr, i32 } %3205, 1
  store i32 %3207, ptr %31, align 4
  br label %3227

3208:                                             ; preds = %3188
  %3209 = landingpad { ptr, i32 }
          cleanup
  %3210 = extractvalue { ptr, i32 } %3209, 0
  store ptr %3210, ptr %30, align 8
  %3211 = extractvalue { ptr, i32 } %3209, 1
  store i32 %3211, ptr %31, align 4
  br label %3221

3212:                                             ; preds = %3193
  %3213 = landingpad { ptr, i32 }
          cleanup
  %3214 = extractvalue { ptr, i32 } %3213, 0
  store ptr %3214, ptr %30, align 8
  %3215 = extractvalue { ptr, i32 } %3213, 1
  store i32 %3215, ptr %31, align 4
  br label %3220

3216:                                             ; preds = %3198
  %3217 = landingpad { ptr, i32 }
          cleanup
  %3218 = extractvalue { ptr, i32 } %3217, 0
  store ptr %3218, ptr %30, align 8
  %3219 = extractvalue { ptr, i32 } %3217, 1
  store i32 %3219, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %289) #9
  br label %3220

3220:                                             ; preds = %3216, %3212
  call void @llvm.lifetime.end.p0(i64 32, ptr %289) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %288) #9
  br label %3221

3221:                                             ; preds = %3220, %3208
  call void @llvm.lifetime.end.p0(i64 32, ptr %288) #9
  br label %3226

3222:                                             ; preds = %3199
  %3223 = landingpad { ptr, i32 }
          cleanup
  %3224 = extractvalue { ptr, i32 } %3223, 0
  store ptr %3224, ptr %30, align 8
  %3225 = extractvalue { ptr, i32 } %3223, 1
  store i32 %3225, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %287) #9
  br label %3226

3226:                                             ; preds = %3222, %3221
  call void @llvm.lifetime.end.p0(i64 32, ptr %287) #9
  br label %3227

3227:                                             ; preds = %3226, %3204
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %285) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %284) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %283) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %282) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %281) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %280) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %279) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %278) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %277) #9
  br label %5109

3228:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %290) #9
  %3229 = load ptr, ptr %5, align 8, !tbaa !5
  %3230 = getelementptr inbounds i32, ptr %3229, i64 2
  %3231 = load i32, ptr %3230, align 4, !tbaa !15
  %3232 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3231)
  store ptr %3232, ptr %290, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %291) #9
  %3233 = load ptr, ptr %290, align 8, !tbaa !5
  %3234 = load ptr, ptr %5, align 8, !tbaa !5
  %3235 = getelementptr inbounds i32, ptr %3234, i64 3
  %3236 = load i32, ptr %3235, align 4, !tbaa !15
  %3237 = call noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, ptr noundef nonnull align 8 dereferenceable(336) %3233, i32 noundef %3236)
  store i32 %3237, ptr %291, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %292) #9
  %3238 = load ptr, ptr %290, align 8, !tbaa !5
  %3239 = load ptr, ptr %5, align 8, !tbaa !5
  %3240 = getelementptr inbounds i32, ptr %3239, i64 3
  %3241 = load i32, ptr %3240, align 4, !tbaa !15
  %3242 = call noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, ptr noundef nonnull align 8 dereferenceable(336) %3238, i32 noundef %3241)
  store i32 %3242, ptr %292, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %293) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %294) #9
  %3243 = load ptr, ptr %5, align 8, !tbaa !5
  %3244 = getelementptr inbounds i32, ptr %3243, i64 2
  %3245 = load i32, ptr %3244, align 4, !tbaa !15
  call void @_ZN11spirv_cross11CompilerMSL25to_buffer_size_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %294, ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef %3245)
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_RjRA5_S1_SC_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %293, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %294, ptr noundef nonnull align 1 dereferenceable(4) @.str.1014, ptr noundef nonnull align 4 dereferenceable(4) %291, ptr noundef nonnull align 1 dereferenceable(5) @.str.1018, ptr noundef nonnull align 4 dereferenceable(4) %292)
          to label %3246 unwind label %3255

3246:                                             ; preds = %3228
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %294) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %294) #9
  %3247 = load ptr, ptr %5, align 8, !tbaa !5
  %3248 = getelementptr inbounds i32, ptr %3247, i64 0
  %3249 = load i32, ptr %3248, align 4, !tbaa !15
  %3250 = load ptr, ptr %5, align 8, !tbaa !5
  %3251 = getelementptr inbounds i32, ptr %3250, i64 1
  %3252 = load i32, ptr %3251, align 4, !tbaa !15
  %3253 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3249, i32 noundef %3252, ptr noundef nonnull align 8 dereferenceable(32) %293, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %3254 unwind label %3259

3254:                                             ; preds = %3246
  store i32 2, ptr %217, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %293) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %293) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %292) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %291) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %290) #9
  br label %5106

3255:                                             ; preds = %3228
  %3256 = landingpad { ptr, i32 }
          cleanup
  %3257 = extractvalue { ptr, i32 } %3256, 0
  store ptr %3257, ptr %30, align 8
  %3258 = extractvalue { ptr, i32 } %3256, 1
  store i32 %3258, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %294) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %294) #9
  br label %3263

3259:                                             ; preds = %3246
  %3260 = landingpad { ptr, i32 }
          cleanup
  %3261 = extractvalue { ptr, i32 } %3260, 0
  store ptr %3261, ptr %30, align 8
  %3262 = extractvalue { ptr, i32 } %3260, 1
  store i32 %3262, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %293) #9
  br label %3263

3263:                                             ; preds = %3259, %3255
  call void @llvm.lifetime.end.p0(i64 32, ptr %293) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %292) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %291) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %290) #9
  br label %5109

3264:                                             ; preds = %2, %2, %2, %2, %2, %2
  %3265 = load ptr, ptr %4, align 8, !tbaa !5
  %3266 = load ptr, ptr %448, align 8, !tbaa !197
  %3267 = getelementptr inbounds ptr, ptr %3266, i64 18
  %3268 = load ptr, ptr %3267, align 8
  call void %3268(ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 4 dereferenceable(12) %3265)
  br label %5106

3269:                                             ; preds = %2
  %3270 = load ptr, ptr %5, align 8, !tbaa !5
  %3271 = getelementptr inbounds i32, ptr %3270, i64 0
  %3272 = load i32, ptr %3271, align 4, !tbaa !15
  %3273 = load ptr, ptr %5, align 8, !tbaa !5
  %3274 = getelementptr inbounds i32, ptr %3273, i64 1
  %3275 = load i32, ptr %3274, align 4, !tbaa !15
  %3276 = load ptr, ptr %5, align 8, !tbaa !5
  %3277 = getelementptr inbounds i32, ptr %3276, i64 2
  %3278 = load i32, ptr %3277, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3272, i32 noundef %3275, i32 noundef %3278, ptr noundef @.str.1019)
  br label %5106

3279:                                             ; preds = %2
  %3280 = load ptr, ptr %5, align 8, !tbaa !5
  %3281 = getelementptr inbounds i32, ptr %3280, i64 0
  %3282 = load i32, ptr %3281, align 4, !tbaa !15
  %3283 = load ptr, ptr %5, align 8, !tbaa !5
  %3284 = getelementptr inbounds i32, ptr %3283, i64 1
  %3285 = load i32, ptr %3284, align 4, !tbaa !15
  %3286 = load ptr, ptr %5, align 8, !tbaa !5
  %3287 = getelementptr inbounds i32, ptr %3286, i64 2
  %3288 = load i32, ptr %3287, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3282, i32 noundef %3285, i32 noundef %3288, ptr noundef @.str.1020)
  br label %5106

3289:                                             ; preds = %2, %2
  %3290 = load ptr, ptr %5, align 8, !tbaa !5
  %3291 = getelementptr inbounds i32, ptr %3290, i64 0
  %3292 = load i32, ptr %3291, align 4, !tbaa !15
  %3293 = load ptr, ptr %5, align 8, !tbaa !5
  %3294 = getelementptr inbounds i32, ptr %3293, i64 1
  %3295 = load i32, ptr %3294, align 4, !tbaa !15
  %3296 = load ptr, ptr %5, align 8, !tbaa !5
  %3297 = getelementptr inbounds i32, ptr %3296, i64 2
  %3298 = load i32, ptr %3297, align 4, !tbaa !15
  %3299 = load ptr, ptr %5, align 8, !tbaa !5
  %3300 = getelementptr inbounds i32, ptr %3299, i64 3
  %3301 = load i32, ptr %3300, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3292, i32 noundef %3295, i32 noundef %3298, i32 noundef %3301, ptr noundef @.str.1021)
  br label %5106

3302:                                             ; preds = %2, %2
  %3303 = load ptr, ptr %5, align 8, !tbaa !5
  %3304 = getelementptr inbounds i32, ptr %3303, i64 0
  %3305 = load i32, ptr %3304, align 4, !tbaa !15
  %3306 = load ptr, ptr %5, align 8, !tbaa !5
  %3307 = getelementptr inbounds i32, ptr %3306, i64 1
  %3308 = load i32, ptr %3307, align 4, !tbaa !15
  %3309 = load ptr, ptr %5, align 8, !tbaa !5
  %3310 = getelementptr inbounds i32, ptr %3309, i64 2
  %3311 = load i32, ptr %3310, align 4, !tbaa !15
  %3312 = load ptr, ptr %5, align 8, !tbaa !5
  %3313 = getelementptr inbounds i32, ptr %3312, i64 3
  %3314 = load i32, ptr %3313, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3305, i32 noundef %3308, i32 noundef %3311, i32 noundef %3314, ptr noundef @.str.1022)
  br label %5106

3315:                                             ; preds = %2, %2
  %3316 = load ptr, ptr %5, align 8, !tbaa !5
  %3317 = getelementptr inbounds i32, ptr %3316, i64 0
  %3318 = load i32, ptr %3317, align 4, !tbaa !15
  %3319 = load ptr, ptr %5, align 8, !tbaa !5
  %3320 = getelementptr inbounds i32, ptr %3319, i64 1
  %3321 = load i32, ptr %3320, align 4, !tbaa !15
  %3322 = load ptr, ptr %5, align 8, !tbaa !5
  %3323 = getelementptr inbounds i32, ptr %3322, i64 2
  %3324 = load i32, ptr %3323, align 4, !tbaa !15
  %3325 = load ptr, ptr %5, align 8, !tbaa !5
  %3326 = getelementptr inbounds i32, ptr %3325, i64 3
  %3327 = load i32, ptr %3326, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3318, i32 noundef %3321, i32 noundef %3324, i32 noundef %3327, ptr noundef @.str.1023)
  br label %5106

3328:                                             ; preds = %2, %2
  %3329 = load ptr, ptr %5, align 8, !tbaa !5
  %3330 = getelementptr inbounds i32, ptr %3329, i64 0
  %3331 = load i32, ptr %3330, align 4, !tbaa !15
  %3332 = load ptr, ptr %5, align 8, !tbaa !5
  %3333 = getelementptr inbounds i32, ptr %3332, i64 1
  %3334 = load i32, ptr %3333, align 4, !tbaa !15
  %3335 = load ptr, ptr %5, align 8, !tbaa !5
  %3336 = getelementptr inbounds i32, ptr %3335, i64 2
  %3337 = load i32, ptr %3336, align 4, !tbaa !15
  %3338 = load ptr, ptr %5, align 8, !tbaa !5
  %3339 = getelementptr inbounds i32, ptr %3338, i64 3
  %3340 = load i32, ptr %3339, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3331, i32 noundef %3334, i32 noundef %3337, i32 noundef %3340, ptr noundef @.str.1024)
  br label %5106

3341:                                             ; preds = %2, %2
  %3342 = load ptr, ptr %5, align 8, !tbaa !5
  %3343 = getelementptr inbounds i32, ptr %3342, i64 0
  %3344 = load i32, ptr %3343, align 4, !tbaa !15
  %3345 = load ptr, ptr %5, align 8, !tbaa !5
  %3346 = getelementptr inbounds i32, ptr %3345, i64 1
  %3347 = load i32, ptr %3346, align 4, !tbaa !15
  %3348 = load ptr, ptr %5, align 8, !tbaa !5
  %3349 = getelementptr inbounds i32, ptr %3348, i64 2
  %3350 = load i32, ptr %3349, align 4, !tbaa !15
  %3351 = load ptr, ptr %5, align 8, !tbaa !5
  %3352 = getelementptr inbounds i32, ptr %3351, i64 3
  %3353 = load i32, ptr %3352, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3344, i32 noundef %3347, i32 noundef %3350, i32 noundef %3353, ptr noundef @.str.1025)
  br label %5106

3354:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %295) #9
  %3355 = load ptr, ptr %5, align 8, !tbaa !5
  %3356 = getelementptr inbounds i32, ptr %3355, i64 0
  %3357 = load i32, ptr %3356, align 4, !tbaa !15
  store i32 %3357, ptr %295, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %296) #9
  %3358 = load ptr, ptr %5, align 8, !tbaa !5
  %3359 = getelementptr inbounds i32, ptr %3358, i64 1
  %3360 = load i32, ptr %3359, align 4, !tbaa !15
  store i32 %3360, ptr %296, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %297) #9
  %3361 = load ptr, ptr %5, align 8, !tbaa !5
  %3362 = getelementptr inbounds i32, ptr %3361, i64 2
  %3363 = load i32, ptr %3362, align 4, !tbaa !15
  store i32 %3363, ptr %297, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %298) #9
  %3364 = load ptr, ptr %5, align 8, !tbaa !5
  %3365 = getelementptr inbounds i32, ptr %3364, i64 3
  %3366 = load i32, ptr %3365, align 4, !tbaa !15
  store i32 %3366, ptr %298, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %299) #9
  %3367 = load i32, ptr %297, align 4, !tbaa !15
  %3368 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3367)
  br i1 %3368, label %3369, label %3372

3369:                                             ; preds = %3354
  %3370 = load i32, ptr %298, align 4, !tbaa !15
  %3371 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3370)
  br label %3372

3372:                                             ; preds = %3369, %3354
  %3373 = phi i1 [ false, %3354 ], [ %3371, %3369 ]
  %3374 = zext i1 %3373 to i8
  store i8 %3374, ptr %299, align 1, !tbaa !199
  %3375 = load i32, ptr %295, align 4, !tbaa !15
  %3376 = load i32, ptr %296, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %300) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %301) #9
  %3377 = load i32, ptr %297, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %301, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3377, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %302) #9
  %3378 = load i32, ptr %298, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %302, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3378, i1 noundef zeroext true)
          to label %3379 unwind label %3389

3379:                                             ; preds = %3372
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %300, ptr noundef nonnull align 1 dereferenceable(11) @.str.1026, ptr noundef nonnull align 8 dereferenceable(32) %301, ptr noundef nonnull align 1 dereferenceable(16) @.str.1027, ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %3380 unwind label %3393

3380:                                             ; preds = %3379
  %3381 = load i8, ptr %299, align 1, !tbaa !199, !range !192, !noundef !193
  %3382 = trunc i8 %3381 to i1
  %3383 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3375, i32 noundef %3376, ptr noundef nonnull align 8 dereferenceable(32) %300, i1 noundef zeroext %3382, i1 noundef zeroext false)
          to label %3384 unwind label %3397

3384:                                             ; preds = %3380
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %300) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %302) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %302) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %301) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %301) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %300) #9
  %3385 = load i32, ptr %296, align 4, !tbaa !15
  %3386 = load i32, ptr %297, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3385, i32 noundef %3386)
  %3387 = load i32, ptr %296, align 4, !tbaa !15
  %3388 = load i32, ptr %298, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3387, i32 noundef %3388)
  store i32 2, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %299) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %298) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %297) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %296) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %295) #9
  br label %5106

3389:                                             ; preds = %3372
  %3390 = landingpad { ptr, i32 }
          cleanup
  %3391 = extractvalue { ptr, i32 } %3390, 0
  store ptr %3391, ptr %30, align 8
  %3392 = extractvalue { ptr, i32 } %3390, 1
  store i32 %3392, ptr %31, align 4
  br label %3402

3393:                                             ; preds = %3379
  %3394 = landingpad { ptr, i32 }
          cleanup
  %3395 = extractvalue { ptr, i32 } %3394, 0
  store ptr %3395, ptr %30, align 8
  %3396 = extractvalue { ptr, i32 } %3394, 1
  store i32 %3396, ptr %31, align 4
  br label %3401

3397:                                             ; preds = %3380
  %3398 = landingpad { ptr, i32 }
          cleanup
  %3399 = extractvalue { ptr, i32 } %3398, 0
  store ptr %3399, ptr %30, align 8
  %3400 = extractvalue { ptr, i32 } %3398, 1
  store i32 %3400, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %300) #9
  br label %3401

3401:                                             ; preds = %3397, %3393
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %302) #9
  br label %3402

3402:                                             ; preds = %3401, %3389
  call void @llvm.lifetime.end.p0(i64 32, ptr %302) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %301) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %301) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %300) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %299) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %298) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %297) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %296) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %295) #9
  br label %5109

3403:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %303) #9
  %3404 = load ptr, ptr %5, align 8, !tbaa !5
  %3405 = getelementptr inbounds i32, ptr %3404, i64 0
  %3406 = load i32, ptr %3405, align 4, !tbaa !15
  store i32 %3406, ptr %303, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %304) #9
  %3407 = load ptr, ptr %5, align 8, !tbaa !5
  %3408 = getelementptr inbounds i32, ptr %3407, i64 1
  %3409 = load i32, ptr %3408, align 4, !tbaa !15
  store i32 %3409, ptr %304, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %305) #9
  %3410 = load ptr, ptr %5, align 8, !tbaa !5
  %3411 = getelementptr inbounds i32, ptr %3410, i64 2
  %3412 = load i32, ptr %3411, align 4, !tbaa !15
  store i32 %3412, ptr %305, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %306) #9
  %3413 = load ptr, ptr %5, align 8, !tbaa !5
  %3414 = getelementptr inbounds i32, ptr %3413, i64 3
  %3415 = load i32, ptr %3414, align 4, !tbaa !15
  store i32 %3415, ptr %306, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %307) #9
  %3416 = load i32, ptr %305, align 4, !tbaa !15
  %3417 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3416)
  br i1 %3417, label %3418, label %3421

3418:                                             ; preds = %3403
  %3419 = load i32, ptr %306, align 4, !tbaa !15
  %3420 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3419)
  br label %3421

3421:                                             ; preds = %3418, %3403
  %3422 = phi i1 [ false, %3403 ], [ %3420, %3418 ]
  %3423 = zext i1 %3422 to i8
  store i8 %3423, ptr %307, align 1, !tbaa !199
  %3424 = load i32, ptr %303, align 4, !tbaa !15
  %3425 = load i32, ptr %304, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %308) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %309) #9
  %3426 = load i32, ptr %305, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %309, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3426, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %310) #9
  %3427 = load i32, ptr %306, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %310, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3427, i1 noundef zeroext true)
          to label %3428 unwind label %3438

3428:                                             ; preds = %3421
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %308, ptr noundef nonnull align 1 dereferenceable(13) @.str.1029, ptr noundef nonnull align 8 dereferenceable(32) %309, ptr noundef nonnull align 1 dereferenceable(18) @.str.1030, ptr noundef nonnull align 8 dereferenceable(32) %310, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %3429 unwind label %3442

3429:                                             ; preds = %3428
  %3430 = load i8, ptr %307, align 1, !tbaa !199, !range !192, !noundef !193
  %3431 = trunc i8 %3430 to i1
  %3432 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3424, i32 noundef %3425, ptr noundef nonnull align 8 dereferenceable(32) %308, i1 noundef zeroext %3431, i1 noundef zeroext false)
          to label %3433 unwind label %3446

3433:                                             ; preds = %3429
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %308) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %310) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %310) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %309) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %309) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %308) #9
  %3434 = load i32, ptr %304, align 4, !tbaa !15
  %3435 = load i32, ptr %305, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3434, i32 noundef %3435)
  %3436 = load i32, ptr %304, align 4, !tbaa !15
  %3437 = load i32, ptr %306, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3436, i32 noundef %3437)
  store i32 2, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %307) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %306) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %305) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %304) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %303) #9
  br label %5106

3438:                                             ; preds = %3421
  %3439 = landingpad { ptr, i32 }
          cleanup
  %3440 = extractvalue { ptr, i32 } %3439, 0
  store ptr %3440, ptr %30, align 8
  %3441 = extractvalue { ptr, i32 } %3439, 1
  store i32 %3441, ptr %31, align 4
  br label %3451

3442:                                             ; preds = %3428
  %3443 = landingpad { ptr, i32 }
          cleanup
  %3444 = extractvalue { ptr, i32 } %3443, 0
  store ptr %3444, ptr %30, align 8
  %3445 = extractvalue { ptr, i32 } %3443, 1
  store i32 %3445, ptr %31, align 4
  br label %3450

3446:                                             ; preds = %3429
  %3447 = landingpad { ptr, i32 }
          cleanup
  %3448 = extractvalue { ptr, i32 } %3447, 0
  store ptr %3448, ptr %30, align 8
  %3449 = extractvalue { ptr, i32 } %3447, 1
  store i32 %3449, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %308) #9
  br label %3450

3450:                                             ; preds = %3446, %3442
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %310) #9
  br label %3451

3451:                                             ; preds = %3450, %3438
  call void @llvm.lifetime.end.p0(i64 32, ptr %310) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %309) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %309) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %308) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %307) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %306) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %305) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %304) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %303) #9
  br label %5109

3452:                                             ; preds = %2
  %3453 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %3454 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %3453, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %3454, label %3462, label %3455

3455:                                             ; preds = %3452
  %3456 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3456, ptr noundef @.str.1031)
          to label %3457 unwind label %3458

3457:                                             ; preds = %3455
  call void @__cxa_throw(ptr %3456, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3458:                                             ; preds = %3455
  %3459 = landingpad { ptr, i32 }
          cleanup
  %3460 = extractvalue { ptr, i32 } %3459, 0
  store ptr %3460, ptr %30, align 8
  %3461 = extractvalue { ptr, i32 } %3459, 1
  store i32 %3461, ptr %31, align 4
  call void @__cxa_free_exception(ptr %3456) #9
  br label %5109

3462:                                             ; preds = %3452
  %3463 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %3463)
  br label %5106

3464:                                             ; preds = %2
  %3465 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %3466 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137) %3465)
  br i1 %3466, label %3467, label %3477

3467:                                             ; preds = %3464
  %3468 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %3469 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %3468, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %3469, label %3477, label %3470

3470:                                             ; preds = %3467
  %3471 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3471, ptr noundef @.str.1032)
          to label %3472 unwind label %3473

3472:                                             ; preds = %3470
  call void @__cxa_throw(ptr %3471, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3473:                                             ; preds = %3470
  %3474 = landingpad { ptr, i32 }
          cleanup
  %3475 = extractvalue { ptr, i32 } %3474, 0
  store ptr %3475, ptr %30, align 8
  %3476 = extractvalue { ptr, i32 } %3474, 1
  store i32 %3476, ptr %31, align 4
  call void @__cxa_free_exception(ptr %3471) #9
  br label %5109

3477:                                             ; preds = %3467, %3464
  %3478 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %3479 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %3478)
  br i1 %3479, label %3480, label %3490

3480:                                             ; preds = %3477
  %3481 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %3482 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %3481, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  br i1 %3482, label %3490, label %3483

3483:                                             ; preds = %3480
  %3484 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3484, ptr noundef @.str.1033)
          to label %3485 unwind label %3486

3485:                                             ; preds = %3483
  call void @__cxa_throw(ptr %3484, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3486:                                             ; preds = %3483
  %3487 = landingpad { ptr, i32 }
          cleanup
  %3488 = extractvalue { ptr, i32 } %3487, 0
  store ptr %3488, ptr %30, align 8
  %3489 = extractvalue { ptr, i32 } %3487, 1
  store i32 %3489, ptr %31, align 4
  call void @__cxa_free_exception(ptr %3484) #9
  br label %5109

3490:                                             ; preds = %3480, %3477
  br label %3491

3491:                                             ; preds = %3490
  %3492 = load ptr, ptr %5, align 8, !tbaa !5
  %3493 = getelementptr inbounds i32, ptr %3492, i64 0
  %3494 = load i32, ptr %3493, align 4, !tbaa !15
  %3495 = load ptr, ptr %5, align 8, !tbaa !5
  %3496 = getelementptr inbounds i32, ptr %3495, i64 1
  %3497 = load i32, ptr %3496, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %311) #9
  %3498 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %448)
  store i1 false, ptr %313, align 1
  store i1 false, ptr %314, align 1
  br i1 %3498, label %3499, label %3503

3499:                                             ; preds = %3491
  %3500 = load ptr, ptr %448, align 8, !tbaa !197
  %3501 = getelementptr inbounds ptr, ptr %3500, i64 20
  %3502 = load ptr, ptr %3501, align 8
  call void %3502(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %311, ptr noundef nonnull align 8 dereferenceable(12482) %448, i32 noundef 23, i32 noundef 1)
  br label %3505

3503:                                             ; preds = %3491
  call void @llvm.lifetime.start.p0(i64 1, ptr %312) #9
  store i1 true, ptr %313, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %312) #9
  store i1 true, ptr %314, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %311, ptr noundef @.str.1034, ptr noundef nonnull align 1 dereferenceable(1) %312)
          to label %3504 unwind label %3514

3504:                                             ; preds = %3503
  br label %3505

3505:                                             ; preds = %3504, %3499
  %3506 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3494, i32 noundef %3497, ptr noundef nonnull align 8 dereferenceable(32) %311, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3507 unwind label %3518

3507:                                             ; preds = %3505
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %311) #9
  %3508 = load i1, ptr %314, align 1
  br i1 %3508, label %3509, label %3510

3509:                                             ; preds = %3507
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %312) #9
  br label %3510

3510:                                             ; preds = %3509, %3507
  %3511 = load i1, ptr %313, align 1
  br i1 %3511, label %3512, label %3513

3512:                                             ; preds = %3510
  call void @llvm.lifetime.end.p0(i64 1, ptr %312) #9
  br label %3513

3513:                                             ; preds = %3512, %3510
  call void @llvm.lifetime.end.p0(i64 32, ptr %311) #9
  br label %5106

3514:                                             ; preds = %3503
  %3515 = landingpad { ptr, i32 }
          cleanup
  %3516 = extractvalue { ptr, i32 } %3515, 0
  store ptr %3516, ptr %30, align 8
  %3517 = extractvalue { ptr, i32 } %3515, 1
  store i32 %3517, ptr %31, align 4
  br label %3522

3518:                                             ; preds = %3505
  %3519 = landingpad { ptr, i32 }
          cleanup
  %3520 = extractvalue { ptr, i32 } %3519, 0
  store ptr %3520, ptr %30, align 8
  %3521 = extractvalue { ptr, i32 } %3519, 1
  store i32 %3521, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %311) #9
  br label %3522

3522:                                             ; preds = %3518, %3514
  %3523 = load i1, ptr %314, align 1
  br i1 %3523, label %3524, label %3525

3524:                                             ; preds = %3522
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %312) #9
  br label %3525

3525:                                             ; preds = %3524, %3522
  %3526 = load i1, ptr %313, align 1
  br i1 %3526, label %3527, label %3528

3527:                                             ; preds = %3525
  call void @llvm.lifetime.end.p0(i64 1, ptr %312) #9
  br label %3528

3528:                                             ; preds = %3527, %3525
  call void @llvm.lifetime.end.p0(i64 32, ptr %311) #9
  br label %5109

3529:                                             ; preds = %2, %2
  %3530 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 37
  %3531 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %3530, i32 noundef 2, i32 noundef 0, i32 noundef 0)
  br i1 %3531, label %3539, label %3532

3532:                                             ; preds = %3529
  %3533 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3533, ptr noundef @.str.1035)
          to label %3534 unwind label %3535

3534:                                             ; preds = %3532
  call void @__cxa_throw(ptr %3533, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3535:                                             ; preds = %3532
  %3536 = landingpad { ptr, i32 }
          cleanup
  %3537 = extractvalue { ptr, i32 } %3536, 0
  store ptr %3537, ptr %30, align 8
  %3538 = extractvalue { ptr, i32 } %3536, 1
  store i32 %3538, ptr %31, align 4
  call void @__cxa_free_exception(ptr %3533) #9
  br label %5109

3539:                                             ; preds = %3529
  br label %5106

3540:                                             ; preds = %2
  %3541 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3541, ptr noundef @.str.1036)
          to label %3542 unwind label %3543

3542:                                             ; preds = %3540
  call void @__cxa_throw(ptr %3541, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3543:                                             ; preds = %3540
  %3544 = landingpad { ptr, i32 }
          cleanup
  %3545 = extractvalue { ptr, i32 } %3544, 0
  store ptr %3545, ptr %30, align 8
  %3546 = extractvalue { ptr, i32 } %3544, 1
  store i32 %3546, ptr %31, align 4
  call void @__cxa_free_exception(ptr %3541) #9
  br label %5109

3547:                                             ; preds = %2
  %3548 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3548, ptr noundef @.str.1037)
          to label %3549 unwind label %3550

3549:                                             ; preds = %3547
  call void @__cxa_throw(ptr %3548, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3550:                                             ; preds = %3547
  %3551 = landingpad { ptr, i32 }
          cleanup
  %3552 = extractvalue { ptr, i32 } %3551, 0
  store ptr %3552, ptr %30, align 8
  %3553 = extractvalue { ptr, i32 } %3551, 1
  store i32 %3553, ptr %31, align 4
  call void @__cxa_free_exception(ptr %3548) #9
  br label %5109

3554:                                             ; preds = %2
  %3555 = load ptr, ptr %5, align 8, !tbaa !5
  %3556 = getelementptr inbounds i32, ptr %3555, i64 0
  %3557 = load i32, ptr %3556, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3557)
  %3558 = load ptr, ptr %5, align 8, !tbaa !5
  %3559 = getelementptr inbounds i32, ptr %3558, i64 0
  %3560 = load i32, ptr %3559, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3560)
  call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %448, i8 noundef zeroext 67)
  call void @llvm.lifetime.start.p0(i64 32, ptr %315) #9
  %3561 = load ptr, ptr %5, align 8, !tbaa !5
  %3562 = getelementptr inbounds i32, ptr %3561, i64 0
  %3563 = load i32, ptr %3562, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %315, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3563, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %316) #9
  %3564 = load ptr, ptr %5, align 8, !tbaa !5
  %3565 = getelementptr inbounds i32, ptr %3564, i64 4
  %3566 = load i32, ptr %3565, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %316, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3566, i1 noundef zeroext true)
          to label %3567 unwind label %3593

3567:                                             ; preds = %3554
  call void @llvm.lifetime.start.p0(i64 32, ptr %317) #9
  %3568 = load ptr, ptr %5, align 8, !tbaa !5
  %3569 = getelementptr inbounds i32, ptr %3568, i64 6
  %3570 = load i32, ptr %3569, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %317, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3570, i1 noundef zeroext true)
          to label %3571 unwind label %3597

3571:                                             ; preds = %3567
  call void @llvm.lifetime.start.p0(i64 32, ptr %318) #9
  %3572 = load ptr, ptr %5, align 8, !tbaa !5
  %3573 = getelementptr inbounds i32, ptr %3572, i64 5
  %3574 = load i32, ptr %3573, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %318, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3574, i1 noundef zeroext true)
          to label %3575 unwind label %3601

3575:                                             ; preds = %3571
  call void @llvm.lifetime.start.p0(i64 32, ptr %319) #9
  %3576 = load ptr, ptr %5, align 8, !tbaa !5
  %3577 = getelementptr inbounds i32, ptr %3576, i64 7
  %3578 = load i32, ptr %3577, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %319, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3578, i1 noundef zeroext true)
          to label %3579 unwind label %3605

3579:                                             ; preds = %3575
  call void @llvm.lifetime.start.p0(i64 32, ptr %320) #9
  %3580 = load ptr, ptr %5, align 8, !tbaa !5
  %3581 = getelementptr inbounds i32, ptr %3580, i64 1
  %3582 = load i32, ptr %3581, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %320, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3582, i1 noundef zeroext true)
          to label %3583 unwind label %3609

3583:                                             ; preds = %3579
  call void @llvm.lifetime.start.p0(i64 32, ptr %321) #9
  %3584 = load ptr, ptr %5, align 8, !tbaa !5
  %3585 = getelementptr inbounds i32, ptr %3584, i64 3
  %3586 = load i32, ptr %3585, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %321, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3586, i1 noundef zeroext true)
          to label %3587 unwind label %3613

3587:                                             ; preds = %3583
  call void @llvm.lifetime.start.p0(i64 32, ptr %322) #9
  %3588 = load ptr, ptr %5, align 8, !tbaa !5
  %3589 = getelementptr inbounds i32, ptr %3588, i64 2
  %3590 = load i32, ptr %3589, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %322, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3590, i1 noundef zeroext true)
          to label %3591 unwind label %3617

3591:                                             ; preds = %3587
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcRA5_S8_S7_RA3_S8_S7_SE_S7_SE_S7_RA4_S8_S7_SE_S7_RA29_S8_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %315, ptr noundef nonnull align 1 dereferenceable(8) @.str.1038, ptr noundef nonnull align 1 dereferenceable(5) @.str.1039, ptr noundef nonnull align 8 dereferenceable(32) %316, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %317, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %318, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %319, ptr noundef nonnull align 1 dereferenceable(4) @.str.1040, ptr noundef nonnull align 8 dereferenceable(32) %320, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %321, ptr noundef nonnull align 1 dereferenceable(29) @.str.1041, ptr noundef nonnull align 8 dereferenceable(32) %322, ptr noundef nonnull align 1 dereferenceable(4) @.str.1013)
          to label %3592 unwind label %3621

3592:                                             ; preds = %3591
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %322) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %321) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %321) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %320) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %320) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %319) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %318) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %317) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %317) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %316) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %316) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %315) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %315) #9
  br label %5106

3593:                                             ; preds = %3554
  %3594 = landingpad { ptr, i32 }
          cleanup
  %3595 = extractvalue { ptr, i32 } %3594, 0
  store ptr %3595, ptr %30, align 8
  %3596 = extractvalue { ptr, i32 } %3594, 1
  store i32 %3596, ptr %31, align 4
  br label %3631

3597:                                             ; preds = %3567
  %3598 = landingpad { ptr, i32 }
          cleanup
  %3599 = extractvalue { ptr, i32 } %3598, 0
  store ptr %3599, ptr %30, align 8
  %3600 = extractvalue { ptr, i32 } %3598, 1
  store i32 %3600, ptr %31, align 4
  br label %3630

3601:                                             ; preds = %3571
  %3602 = landingpad { ptr, i32 }
          cleanup
  %3603 = extractvalue { ptr, i32 } %3602, 0
  store ptr %3603, ptr %30, align 8
  %3604 = extractvalue { ptr, i32 } %3602, 1
  store i32 %3604, ptr %31, align 4
  br label %3629

3605:                                             ; preds = %3575
  %3606 = landingpad { ptr, i32 }
          cleanup
  %3607 = extractvalue { ptr, i32 } %3606, 0
  store ptr %3607, ptr %30, align 8
  %3608 = extractvalue { ptr, i32 } %3606, 1
  store i32 %3608, ptr %31, align 4
  br label %3628

3609:                                             ; preds = %3579
  %3610 = landingpad { ptr, i32 }
          cleanup
  %3611 = extractvalue { ptr, i32 } %3610, 0
  store ptr %3611, ptr %30, align 8
  %3612 = extractvalue { ptr, i32 } %3610, 1
  store i32 %3612, ptr %31, align 4
  br label %3627

3613:                                             ; preds = %3583
  %3614 = landingpad { ptr, i32 }
          cleanup
  %3615 = extractvalue { ptr, i32 } %3614, 0
  store ptr %3615, ptr %30, align 8
  %3616 = extractvalue { ptr, i32 } %3614, 1
  store i32 %3616, ptr %31, align 4
  br label %3626

3617:                                             ; preds = %3587
  %3618 = landingpad { ptr, i32 }
          cleanup
  %3619 = extractvalue { ptr, i32 } %3618, 0
  store ptr %3619, ptr %30, align 8
  %3620 = extractvalue { ptr, i32 } %3618, 1
  store i32 %3620, ptr %31, align 4
  br label %3625

3621:                                             ; preds = %3591
  %3622 = landingpad { ptr, i32 }
          cleanup
  %3623 = extractvalue { ptr, i32 } %3622, 0
  store ptr %3623, ptr %30, align 8
  %3624 = extractvalue { ptr, i32 } %3622, 1
  store i32 %3624, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #9
  br label %3625

3625:                                             ; preds = %3621, %3617
  call void @llvm.lifetime.end.p0(i64 32, ptr %322) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %321) #9
  br label %3626

3626:                                             ; preds = %3625, %3613
  call void @llvm.lifetime.end.p0(i64 32, ptr %321) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %320) #9
  br label %3627

3627:                                             ; preds = %3626, %3609
  call void @llvm.lifetime.end.p0(i64 32, ptr %320) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #9
  br label %3628

3628:                                             ; preds = %3627, %3605
  call void @llvm.lifetime.end.p0(i64 32, ptr %319) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #9
  br label %3629

3629:                                             ; preds = %3628, %3601
  call void @llvm.lifetime.end.p0(i64 32, ptr %318) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %317) #9
  br label %3630

3630:                                             ; preds = %3629, %3597
  call void @llvm.lifetime.end.p0(i64 32, ptr %317) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %316) #9
  br label %3631

3631:                                             ; preds = %3630, %3593
  call void @llvm.lifetime.end.p0(i64 32, ptr %316) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %315) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %315) #9
  br label %5109

3632:                                             ; preds = %2
  %3633 = load ptr, ptr %5, align 8, !tbaa !5
  %3634 = getelementptr inbounds i32, ptr %3633, i64 0
  %3635 = load i32, ptr %3634, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3635)
  %3636 = load ptr, ptr %5, align 8, !tbaa !5
  %3637 = getelementptr inbounds i32, ptr %3636, i64 2
  %3638 = load i32, ptr %3637, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3638)
  %3639 = load ptr, ptr %5, align 8, !tbaa !5
  %3640 = getelementptr inbounds i32, ptr %3639, i64 0
  %3641 = load i32, ptr %3640, align 4, !tbaa !15
  %3642 = load ptr, ptr %5, align 8, !tbaa !5
  %3643 = getelementptr inbounds i32, ptr %3642, i64 1
  %3644 = load i32, ptr %3643, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %323) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %324) #9
  %3645 = load ptr, ptr %5, align 8, !tbaa !5
  %3646 = getelementptr inbounds i32, ptr %3645, i64 2
  %3647 = load i32, ptr %3646, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %324, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3647, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %323, ptr noundef nonnull align 8 dereferenceable(32) %324, ptr noundef nonnull align 1 dereferenceable(8) @.str.1042)
          to label %3648 unwind label %3651

3648:                                             ; preds = %3632
  %3649 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3641, i32 noundef %3644, ptr noundef nonnull align 8 dereferenceable(32) %323, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3650 unwind label %3655

3650:                                             ; preds = %3648
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %323) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %324) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %324) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %323) #9
  br label %5106

3651:                                             ; preds = %3632
  %3652 = landingpad { ptr, i32 }
          cleanup
  %3653 = extractvalue { ptr, i32 } %3652, 0
  store ptr %3653, ptr %30, align 8
  %3654 = extractvalue { ptr, i32 } %3652, 1
  store i32 %3654, ptr %31, align 4
  br label %3659

3655:                                             ; preds = %3648
  %3656 = landingpad { ptr, i32 }
          cleanup
  %3657 = extractvalue { ptr, i32 } %3656, 0
  store ptr %3657, ptr %30, align 8
  %3658 = extractvalue { ptr, i32 } %3656, 1
  store i32 %3658, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %323) #9
  br label %3659

3659:                                             ; preds = %3655, %3651
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %324) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %324) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %323) #9
  br label %5109

3660:                                             ; preds = %2
  %3661 = load ptr, ptr %5, align 8, !tbaa !5
  %3662 = getelementptr inbounds i32, ptr %3661, i64 2
  %3663 = load i32, ptr %3662, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3663)
  %3664 = load ptr, ptr %5, align 8, !tbaa !5
  %3665 = getelementptr inbounds i32, ptr %3664, i64 0
  %3666 = load i32, ptr %3665, align 4, !tbaa !15
  %3667 = load ptr, ptr %5, align 8, !tbaa !5
  %3668 = getelementptr inbounds i32, ptr %3667, i64 1
  %3669 = load i32, ptr %3668, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %325) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %326) #9
  %3670 = load ptr, ptr %5, align 8, !tbaa !5
  %3671 = getelementptr inbounds i32, ptr %3670, i64 2
  %3672 = load i32, ptr %3671, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %326, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3672, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA24_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %325, ptr noundef nonnull align 8 dereferenceable(32) %326, ptr noundef nonnull align 1 dereferenceable(24) @.str.1043)
          to label %3673 unwind label %3676

3673:                                             ; preds = %3660
  %3674 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3666, i32 noundef %3669, ptr noundef nonnull align 8 dereferenceable(32) %325, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3675 unwind label %3680

3675:                                             ; preds = %3673
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %325) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %326) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %326) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %325) #9
  br label %5106

3676:                                             ; preds = %3660
  %3677 = landingpad { ptr, i32 }
          cleanup
  %3678 = extractvalue { ptr, i32 } %3677, 0
  store ptr %3678, ptr %30, align 8
  %3679 = extractvalue { ptr, i32 } %3677, 1
  store i32 %3679, ptr %31, align 4
  br label %3684

3680:                                             ; preds = %3673
  %3681 = landingpad { ptr, i32 }
          cleanup
  %3682 = extractvalue { ptr, i32 } %3681, 0
  store ptr %3682, ptr %30, align 8
  %3683 = extractvalue { ptr, i32 } %3681, 1
  store i32 %3683, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %325) #9
  br label %3684

3684:                                             ; preds = %3680, %3676
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %326) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %326) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %325) #9
  br label %5109

3685:                                             ; preds = %2
  %3686 = load ptr, ptr %5, align 8, !tbaa !5
  %3687 = getelementptr inbounds i32, ptr %3686, i64 2
  %3688 = load i32, ptr %3687, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3688)
  %3689 = load ptr, ptr %5, align 8, !tbaa !5
  %3690 = getelementptr inbounds i32, ptr %3689, i64 0
  %3691 = load i32, ptr %3690, align 4, !tbaa !15
  %3692 = load ptr, ptr %5, align 8, !tbaa !5
  %3693 = getelementptr inbounds i32, ptr %3692, i64 1
  %3694 = load i32, ptr %3693, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %327) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %328) #9
  %3695 = load ptr, ptr %5, align 8, !tbaa !5
  %3696 = getelementptr inbounds i32, ptr %3695, i64 2
  %3697 = load i32, ptr %3696, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %328, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3697, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %327, ptr noundef nonnull align 8 dereferenceable(32) %328, ptr noundef nonnull align 1 dereferenceable(30) @.str.1044)
          to label %3698 unwind label %3701

3698:                                             ; preds = %3685
  %3699 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3691, i32 noundef %3694, ptr noundef nonnull align 8 dereferenceable(32) %327, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3700 unwind label %3705

3700:                                             ; preds = %3698
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %328) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %328) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %327) #9
  br label %5106

3701:                                             ; preds = %3685
  %3702 = landingpad { ptr, i32 }
          cleanup
  %3703 = extractvalue { ptr, i32 } %3702, 0
  store ptr %3703, ptr %30, align 8
  %3704 = extractvalue { ptr, i32 } %3702, 1
  store i32 %3704, ptr %31, align 4
  br label %3709

3705:                                             ; preds = %3698
  %3706 = landingpad { ptr, i32 }
          cleanup
  %3707 = extractvalue { ptr, i32 } %3706, 0
  store ptr %3707, ptr %30, align 8
  %3708 = extractvalue { ptr, i32 } %3706, 1
  store i32 %3708, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #9
  br label %3709

3709:                                             ; preds = %3705, %3701
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %328) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %328) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %327) #9
  br label %5109

3710:                                             ; preds = %2
  %3711 = load ptr, ptr %5, align 8, !tbaa !5
  %3712 = getelementptr inbounds i32, ptr %3711, i64 2
  %3713 = load i32, ptr %3712, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3713)
  %3714 = load ptr, ptr %5, align 8, !tbaa !5
  %3715 = getelementptr inbounds i32, ptr %3714, i64 0
  %3716 = load i32, ptr %3715, align 4, !tbaa !15
  %3717 = load ptr, ptr %5, align 8, !tbaa !5
  %3718 = getelementptr inbounds i32, ptr %3717, i64 1
  %3719 = load i32, ptr %3718, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %329) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %330) #9
  %3720 = load ptr, ptr %5, align 8, !tbaa !5
  %3721 = getelementptr inbounds i32, ptr %3720, i64 2
  %3722 = load i32, ptr %3721, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %330, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3722, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA33_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %329, ptr noundef nonnull align 8 dereferenceable(32) %330, ptr noundef nonnull align 1 dereferenceable(33) @.str.1045)
          to label %3723 unwind label %3726

3723:                                             ; preds = %3710
  %3724 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3716, i32 noundef %3719, ptr noundef nonnull align 8 dereferenceable(32) %329, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3725 unwind label %3730

3725:                                             ; preds = %3723
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %329) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %330) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %330) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %329) #9
  br label %5106

3726:                                             ; preds = %3710
  %3727 = landingpad { ptr, i32 }
          cleanup
  %3728 = extractvalue { ptr, i32 } %3727, 0
  store ptr %3728, ptr %30, align 8
  %3729 = extractvalue { ptr, i32 } %3727, 1
  store i32 %3729, ptr %31, align 4
  br label %3734

3730:                                             ; preds = %3723
  %3731 = landingpad { ptr, i32 }
          cleanup
  %3732 = extractvalue { ptr, i32 } %3731, 0
  store ptr %3732, ptr %30, align 8
  %3733 = extractvalue { ptr, i32 } %3731, 1
  store i32 %3733, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %329) #9
  br label %3734

3734:                                             ; preds = %3730, %3726
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %330) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %330) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %329) #9
  br label %5109

3735:                                             ; preds = %2
  %3736 = load ptr, ptr %5, align 8, !tbaa !5
  %3737 = getelementptr inbounds i32, ptr %3736, i64 2
  %3738 = load i32, ptr %3737, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3738)
  %3739 = load ptr, ptr %5, align 8, !tbaa !5
  %3740 = getelementptr inbounds i32, ptr %3739, i64 3
  %3741 = load i32, ptr %3740, align 4, !tbaa !15
  %3742 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3741)
  %3743 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %3742, i32 noundef 0, i32 noundef 0)
  %3744 = icmp eq i32 %3743, 0
  br i1 %3744, label %3745, label %3767

3745:                                             ; preds = %3735
  %3746 = load ptr, ptr %5, align 8, !tbaa !5
  %3747 = getelementptr inbounds i32, ptr %3746, i64 0
  %3748 = load i32, ptr %3747, align 4, !tbaa !15
  %3749 = load ptr, ptr %5, align 8, !tbaa !5
  %3750 = getelementptr inbounds i32, ptr %3749, i64 1
  %3751 = load i32, ptr %3750, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %331) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %332) #9
  %3752 = load ptr, ptr %5, align 8, !tbaa !5
  %3753 = getelementptr inbounds i32, ptr %3752, i64 2
  %3754 = load i32, ptr %3753, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %332, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3754, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %331, ptr noundef nonnull align 8 dereferenceable(32) %332, ptr noundef nonnull align 1 dereferenceable(29) @.str.1046)
          to label %3755 unwind label %3758

3755:                                             ; preds = %3745
  %3756 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3748, i32 noundef %3751, ptr noundef nonnull align 8 dereferenceable(32) %331, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3757 unwind label %3762

3757:                                             ; preds = %3755
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %331) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %332) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %332) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %331) #9
  br label %3789

3758:                                             ; preds = %3745
  %3759 = landingpad { ptr, i32 }
          cleanup
  %3760 = extractvalue { ptr, i32 } %3759, 0
  store ptr %3760, ptr %30, align 8
  %3761 = extractvalue { ptr, i32 } %3759, 1
  store i32 %3761, ptr %31, align 4
  br label %3766

3762:                                             ; preds = %3755
  %3763 = landingpad { ptr, i32 }
          cleanup
  %3764 = extractvalue { ptr, i32 } %3763, 0
  store ptr %3764, ptr %30, align 8
  %3765 = extractvalue { ptr, i32 } %3763, 1
  store i32 %3765, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %331) #9
  br label %3766

3766:                                             ; preds = %3762, %3758
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %332) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %332) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %331) #9
  br label %5109

3767:                                             ; preds = %3735
  %3768 = load ptr, ptr %5, align 8, !tbaa !5
  %3769 = getelementptr inbounds i32, ptr %3768, i64 0
  %3770 = load i32, ptr %3769, align 4, !tbaa !15
  %3771 = load ptr, ptr %5, align 8, !tbaa !5
  %3772 = getelementptr inbounds i32, ptr %3771, i64 1
  %3773 = load i32, ptr %3772, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %333) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %334) #9
  %3774 = load ptr, ptr %5, align 8, !tbaa !5
  %3775 = getelementptr inbounds i32, ptr %3774, i64 2
  %3776 = load i32, ptr %3775, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %334, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3776, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %333, ptr noundef nonnull align 8 dereferenceable(32) %334, ptr noundef nonnull align 1 dereferenceable(29) @.str.1047)
          to label %3777 unwind label %3780

3777:                                             ; preds = %3767
  %3778 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3770, i32 noundef %3773, ptr noundef nonnull align 8 dereferenceable(32) %333, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3779 unwind label %3784

3779:                                             ; preds = %3777
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %333) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %334) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %334) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %333) #9
  br label %3789

3780:                                             ; preds = %3767
  %3781 = landingpad { ptr, i32 }
          cleanup
  %3782 = extractvalue { ptr, i32 } %3781, 0
  store ptr %3782, ptr %30, align 8
  %3783 = extractvalue { ptr, i32 } %3781, 1
  store i32 %3783, ptr %31, align 4
  br label %3788

3784:                                             ; preds = %3777
  %3785 = landingpad { ptr, i32 }
          cleanup
  %3786 = extractvalue { ptr, i32 } %3785, 0
  store ptr %3786, ptr %30, align 8
  %3787 = extractvalue { ptr, i32 } %3785, 1
  store i32 %3787, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %333) #9
  br label %3788

3788:                                             ; preds = %3784, %3780
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %334) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %334) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %333) #9
  br label %5109

3789:                                             ; preds = %3779, %3757
  br label %5106

3790:                                             ; preds = %2
  %3791 = load ptr, ptr %5, align 8, !tbaa !5
  %3792 = getelementptr inbounds i32, ptr %3791, i64 2
  %3793 = load i32, ptr %3792, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3793)
  %3794 = load ptr, ptr %5, align 8, !tbaa !5
  %3795 = getelementptr inbounds i32, ptr %3794, i64 3
  %3796 = load i32, ptr %3795, align 4, !tbaa !15
  %3797 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3796)
  %3798 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %3797, i32 noundef 0, i32 noundef 0)
  %3799 = icmp eq i32 %3798, 0
  br i1 %3799, label %3800, label %3822

3800:                                             ; preds = %3790
  %3801 = load ptr, ptr %5, align 8, !tbaa !5
  %3802 = getelementptr inbounds i32, ptr %3801, i64 0
  %3803 = load i32, ptr %3802, align 4, !tbaa !15
  %3804 = load ptr, ptr %5, align 8, !tbaa !5
  %3805 = getelementptr inbounds i32, ptr %3804, i64 1
  %3806 = load i32, ptr %3805, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %335) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %336) #9
  %3807 = load ptr, ptr %5, align 8, !tbaa !5
  %3808 = getelementptr inbounds i32, ptr %3807, i64 2
  %3809 = load i32, ptr %3808, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %336, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3809, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %335, ptr noundef nonnull align 8 dereferenceable(32) %336, ptr noundef nonnull align 1 dereferenceable(34) @.str.1048)
          to label %3810 unwind label %3813

3810:                                             ; preds = %3800
  %3811 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3803, i32 noundef %3806, ptr noundef nonnull align 8 dereferenceable(32) %335, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3812 unwind label %3817

3812:                                             ; preds = %3810
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %336) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %336) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %335) #9
  br label %3844

3813:                                             ; preds = %3800
  %3814 = landingpad { ptr, i32 }
          cleanup
  %3815 = extractvalue { ptr, i32 } %3814, 0
  store ptr %3815, ptr %30, align 8
  %3816 = extractvalue { ptr, i32 } %3814, 1
  store i32 %3816, ptr %31, align 4
  br label %3821

3817:                                             ; preds = %3810
  %3818 = landingpad { ptr, i32 }
          cleanup
  %3819 = extractvalue { ptr, i32 } %3818, 0
  store ptr %3819, ptr %30, align 8
  %3820 = extractvalue { ptr, i32 } %3818, 1
  store i32 %3820, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #9
  br label %3821

3821:                                             ; preds = %3817, %3813
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %336) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %336) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %335) #9
  br label %5109

3822:                                             ; preds = %3790
  %3823 = load ptr, ptr %5, align 8, !tbaa !5
  %3824 = getelementptr inbounds i32, ptr %3823, i64 0
  %3825 = load i32, ptr %3824, align 4, !tbaa !15
  %3826 = load ptr, ptr %5, align 8, !tbaa !5
  %3827 = getelementptr inbounds i32, ptr %3826, i64 1
  %3828 = load i32, ptr %3827, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %337) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %338) #9
  %3829 = load ptr, ptr %5, align 8, !tbaa !5
  %3830 = getelementptr inbounds i32, ptr %3829, i64 2
  %3831 = load i32, ptr %3830, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %338, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3831, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %337, ptr noundef nonnull align 8 dereferenceable(32) %338, ptr noundef nonnull align 1 dereferenceable(34) @.str.1049)
          to label %3832 unwind label %3835

3832:                                             ; preds = %3822
  %3833 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3825, i32 noundef %3828, ptr noundef nonnull align 8 dereferenceable(32) %337, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3834 unwind label %3839

3834:                                             ; preds = %3832
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %337) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %338) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %338) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %337) #9
  br label %3844

3835:                                             ; preds = %3822
  %3836 = landingpad { ptr, i32 }
          cleanup
  %3837 = extractvalue { ptr, i32 } %3836, 0
  store ptr %3837, ptr %30, align 8
  %3838 = extractvalue { ptr, i32 } %3836, 1
  store i32 %3838, ptr %31, align 4
  br label %3843

3839:                                             ; preds = %3832
  %3840 = landingpad { ptr, i32 }
          cleanup
  %3841 = extractvalue { ptr, i32 } %3840, 0
  store ptr %3841, ptr %30, align 8
  %3842 = extractvalue { ptr, i32 } %3840, 1
  store i32 %3842, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %337) #9
  br label %3843

3843:                                             ; preds = %3839, %3835
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %338) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %338) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %337) #9
  br label %5109

3844:                                             ; preds = %3834, %3812
  br label %5106

3845:                                             ; preds = %2
  %3846 = load ptr, ptr %5, align 8, !tbaa !5
  %3847 = getelementptr inbounds i32, ptr %3846, i64 2
  %3848 = load i32, ptr %3847, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3848)
  %3849 = load ptr, ptr %5, align 8, !tbaa !5
  %3850 = getelementptr inbounds i32, ptr %3849, i64 3
  %3851 = load i32, ptr %3850, align 4, !tbaa !15
  %3852 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3851)
  %3853 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %3852, i32 noundef 0, i32 noundef 0)
  %3854 = icmp eq i32 %3853, 0
  br i1 %3854, label %3855, label %3877

3855:                                             ; preds = %3845
  %3856 = load ptr, ptr %5, align 8, !tbaa !5
  %3857 = getelementptr inbounds i32, ptr %3856, i64 0
  %3858 = load i32, ptr %3857, align 4, !tbaa !15
  %3859 = load ptr, ptr %5, align 8, !tbaa !5
  %3860 = getelementptr inbounds i32, ptr %3859, i64 1
  %3861 = load i32, ptr %3860, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %339) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %340) #9
  %3862 = load ptr, ptr %5, align 8, !tbaa !5
  %3863 = getelementptr inbounds i32, ptr %3862, i64 2
  %3864 = load i32, ptr %3863, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %340, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3864, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA44_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %339, ptr noundef nonnull align 8 dereferenceable(32) %340, ptr noundef nonnull align 1 dereferenceable(44) @.str.1050)
          to label %3865 unwind label %3868

3865:                                             ; preds = %3855
  %3866 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3858, i32 noundef %3861, ptr noundef nonnull align 8 dereferenceable(32) %339, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3867 unwind label %3872

3867:                                             ; preds = %3865
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %339) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %340) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %340) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %339) #9
  br label %3899

3868:                                             ; preds = %3855
  %3869 = landingpad { ptr, i32 }
          cleanup
  %3870 = extractvalue { ptr, i32 } %3869, 0
  store ptr %3870, ptr %30, align 8
  %3871 = extractvalue { ptr, i32 } %3869, 1
  store i32 %3871, ptr %31, align 4
  br label %3876

3872:                                             ; preds = %3865
  %3873 = landingpad { ptr, i32 }
          cleanup
  %3874 = extractvalue { ptr, i32 } %3873, 0
  store ptr %3874, ptr %30, align 8
  %3875 = extractvalue { ptr, i32 } %3873, 1
  store i32 %3875, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %339) #9
  br label %3876

3876:                                             ; preds = %3872, %3868
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %340) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %340) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %339) #9
  br label %5109

3877:                                             ; preds = %3845
  %3878 = load ptr, ptr %5, align 8, !tbaa !5
  %3879 = getelementptr inbounds i32, ptr %3878, i64 0
  %3880 = load i32, ptr %3879, align 4, !tbaa !15
  %3881 = load ptr, ptr %5, align 8, !tbaa !5
  %3882 = getelementptr inbounds i32, ptr %3881, i64 1
  %3883 = load i32, ptr %3882, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %341) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %342) #9
  %3884 = load ptr, ptr %5, align 8, !tbaa !5
  %3885 = getelementptr inbounds i32, ptr %3884, i64 2
  %3886 = load i32, ptr %3885, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %342, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3886, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA44_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %341, ptr noundef nonnull align 8 dereferenceable(32) %342, ptr noundef nonnull align 1 dereferenceable(44) @.str.1051)
          to label %3887 unwind label %3890

3887:                                             ; preds = %3877
  %3888 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3880, i32 noundef %3883, ptr noundef nonnull align 8 dereferenceable(32) %341, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3889 unwind label %3894

3889:                                             ; preds = %3887
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %341) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %342) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %341) #9
  br label %3899

3890:                                             ; preds = %3877
  %3891 = landingpad { ptr, i32 }
          cleanup
  %3892 = extractvalue { ptr, i32 } %3891, 0
  store ptr %3892, ptr %30, align 8
  %3893 = extractvalue { ptr, i32 } %3891, 1
  store i32 %3893, ptr %31, align 4
  br label %3898

3894:                                             ; preds = %3887
  %3895 = landingpad { ptr, i32 }
          cleanup
  %3896 = extractvalue { ptr, i32 } %3895, 0
  store ptr %3896, ptr %30, align 8
  %3897 = extractvalue { ptr, i32 } %3895, 1
  store i32 %3897, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %341) #9
  br label %3898

3898:                                             ; preds = %3894, %3890
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %342) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %341) #9
  br label %5109

3899:                                             ; preds = %3889, %3867
  br label %5106

3900:                                             ; preds = %2
  %3901 = load ptr, ptr %5, align 8, !tbaa !5
  %3902 = getelementptr inbounds i32, ptr %3901, i64 2
  %3903 = load i32, ptr %3902, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3903)
  %3904 = load ptr, ptr %5, align 8, !tbaa !5
  %3905 = getelementptr inbounds i32, ptr %3904, i64 3
  %3906 = load i32, ptr %3905, align 4, !tbaa !15
  %3907 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3906)
  %3908 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %3907, i32 noundef 0, i32 noundef 0)
  %3909 = icmp eq i32 %3908, 0
  br i1 %3909, label %3910, label %3932

3910:                                             ; preds = %3900
  %3911 = load ptr, ptr %5, align 8, !tbaa !5
  %3912 = getelementptr inbounds i32, ptr %3911, i64 0
  %3913 = load i32, ptr %3912, align 4, !tbaa !15
  %3914 = load ptr, ptr %5, align 8, !tbaa !5
  %3915 = getelementptr inbounds i32, ptr %3914, i64 1
  %3916 = load i32, ptr %3915, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %343) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %344) #9
  %3917 = load ptr, ptr %5, align 8, !tbaa !5
  %3918 = getelementptr inbounds i32, ptr %3917, i64 2
  %3919 = load i32, ptr %3918, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %344, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3919, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %343, ptr noundef nonnull align 8 dereferenceable(32) %344, ptr noundef nonnull align 1 dereferenceable(30) @.str.1052)
          to label %3920 unwind label %3923

3920:                                             ; preds = %3910
  %3921 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3913, i32 noundef %3916, ptr noundef nonnull align 8 dereferenceable(32) %343, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3922 unwind label %3927

3922:                                             ; preds = %3920
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %343) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %344) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %344) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %343) #9
  br label %3954

3923:                                             ; preds = %3910
  %3924 = landingpad { ptr, i32 }
          cleanup
  %3925 = extractvalue { ptr, i32 } %3924, 0
  store ptr %3925, ptr %30, align 8
  %3926 = extractvalue { ptr, i32 } %3924, 1
  store i32 %3926, ptr %31, align 4
  br label %3931

3927:                                             ; preds = %3920
  %3928 = landingpad { ptr, i32 }
          cleanup
  %3929 = extractvalue { ptr, i32 } %3928, 0
  store ptr %3929, ptr %30, align 8
  %3930 = extractvalue { ptr, i32 } %3928, 1
  store i32 %3930, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %343) #9
  br label %3931

3931:                                             ; preds = %3927, %3923
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %344) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %344) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %343) #9
  br label %5109

3932:                                             ; preds = %3900
  %3933 = load ptr, ptr %5, align 8, !tbaa !5
  %3934 = getelementptr inbounds i32, ptr %3933, i64 0
  %3935 = load i32, ptr %3934, align 4, !tbaa !15
  %3936 = load ptr, ptr %5, align 8, !tbaa !5
  %3937 = getelementptr inbounds i32, ptr %3936, i64 1
  %3938 = load i32, ptr %3937, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %345) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %346) #9
  %3939 = load ptr, ptr %5, align 8, !tbaa !5
  %3940 = getelementptr inbounds i32, ptr %3939, i64 2
  %3941 = load i32, ptr %3940, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %346, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3941, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %345, ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef nonnull align 1 dereferenceable(30) @.str.1053)
          to label %3942 unwind label %3945

3942:                                             ; preds = %3932
  %3943 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3935, i32 noundef %3938, ptr noundef nonnull align 8 dereferenceable(32) %345, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3944 unwind label %3949

3944:                                             ; preds = %3942
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %345) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %346) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %346) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %345) #9
  br label %3954

3945:                                             ; preds = %3932
  %3946 = landingpad { ptr, i32 }
          cleanup
  %3947 = extractvalue { ptr, i32 } %3946, 0
  store ptr %3947, ptr %30, align 8
  %3948 = extractvalue { ptr, i32 } %3946, 1
  store i32 %3948, ptr %31, align 4
  br label %3953

3949:                                             ; preds = %3942
  %3950 = landingpad { ptr, i32 }
          cleanup
  %3951 = extractvalue { ptr, i32 } %3950, 0
  store ptr %3951, ptr %30, align 8
  %3952 = extractvalue { ptr, i32 } %3950, 1
  store i32 %3952, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %345) #9
  br label %3953

3953:                                             ; preds = %3949, %3945
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %346) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %346) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %345) #9
  br label %5109

3954:                                             ; preds = %3944, %3922
  br label %5106

3955:                                             ; preds = %2
  %3956 = load ptr, ptr %5, align 8, !tbaa !5
  %3957 = getelementptr inbounds i32, ptr %3956, i64 2
  %3958 = load i32, ptr %3957, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3958)
  %3959 = load ptr, ptr %5, align 8, !tbaa !5
  %3960 = getelementptr inbounds i32, ptr %3959, i64 3
  %3961 = load i32, ptr %3960, align 4, !tbaa !15
  %3962 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %3961)
  %3963 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %3962, i32 noundef 0, i32 noundef 0)
  %3964 = icmp eq i32 %3963, 0
  br i1 %3964, label %3965, label %3987

3965:                                             ; preds = %3955
  %3966 = load ptr, ptr %5, align 8, !tbaa !5
  %3967 = getelementptr inbounds i32, ptr %3966, i64 0
  %3968 = load i32, ptr %3967, align 4, !tbaa !15
  %3969 = load ptr, ptr %5, align 8, !tbaa !5
  %3970 = getelementptr inbounds i32, ptr %3969, i64 1
  %3971 = load i32, ptr %3970, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %347) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %348) #9
  %3972 = load ptr, ptr %5, align 8, !tbaa !5
  %3973 = getelementptr inbounds i32, ptr %3972, i64 2
  %3974 = load i32, ptr %3973, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %348, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3974, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %347, ptr noundef nonnull align 8 dereferenceable(32) %348, ptr noundef nonnull align 1 dereferenceable(29) @.str.1054)
          to label %3975 unwind label %3978

3975:                                             ; preds = %3965
  %3976 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3968, i32 noundef %3971, ptr noundef nonnull align 8 dereferenceable(32) %347, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3977 unwind label %3982

3977:                                             ; preds = %3975
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %347) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %348) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %348) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %347) #9
  br label %4009

3978:                                             ; preds = %3965
  %3979 = landingpad { ptr, i32 }
          cleanup
  %3980 = extractvalue { ptr, i32 } %3979, 0
  store ptr %3980, ptr %30, align 8
  %3981 = extractvalue { ptr, i32 } %3979, 1
  store i32 %3981, ptr %31, align 4
  br label %3986

3982:                                             ; preds = %3975
  %3983 = landingpad { ptr, i32 }
          cleanup
  %3984 = extractvalue { ptr, i32 } %3983, 0
  store ptr %3984, ptr %30, align 8
  %3985 = extractvalue { ptr, i32 } %3983, 1
  store i32 %3985, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %347) #9
  br label %3986

3986:                                             ; preds = %3982, %3978
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %348) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %348) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %347) #9
  br label %5109

3987:                                             ; preds = %3955
  %3988 = load ptr, ptr %5, align 8, !tbaa !5
  %3989 = getelementptr inbounds i32, ptr %3988, i64 0
  %3990 = load i32, ptr %3989, align 4, !tbaa !15
  %3991 = load ptr, ptr %5, align 8, !tbaa !5
  %3992 = getelementptr inbounds i32, ptr %3991, i64 1
  %3993 = load i32, ptr %3992, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %349) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %350) #9
  %3994 = load ptr, ptr %5, align 8, !tbaa !5
  %3995 = getelementptr inbounds i32, ptr %3994, i64 2
  %3996 = load i32, ptr %3995, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %350, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3996, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %349, ptr noundef nonnull align 8 dereferenceable(32) %350, ptr noundef nonnull align 1 dereferenceable(29) @.str.1055)
          to label %3997 unwind label %4000

3997:                                             ; preds = %3987
  %3998 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %3990, i32 noundef %3993, ptr noundef nonnull align 8 dereferenceable(32) %349, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3999 unwind label %4004

3999:                                             ; preds = %3997
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %349) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %350) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %350) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %349) #9
  br label %4009

4000:                                             ; preds = %3987
  %4001 = landingpad { ptr, i32 }
          cleanup
  %4002 = extractvalue { ptr, i32 } %4001, 0
  store ptr %4002, ptr %30, align 8
  %4003 = extractvalue { ptr, i32 } %4001, 1
  store i32 %4003, ptr %31, align 4
  br label %4008

4004:                                             ; preds = %3997
  %4005 = landingpad { ptr, i32 }
          cleanup
  %4006 = extractvalue { ptr, i32 } %4005, 0
  store ptr %4006, ptr %30, align 8
  %4007 = extractvalue { ptr, i32 } %4005, 1
  store i32 %4007, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %349) #9
  br label %4008

4008:                                             ; preds = %4004, %4000
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %350) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %350) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %349) #9
  br label %5109

4009:                                             ; preds = %3999, %3977
  br label %5106

4010:                                             ; preds = %2
  %4011 = load ptr, ptr %5, align 8, !tbaa !5
  %4012 = getelementptr inbounds i32, ptr %4011, i64 2
  %4013 = load i32, ptr %4012, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4013)
  %4014 = load ptr, ptr %5, align 8, !tbaa !5
  %4015 = getelementptr inbounds i32, ptr %4014, i64 3
  %4016 = load i32, ptr %4015, align 4, !tbaa !15
  %4017 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4016)
  %4018 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4017, i32 noundef 0, i32 noundef 0)
  %4019 = icmp eq i32 %4018, 0
  br i1 %4019, label %4020, label %4042

4020:                                             ; preds = %4010
  %4021 = load ptr, ptr %5, align 8, !tbaa !5
  %4022 = getelementptr inbounds i32, ptr %4021, i64 0
  %4023 = load i32, ptr %4022, align 4, !tbaa !15
  %4024 = load ptr, ptr %5, align 8, !tbaa !5
  %4025 = getelementptr inbounds i32, ptr %4024, i64 1
  %4026 = load i32, ptr %4025, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %351) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %352) #9
  %4027 = load ptr, ptr %5, align 8, !tbaa !5
  %4028 = getelementptr inbounds i32, ptr %4027, i64 2
  %4029 = load i32, ptr %4028, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %352, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4029, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA28_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %351, ptr noundef nonnull align 8 dereferenceable(32) %352, ptr noundef nonnull align 1 dereferenceable(28) @.str.1056)
          to label %4030 unwind label %4033

4030:                                             ; preds = %4020
  %4031 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4023, i32 noundef %4026, ptr noundef nonnull align 8 dereferenceable(32) %351, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4032 unwind label %4037

4032:                                             ; preds = %4030
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %351) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %352) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %352) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %351) #9
  br label %4064

4033:                                             ; preds = %4020
  %4034 = landingpad { ptr, i32 }
          cleanup
  %4035 = extractvalue { ptr, i32 } %4034, 0
  store ptr %4035, ptr %30, align 8
  %4036 = extractvalue { ptr, i32 } %4034, 1
  store i32 %4036, ptr %31, align 4
  br label %4041

4037:                                             ; preds = %4030
  %4038 = landingpad { ptr, i32 }
          cleanup
  %4039 = extractvalue { ptr, i32 } %4038, 0
  store ptr %4039, ptr %30, align 8
  %4040 = extractvalue { ptr, i32 } %4038, 1
  store i32 %4040, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %351) #9
  br label %4041

4041:                                             ; preds = %4037, %4033
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %352) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %352) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %351) #9
  br label %5109

4042:                                             ; preds = %4010
  %4043 = load ptr, ptr %5, align 8, !tbaa !5
  %4044 = getelementptr inbounds i32, ptr %4043, i64 0
  %4045 = load i32, ptr %4044, align 4, !tbaa !15
  %4046 = load ptr, ptr %5, align 8, !tbaa !5
  %4047 = getelementptr inbounds i32, ptr %4046, i64 1
  %4048 = load i32, ptr %4047, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %353) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %354) #9
  %4049 = load ptr, ptr %5, align 8, !tbaa !5
  %4050 = getelementptr inbounds i32, ptr %4049, i64 2
  %4051 = load i32, ptr %4050, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %354, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4051, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA28_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %353, ptr noundef nonnull align 8 dereferenceable(32) %354, ptr noundef nonnull align 1 dereferenceable(28) @.str.1057)
          to label %4052 unwind label %4055

4052:                                             ; preds = %4042
  %4053 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4045, i32 noundef %4048, ptr noundef nonnull align 8 dereferenceable(32) %353, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4054 unwind label %4059

4054:                                             ; preds = %4052
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %353) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %354) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %354) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %353) #9
  br label %4064

4055:                                             ; preds = %4042
  %4056 = landingpad { ptr, i32 }
          cleanup
  %4057 = extractvalue { ptr, i32 } %4056, 0
  store ptr %4057, ptr %30, align 8
  %4058 = extractvalue { ptr, i32 } %4056, 1
  store i32 %4058, ptr %31, align 4
  br label %4063

4059:                                             ; preds = %4052
  %4060 = landingpad { ptr, i32 }
          cleanup
  %4061 = extractvalue { ptr, i32 } %4060, 0
  store ptr %4061, ptr %30, align 8
  %4062 = extractvalue { ptr, i32 } %4060, 1
  store i32 %4062, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %353) #9
  br label %4063

4063:                                             ; preds = %4059, %4055
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %354) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %354) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %353) #9
  br label %5109

4064:                                             ; preds = %4054, %4032
  br label %5106

4065:                                             ; preds = %2
  %4066 = load ptr, ptr %5, align 8, !tbaa !5
  %4067 = getelementptr inbounds i32, ptr %4066, i64 2
  %4068 = load i32, ptr %4067, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4068)
  %4069 = load ptr, ptr %5, align 8, !tbaa !5
  %4070 = getelementptr inbounds i32, ptr %4069, i64 3
  %4071 = load i32, ptr %4070, align 4, !tbaa !15
  %4072 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4071)
  %4073 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4072, i32 noundef 0, i32 noundef 0)
  %4074 = icmp eq i32 %4073, 0
  br i1 %4074, label %4075, label %4097

4075:                                             ; preds = %4065
  %4076 = load ptr, ptr %5, align 8, !tbaa !5
  %4077 = getelementptr inbounds i32, ptr %4076, i64 0
  %4078 = load i32, ptr %4077, align 4, !tbaa !15
  %4079 = load ptr, ptr %5, align 8, !tbaa !5
  %4080 = getelementptr inbounds i32, ptr %4079, i64 1
  %4081 = load i32, ptr %4080, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %355) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %356) #9
  %4082 = load ptr, ptr %5, align 8, !tbaa !5
  %4083 = getelementptr inbounds i32, ptr %4082, i64 2
  %4084 = load i32, ptr %4083, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %356, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4084, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %355, ptr noundef nonnull align 8 dereferenceable(32) %356, ptr noundef nonnull align 1 dereferenceable(31) @.str.1058)
          to label %4085 unwind label %4088

4085:                                             ; preds = %4075
  %4086 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4078, i32 noundef %4081, ptr noundef nonnull align 8 dereferenceable(32) %355, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4087 unwind label %4092

4087:                                             ; preds = %4085
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %355) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %356) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %356) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %355) #9
  br label %4119

4088:                                             ; preds = %4075
  %4089 = landingpad { ptr, i32 }
          cleanup
  %4090 = extractvalue { ptr, i32 } %4089, 0
  store ptr %4090, ptr %30, align 8
  %4091 = extractvalue { ptr, i32 } %4089, 1
  store i32 %4091, ptr %31, align 4
  br label %4096

4092:                                             ; preds = %4085
  %4093 = landingpad { ptr, i32 }
          cleanup
  %4094 = extractvalue { ptr, i32 } %4093, 0
  store ptr %4094, ptr %30, align 8
  %4095 = extractvalue { ptr, i32 } %4093, 1
  store i32 %4095, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %355) #9
  br label %4096

4096:                                             ; preds = %4092, %4088
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %356) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %356) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %355) #9
  br label %5109

4097:                                             ; preds = %4065
  %4098 = load ptr, ptr %5, align 8, !tbaa !5
  %4099 = getelementptr inbounds i32, ptr %4098, i64 0
  %4100 = load i32, ptr %4099, align 4, !tbaa !15
  %4101 = load ptr, ptr %5, align 8, !tbaa !5
  %4102 = getelementptr inbounds i32, ptr %4101, i64 1
  %4103 = load i32, ptr %4102, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %357) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %358) #9
  %4104 = load ptr, ptr %5, align 8, !tbaa !5
  %4105 = getelementptr inbounds i32, ptr %4104, i64 2
  %4106 = load i32, ptr %4105, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %358, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4106, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %357, ptr noundef nonnull align 8 dereferenceable(32) %358, ptr noundef nonnull align 1 dereferenceable(31) @.str.1059)
          to label %4107 unwind label %4110

4107:                                             ; preds = %4097
  %4108 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4100, i32 noundef %4103, ptr noundef nonnull align 8 dereferenceable(32) %357, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4109 unwind label %4114

4109:                                             ; preds = %4107
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %357) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %358) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %358) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %357) #9
  br label %4119

4110:                                             ; preds = %4097
  %4111 = landingpad { ptr, i32 }
          cleanup
  %4112 = extractvalue { ptr, i32 } %4111, 0
  store ptr %4112, ptr %30, align 8
  %4113 = extractvalue { ptr, i32 } %4111, 1
  store i32 %4113, ptr %31, align 4
  br label %4118

4114:                                             ; preds = %4107
  %4115 = landingpad { ptr, i32 }
          cleanup
  %4116 = extractvalue { ptr, i32 } %4115, 0
  store ptr %4116, ptr %30, align 8
  %4117 = extractvalue { ptr, i32 } %4115, 1
  store i32 %4117, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %357) #9
  br label %4118

4118:                                             ; preds = %4114, %4110
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %358) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %358) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %357) #9
  br label %5109

4119:                                             ; preds = %4109, %4087
  br label %5106

4120:                                             ; preds = %2
  %4121 = load ptr, ptr %5, align 8, !tbaa !5
  %4122 = getelementptr inbounds i32, ptr %4121, i64 2
  %4123 = load i32, ptr %4122, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4123)
  %4124 = load ptr, ptr %5, align 8, !tbaa !5
  %4125 = getelementptr inbounds i32, ptr %4124, i64 3
  %4126 = load i32, ptr %4125, align 4, !tbaa !15
  %4127 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4126)
  %4128 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4127, i32 noundef 0, i32 noundef 0)
  %4129 = icmp eq i32 %4128, 0
  br i1 %4129, label %4130, label %4152

4130:                                             ; preds = %4120
  %4131 = load ptr, ptr %5, align 8, !tbaa !5
  %4132 = getelementptr inbounds i32, ptr %4131, i64 0
  %4133 = load i32, ptr %4132, align 4, !tbaa !15
  %4134 = load ptr, ptr %5, align 8, !tbaa !5
  %4135 = getelementptr inbounds i32, ptr %4134, i64 1
  %4136 = load i32, ptr %4135, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %359) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %360) #9
  %4137 = load ptr, ptr %5, align 8, !tbaa !5
  %4138 = getelementptr inbounds i32, ptr %4137, i64 2
  %4139 = load i32, ptr %4138, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %360, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4139, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %359, ptr noundef nonnull align 8 dereferenceable(32) %360, ptr noundef nonnull align 1 dereferenceable(43) @.str.1060)
          to label %4140 unwind label %4143

4140:                                             ; preds = %4130
  %4141 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4133, i32 noundef %4136, ptr noundef nonnull align 8 dereferenceable(32) %359, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4142 unwind label %4147

4142:                                             ; preds = %4140
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %359) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %360) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %360) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %359) #9
  br label %4174

4143:                                             ; preds = %4130
  %4144 = landingpad { ptr, i32 }
          cleanup
  %4145 = extractvalue { ptr, i32 } %4144, 0
  store ptr %4145, ptr %30, align 8
  %4146 = extractvalue { ptr, i32 } %4144, 1
  store i32 %4146, ptr %31, align 4
  br label %4151

4147:                                             ; preds = %4140
  %4148 = landingpad { ptr, i32 }
          cleanup
  %4149 = extractvalue { ptr, i32 } %4148, 0
  store ptr %4149, ptr %30, align 8
  %4150 = extractvalue { ptr, i32 } %4148, 1
  store i32 %4150, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %359) #9
  br label %4151

4151:                                             ; preds = %4147, %4143
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %360) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %360) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %359) #9
  br label %5109

4152:                                             ; preds = %4120
  %4153 = load ptr, ptr %5, align 8, !tbaa !5
  %4154 = getelementptr inbounds i32, ptr %4153, i64 0
  %4155 = load i32, ptr %4154, align 4, !tbaa !15
  %4156 = load ptr, ptr %5, align 8, !tbaa !5
  %4157 = getelementptr inbounds i32, ptr %4156, i64 1
  %4158 = load i32, ptr %4157, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %361) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %362) #9
  %4159 = load ptr, ptr %5, align 8, !tbaa !5
  %4160 = getelementptr inbounds i32, ptr %4159, i64 2
  %4161 = load i32, ptr %4160, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %362, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4161, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %361, ptr noundef nonnull align 8 dereferenceable(32) %362, ptr noundef nonnull align 1 dereferenceable(43) @.str.1061)
          to label %4162 unwind label %4165

4162:                                             ; preds = %4152
  %4163 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4155, i32 noundef %4158, ptr noundef nonnull align 8 dereferenceable(32) %361, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4164 unwind label %4169

4164:                                             ; preds = %4162
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %361) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %362) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %362) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %361) #9
  br label %4174

4165:                                             ; preds = %4152
  %4166 = landingpad { ptr, i32 }
          cleanup
  %4167 = extractvalue { ptr, i32 } %4166, 0
  store ptr %4167, ptr %30, align 8
  %4168 = extractvalue { ptr, i32 } %4166, 1
  store i32 %4168, ptr %31, align 4
  br label %4173

4169:                                             ; preds = %4162
  %4170 = landingpad { ptr, i32 }
          cleanup
  %4171 = extractvalue { ptr, i32 } %4170, 0
  store ptr %4171, ptr %30, align 8
  %4172 = extractvalue { ptr, i32 } %4170, 1
  store i32 %4172, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %361) #9
  br label %4173

4173:                                             ; preds = %4169, %4165
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %362) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %362) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %361) #9
  br label %5109

4174:                                             ; preds = %4164, %4142
  br label %5106

4175:                                             ; preds = %2
  %4176 = load ptr, ptr %5, align 8, !tbaa !5
  %4177 = getelementptr inbounds i32, ptr %4176, i64 2
  %4178 = load i32, ptr %4177, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4178)
  %4179 = load ptr, ptr %5, align 8, !tbaa !5
  %4180 = getelementptr inbounds i32, ptr %4179, i64 3
  %4181 = load i32, ptr %4180, align 4, !tbaa !15
  %4182 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4181)
  %4183 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4182, i32 noundef 0, i32 noundef 0)
  %4184 = icmp eq i32 %4183, 0
  br i1 %4184, label %4185, label %4207

4185:                                             ; preds = %4175
  %4186 = load ptr, ptr %5, align 8, !tbaa !5
  %4187 = getelementptr inbounds i32, ptr %4186, i64 0
  %4188 = load i32, ptr %4187, align 4, !tbaa !15
  %4189 = load ptr, ptr %5, align 8, !tbaa !5
  %4190 = getelementptr inbounds i32, ptr %4189, i64 1
  %4191 = load i32, ptr %4190, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %363) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %364) #9
  %4192 = load ptr, ptr %5, align 8, !tbaa !5
  %4193 = getelementptr inbounds i32, ptr %4192, i64 2
  %4194 = load i32, ptr %4193, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %364, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4194, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %363, ptr noundef nonnull align 8 dereferenceable(32) %364, ptr noundef nonnull align 1 dereferenceable(43) @.str.1062)
          to label %4195 unwind label %4198

4195:                                             ; preds = %4185
  %4196 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4188, i32 noundef %4191, ptr noundef nonnull align 8 dereferenceable(32) %363, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4197 unwind label %4202

4197:                                             ; preds = %4195
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %364) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %364) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %363) #9
  br label %4229

4198:                                             ; preds = %4185
  %4199 = landingpad { ptr, i32 }
          cleanup
  %4200 = extractvalue { ptr, i32 } %4199, 0
  store ptr %4200, ptr %30, align 8
  %4201 = extractvalue { ptr, i32 } %4199, 1
  store i32 %4201, ptr %31, align 4
  br label %4206

4202:                                             ; preds = %4195
  %4203 = landingpad { ptr, i32 }
          cleanup
  %4204 = extractvalue { ptr, i32 } %4203, 0
  store ptr %4204, ptr %30, align 8
  %4205 = extractvalue { ptr, i32 } %4203, 1
  store i32 %4205, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #9
  br label %4206

4206:                                             ; preds = %4202, %4198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %364) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %364) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %363) #9
  br label %5109

4207:                                             ; preds = %4175
  %4208 = load ptr, ptr %5, align 8, !tbaa !5
  %4209 = getelementptr inbounds i32, ptr %4208, i64 0
  %4210 = load i32, ptr %4209, align 4, !tbaa !15
  %4211 = load ptr, ptr %5, align 8, !tbaa !5
  %4212 = getelementptr inbounds i32, ptr %4211, i64 1
  %4213 = load i32, ptr %4212, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %365) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %366) #9
  %4214 = load ptr, ptr %5, align 8, !tbaa !5
  %4215 = getelementptr inbounds i32, ptr %4214, i64 2
  %4216 = load i32, ptr %4215, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %366, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4216, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %365, ptr noundef nonnull align 8 dereferenceable(32) %366, ptr noundef nonnull align 1 dereferenceable(43) @.str.1063)
          to label %4217 unwind label %4220

4217:                                             ; preds = %4207
  %4218 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4210, i32 noundef %4213, ptr noundef nonnull align 8 dereferenceable(32) %365, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4219 unwind label %4224

4219:                                             ; preds = %4217
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %365) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %366) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %366) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %365) #9
  br label %4229

4220:                                             ; preds = %4207
  %4221 = landingpad { ptr, i32 }
          cleanup
  %4222 = extractvalue { ptr, i32 } %4221, 0
  store ptr %4222, ptr %30, align 8
  %4223 = extractvalue { ptr, i32 } %4221, 1
  store i32 %4223, ptr %31, align 4
  br label %4228

4224:                                             ; preds = %4217
  %4225 = landingpad { ptr, i32 }
          cleanup
  %4226 = extractvalue { ptr, i32 } %4225, 0
  store ptr %4226, ptr %30, align 8
  %4227 = extractvalue { ptr, i32 } %4225, 1
  store i32 %4227, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %365) #9
  br label %4228

4228:                                             ; preds = %4224, %4220
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %366) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %366) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %365) #9
  br label %5109

4229:                                             ; preds = %4219, %4197
  br label %5106

4230:                                             ; preds = %2
  %4231 = load ptr, ptr %5, align 8, !tbaa !5
  %4232 = getelementptr inbounds i32, ptr %4231, i64 2
  %4233 = load i32, ptr %4232, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4233)
  %4234 = load ptr, ptr %5, align 8, !tbaa !5
  %4235 = getelementptr inbounds i32, ptr %4234, i64 3
  %4236 = load i32, ptr %4235, align 4, !tbaa !15
  %4237 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4236)
  %4238 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4237, i32 noundef 0, i32 noundef 0)
  %4239 = icmp eq i32 %4238, 0
  br i1 %4239, label %4240, label %4262

4240:                                             ; preds = %4230
  %4241 = load ptr, ptr %5, align 8, !tbaa !5
  %4242 = getelementptr inbounds i32, ptr %4241, i64 0
  %4243 = load i32, ptr %4242, align 4, !tbaa !15
  %4244 = load ptr, ptr %5, align 8, !tbaa !5
  %4245 = getelementptr inbounds i32, ptr %4244, i64 1
  %4246 = load i32, ptr %4245, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %367) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %368) #9
  %4247 = load ptr, ptr %5, align 8, !tbaa !5
  %4248 = getelementptr inbounds i32, ptr %4247, i64 2
  %4249 = load i32, ptr %4248, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %368, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4249, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA38_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %367, ptr noundef nonnull align 8 dereferenceable(32) %368, ptr noundef nonnull align 1 dereferenceable(38) @.str.1064)
          to label %4250 unwind label %4253

4250:                                             ; preds = %4240
  %4251 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4243, i32 noundef %4246, ptr noundef nonnull align 8 dereferenceable(32) %367, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4252 unwind label %4257

4252:                                             ; preds = %4250
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %367) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %368) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %368) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %367) #9
  br label %4284

4253:                                             ; preds = %4240
  %4254 = landingpad { ptr, i32 }
          cleanup
  %4255 = extractvalue { ptr, i32 } %4254, 0
  store ptr %4255, ptr %30, align 8
  %4256 = extractvalue { ptr, i32 } %4254, 1
  store i32 %4256, ptr %31, align 4
  br label %4261

4257:                                             ; preds = %4250
  %4258 = landingpad { ptr, i32 }
          cleanup
  %4259 = extractvalue { ptr, i32 } %4258, 0
  store ptr %4259, ptr %30, align 8
  %4260 = extractvalue { ptr, i32 } %4258, 1
  store i32 %4260, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %367) #9
  br label %4261

4261:                                             ; preds = %4257, %4253
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %368) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %368) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %367) #9
  br label %5109

4262:                                             ; preds = %4230
  %4263 = load ptr, ptr %5, align 8, !tbaa !5
  %4264 = getelementptr inbounds i32, ptr %4263, i64 0
  %4265 = load i32, ptr %4264, align 4, !tbaa !15
  %4266 = load ptr, ptr %5, align 8, !tbaa !5
  %4267 = getelementptr inbounds i32, ptr %4266, i64 1
  %4268 = load i32, ptr %4267, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %369) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %370) #9
  %4269 = load ptr, ptr %5, align 8, !tbaa !5
  %4270 = getelementptr inbounds i32, ptr %4269, i64 2
  %4271 = load i32, ptr %4270, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %370, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4271, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA38_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %369, ptr noundef nonnull align 8 dereferenceable(32) %370, ptr noundef nonnull align 1 dereferenceable(38) @.str.1065)
          to label %4272 unwind label %4275

4272:                                             ; preds = %4262
  %4273 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4265, i32 noundef %4268, ptr noundef nonnull align 8 dereferenceable(32) %369, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4274 unwind label %4279

4274:                                             ; preds = %4272
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %370) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %370) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %369) #9
  br label %4284

4275:                                             ; preds = %4262
  %4276 = landingpad { ptr, i32 }
          cleanup
  %4277 = extractvalue { ptr, i32 } %4276, 0
  store ptr %4277, ptr %30, align 8
  %4278 = extractvalue { ptr, i32 } %4276, 1
  store i32 %4278, ptr %31, align 4
  br label %4283

4279:                                             ; preds = %4272
  %4280 = landingpad { ptr, i32 }
          cleanup
  %4281 = extractvalue { ptr, i32 } %4280, 0
  store ptr %4281, ptr %30, align 8
  %4282 = extractvalue { ptr, i32 } %4280, 1
  store i32 %4282, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #9
  br label %4283

4283:                                             ; preds = %4279, %4275
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %370) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %370) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %369) #9
  br label %5109

4284:                                             ; preds = %4274, %4252
  br label %5106

4285:                                             ; preds = %2
  %4286 = load ptr, ptr %5, align 8, !tbaa !5
  %4287 = getelementptr inbounds i32, ptr %4286, i64 2
  %4288 = load i32, ptr %4287, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4288)
  %4289 = load ptr, ptr %5, align 8, !tbaa !5
  %4290 = getelementptr inbounds i32, ptr %4289, i64 3
  %4291 = load i32, ptr %4290, align 4, !tbaa !15
  %4292 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4291)
  %4293 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4292, i32 noundef 0, i32 noundef 0)
  %4294 = icmp eq i32 %4293, 0
  br i1 %4294, label %4295, label %4317

4295:                                             ; preds = %4285
  %4296 = load ptr, ptr %5, align 8, !tbaa !5
  %4297 = getelementptr inbounds i32, ptr %4296, i64 0
  %4298 = load i32, ptr %4297, align 4, !tbaa !15
  %4299 = load ptr, ptr %5, align 8, !tbaa !5
  %4300 = getelementptr inbounds i32, ptr %4299, i64 1
  %4301 = load i32, ptr %4300, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %371) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %372) #9
  %4302 = load ptr, ptr %5, align 8, !tbaa !5
  %4303 = getelementptr inbounds i32, ptr %4302, i64 2
  %4304 = load i32, ptr %4303, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %372, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4304, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA40_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %371, ptr noundef nonnull align 1 dereferenceable(6) @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %372, ptr noundef nonnull align 1 dereferenceable(40) @.str.1067)
          to label %4305 unwind label %4308

4305:                                             ; preds = %4295
  %4306 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4298, i32 noundef %4301, ptr noundef nonnull align 8 dereferenceable(32) %371, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4307 unwind label %4312

4307:                                             ; preds = %4305
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %371) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %372) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %372) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %371) #9
  br label %4339

4308:                                             ; preds = %4295
  %4309 = landingpad { ptr, i32 }
          cleanup
  %4310 = extractvalue { ptr, i32 } %4309, 0
  store ptr %4310, ptr %30, align 8
  %4311 = extractvalue { ptr, i32 } %4309, 1
  store i32 %4311, ptr %31, align 4
  br label %4316

4312:                                             ; preds = %4305
  %4313 = landingpad { ptr, i32 }
          cleanup
  %4314 = extractvalue { ptr, i32 } %4313, 0
  store ptr %4314, ptr %30, align 8
  %4315 = extractvalue { ptr, i32 } %4313, 1
  store i32 %4315, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %371) #9
  br label %4316

4316:                                             ; preds = %4312, %4308
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %372) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %372) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %371) #9
  br label %5109

4317:                                             ; preds = %4285
  %4318 = load ptr, ptr %5, align 8, !tbaa !5
  %4319 = getelementptr inbounds i32, ptr %4318, i64 0
  %4320 = load i32, ptr %4319, align 4, !tbaa !15
  %4321 = load ptr, ptr %5, align 8, !tbaa !5
  %4322 = getelementptr inbounds i32, ptr %4321, i64 1
  %4323 = load i32, ptr %4322, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %373) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %374) #9
  %4324 = load ptr, ptr %5, align 8, !tbaa !5
  %4325 = getelementptr inbounds i32, ptr %4324, i64 2
  %4326 = load i32, ptr %4325, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %374, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4326, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA36_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %373, ptr noundef nonnull align 1 dereferenceable(6) @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %374, ptr noundef nonnull align 1 dereferenceable(36) @.str.1068)
          to label %4327 unwind label %4330

4327:                                             ; preds = %4317
  %4328 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4320, i32 noundef %4323, ptr noundef nonnull align 8 dereferenceable(32) %373, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4329 unwind label %4334

4329:                                             ; preds = %4327
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %373) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %374) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %374) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %373) #9
  br label %4339

4330:                                             ; preds = %4317
  %4331 = landingpad { ptr, i32 }
          cleanup
  %4332 = extractvalue { ptr, i32 } %4331, 0
  store ptr %4332, ptr %30, align 8
  %4333 = extractvalue { ptr, i32 } %4331, 1
  store i32 %4333, ptr %31, align 4
  br label %4338

4334:                                             ; preds = %4327
  %4335 = landingpad { ptr, i32 }
          cleanup
  %4336 = extractvalue { ptr, i32 } %4335, 0
  store ptr %4336, ptr %30, align 8
  %4337 = extractvalue { ptr, i32 } %4335, 1
  store i32 %4337, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %373) #9
  br label %4338

4338:                                             ; preds = %4334, %4330
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %374) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %374) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %373) #9
  br label %5109

4339:                                             ; preds = %4329, %4307
  br label %5106

4340:                                             ; preds = %2
  %4341 = load ptr, ptr %5, align 8, !tbaa !5
  %4342 = getelementptr inbounds i32, ptr %4341, i64 2
  %4343 = load i32, ptr %4342, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4343)
  %4344 = load ptr, ptr %5, align 8, !tbaa !5
  %4345 = getelementptr inbounds i32, ptr %4344, i64 3
  %4346 = load i32, ptr %4345, align 4, !tbaa !15
  %4347 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4346)
  %4348 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %4347, i32 noundef 0, i32 noundef 0)
  %4349 = icmp eq i32 %4348, 0
  br i1 %4349, label %4350, label %4372

4350:                                             ; preds = %4340
  %4351 = load ptr, ptr %5, align 8, !tbaa !5
  %4352 = getelementptr inbounds i32, ptr %4351, i64 0
  %4353 = load i32, ptr %4352, align 4, !tbaa !15
  %4354 = load ptr, ptr %5, align 8, !tbaa !5
  %4355 = getelementptr inbounds i32, ptr %4354, i64 1
  %4356 = load i32, ptr %4355, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %375) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %376) #9
  %4357 = load ptr, ptr %5, align 8, !tbaa !5
  %4358 = getelementptr inbounds i32, ptr %4357, i64 2
  %4359 = load i32, ptr %4358, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %376, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4359, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA35_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %375, ptr noundef nonnull align 8 dereferenceable(32) %376, ptr noundef nonnull align 1 dereferenceable(35) @.str.1069)
          to label %4360 unwind label %4363

4360:                                             ; preds = %4350
  %4361 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4353, i32 noundef %4356, ptr noundef nonnull align 8 dereferenceable(32) %375, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4362 unwind label %4367

4362:                                             ; preds = %4360
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %375) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %376) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %376) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %375) #9
  br label %4394

4363:                                             ; preds = %4350
  %4364 = landingpad { ptr, i32 }
          cleanup
  %4365 = extractvalue { ptr, i32 } %4364, 0
  store ptr %4365, ptr %30, align 8
  %4366 = extractvalue { ptr, i32 } %4364, 1
  store i32 %4366, ptr %31, align 4
  br label %4371

4367:                                             ; preds = %4360
  %4368 = landingpad { ptr, i32 }
          cleanup
  %4369 = extractvalue { ptr, i32 } %4368, 0
  store ptr %4369, ptr %30, align 8
  %4370 = extractvalue { ptr, i32 } %4368, 1
  store i32 %4370, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %375) #9
  br label %4371

4371:                                             ; preds = %4367, %4363
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %376) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %376) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %375) #9
  br label %5109

4372:                                             ; preds = %4340
  %4373 = load ptr, ptr %5, align 8, !tbaa !5
  %4374 = getelementptr inbounds i32, ptr %4373, i64 0
  %4375 = load i32, ptr %4374, align 4, !tbaa !15
  %4376 = load ptr, ptr %5, align 8, !tbaa !5
  %4377 = getelementptr inbounds i32, ptr %4376, i64 1
  %4378 = load i32, ptr %4377, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %377) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %378) #9
  %4379 = load ptr, ptr %5, align 8, !tbaa !5
  %4380 = getelementptr inbounds i32, ptr %4379, i64 2
  %4381 = load i32, ptr %4380, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %378, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4381, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA26_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %377, ptr noundef nonnull align 8 dereferenceable(32) %378, ptr noundef nonnull align 1 dereferenceable(26) @.str.1070)
          to label %4382 unwind label %4385

4382:                                             ; preds = %4372
  %4383 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4375, i32 noundef %4378, ptr noundef nonnull align 8 dereferenceable(32) %377, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4384 unwind label %4389

4384:                                             ; preds = %4382
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %377) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %378) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %378) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %377) #9
  br label %4394

4385:                                             ; preds = %4372
  %4386 = landingpad { ptr, i32 }
          cleanup
  %4387 = extractvalue { ptr, i32 } %4386, 0
  store ptr %4387, ptr %30, align 8
  %4388 = extractvalue { ptr, i32 } %4386, 1
  store i32 %4388, ptr %31, align 4
  br label %4393

4389:                                             ; preds = %4382
  %4390 = landingpad { ptr, i32 }
          cleanup
  %4391 = extractvalue { ptr, i32 } %4390, 0
  store ptr %4391, ptr %30, align 8
  %4392 = extractvalue { ptr, i32 } %4390, 1
  store i32 %4392, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %377) #9
  br label %4393

4393:                                             ; preds = %4389, %4385
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %378) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %378) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %377) #9
  br label %5109

4394:                                             ; preds = %4384, %4362
  br label %5106

4395:                                             ; preds = %2
  %4396 = load ptr, ptr %5, align 8, !tbaa !5
  %4397 = getelementptr inbounds i32, ptr %4396, i64 0
  %4398 = load i32, ptr %4397, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4398)
  %4399 = load ptr, ptr %5, align 8, !tbaa !5
  %4400 = getelementptr inbounds i32, ptr %4399, i64 0
  %4401 = load i32, ptr %4400, align 4, !tbaa !15
  %4402 = load ptr, ptr %5, align 8, !tbaa !5
  %4403 = getelementptr inbounds i32, ptr %4402, i64 1
  %4404 = load i32, ptr %4403, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %379) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %380) #9
  %4405 = load ptr, ptr %5, align 8, !tbaa !5
  %4406 = getelementptr inbounds i32, ptr %4405, i64 2
  %4407 = load i32, ptr %4406, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %380, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4407, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA40_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %379, ptr noundef nonnull align 8 dereferenceable(32) %380, ptr noundef nonnull align 1 dereferenceable(40) @.str.1071)
          to label %4408 unwind label %4411

4408:                                             ; preds = %4395
  %4409 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4401, i32 noundef %4404, ptr noundef nonnull align 8 dereferenceable(32) %379, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4410 unwind label %4415

4410:                                             ; preds = %4408
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %379) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %380) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %380) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %379) #9
  br label %5106

4411:                                             ; preds = %4395
  %4412 = landingpad { ptr, i32 }
          cleanup
  %4413 = extractvalue { ptr, i32 } %4412, 0
  store ptr %4413, ptr %30, align 8
  %4414 = extractvalue { ptr, i32 } %4412, 1
  store i32 %4414, ptr %31, align 4
  br label %4419

4415:                                             ; preds = %4408
  %4416 = landingpad { ptr, i32 }
          cleanup
  %4417 = extractvalue { ptr, i32 } %4416, 0
  store ptr %4417, ptr %30, align 8
  %4418 = extractvalue { ptr, i32 } %4416, 1
  store i32 %4418, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %379) #9
  br label %4419

4419:                                             ; preds = %4415, %4411
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %380) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %380) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %379) #9
  br label %5109

4420:                                             ; preds = %2
  %4421 = load ptr, ptr %5, align 8, !tbaa !5
  %4422 = getelementptr inbounds i32, ptr %4421, i64 0
  %4423 = load i32, ptr %4422, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4423)
  %4424 = load ptr, ptr %5, align 8, !tbaa !5
  %4425 = getelementptr inbounds i32, ptr %4424, i64 0
  %4426 = load i32, ptr %4425, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4426)
  call void @llvm.lifetime.start.p0(i64 32, ptr %381) #9
  %4427 = load ptr, ptr %5, align 8, !tbaa !5
  %4428 = getelementptr inbounds i32, ptr %4427, i64 0
  %4429 = load i32, ptr %4428, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %381, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4429, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %381, ptr noundef nonnull align 1 dereferenceable(33) @.str.1072)
          to label %4430 unwind label %4431

4430:                                             ; preds = %4420
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %381) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %381) #9
  br label %5106

4431:                                             ; preds = %4420
  %4432 = landingpad { ptr, i32 }
          cleanup
  %4433 = extractvalue { ptr, i32 } %4432, 0
  store ptr %4433, ptr %30, align 8
  %4434 = extractvalue { ptr, i32 } %4432, 1
  store i32 %4434, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %381) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %381) #9
  br label %5109

4435:                                             ; preds = %2
  %4436 = load ptr, ptr %5, align 8, !tbaa !5
  %4437 = getelementptr inbounds i32, ptr %4436, i64 0
  %4438 = load i32, ptr %4437, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4438)
  %4439 = load ptr, ptr %5, align 8, !tbaa !5
  %4440 = getelementptr inbounds i32, ptr %4439, i64 0
  %4441 = load i32, ptr %4440, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4441)
  call void @llvm.lifetime.start.p0(i64 32, ptr %382) #9
  %4442 = load ptr, ptr %5, align 8, !tbaa !5
  %4443 = getelementptr inbounds i32, ptr %4442, i64 0
  %4444 = load i32, ptr %4443, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %382, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4444, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %383) #9
  %4445 = load ptr, ptr %5, align 8, !tbaa !5
  %4446 = getelementptr inbounds i32, ptr %4445, i64 1
  %4447 = load i32, ptr %4446, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %383, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4447, i1 noundef zeroext true)
          to label %4448 unwind label %4450

4448:                                             ; preds = %4435
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA35_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %382, ptr noundef nonnull align 1 dereferenceable(35) @.str.1073, ptr noundef nonnull align 8 dereferenceable(32) %383, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %4449 unwind label %4454

4449:                                             ; preds = %4448
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %383) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %383) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %382) #9
  br label %5106

4450:                                             ; preds = %4435
  %4451 = landingpad { ptr, i32 }
          cleanup
  %4452 = extractvalue { ptr, i32 } %4451, 0
  store ptr %4452, ptr %30, align 8
  %4453 = extractvalue { ptr, i32 } %4451, 1
  store i32 %4453, ptr %31, align 4
  br label %4458

4454:                                             ; preds = %4448
  %4455 = landingpad { ptr, i32 }
          cleanup
  %4456 = extractvalue { ptr, i32 } %4455, 0
  store ptr %4456, ptr %30, align 8
  %4457 = extractvalue { ptr, i32 } %4455, 1
  store i32 %4457, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %383) #9
  br label %4458

4458:                                             ; preds = %4454, %4450
  call void @llvm.lifetime.end.p0(i64 32, ptr %383) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %382) #9
  br label %5109

4459:                                             ; preds = %2
  %4460 = load ptr, ptr %5, align 8, !tbaa !5
  %4461 = getelementptr inbounds i32, ptr %4460, i64 0
  %4462 = load i32, ptr %4461, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4462)
  %4463 = load ptr, ptr %5, align 8, !tbaa !5
  %4464 = getelementptr inbounds i32, ptr %4463, i64 0
  %4465 = load i32, ptr %4464, align 4, !tbaa !15
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4465)
  call void @llvm.lifetime.start.p0(i64 32, ptr %384) #9
  %4466 = load ptr, ptr %5, align 8, !tbaa !5
  %4467 = getelementptr inbounds i32, ptr %4466, i64 0
  %4468 = load i32, ptr %4467, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %384, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4468, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 8 dereferenceable(32) %384, ptr noundef nonnull align 1 dereferenceable(10) @.str.1074)
          to label %4469 unwind label %4470

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

4470:                                             ; preds = %4459
  %4471 = landingpad { ptr, i32 }
          cleanup
  %4472 = extractvalue { ptr, i32 } %4471, 0
  store ptr %4472, ptr %30, align 8
  %4473 = extractvalue { ptr, i32 } %4471, 1
  store i32 %4473, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %384) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %384) #9
  br label %5109

4474:                                             ; preds = %2, %2, %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %385) #9
  %4475 = load ptr, ptr %5, align 8, !tbaa !5
  %4476 = getelementptr inbounds i32, ptr %4475, i64 0
  %4477 = load i32, ptr %4476, align 4, !tbaa !15
  %4478 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4477)
  store ptr %4478, ptr %385, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %386) #9
  %4479 = load ptr, ptr %5, align 8, !tbaa !5
  %4480 = getelementptr inbounds i32, ptr %4479, i64 2
  %4481 = load i32, ptr %4480, align 4, !tbaa !15
  %4482 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4481)
  store ptr %4482, ptr %386, align 8, !tbaa !5
  %4483 = load i32, ptr %6, align 4, !tbaa !13
  %4484 = icmp ne i32 %4483, 124
  br i1 %4484, label %4495, label %4485

4485:                                             ; preds = %4474
  %4486 = load ptr, ptr %385, align 8, !tbaa !5
  %4487 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4486, i32 0, i32 9
  %4488 = load i8, ptr %4487, align 4, !tbaa !260, !range !192, !noundef !193
  %4489 = trunc i8 %4488 to i1
  br i1 %4489, label %4495, label %4490

4490:                                             ; preds = %4485
  %4491 = load ptr, ptr %386, align 8, !tbaa !5
  %4492 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4491, i32 0, i32 9
  %4493 = load i8, ptr %4492, align 4, !tbaa !260, !range !192, !noundef !193
  %4494 = trunc i8 %4493 to i1
  br i1 %4494, label %4495, label %4615

4495:                                             ; preds = %4490, %4485, %4474
  call void @llvm.lifetime.start.p0(i64 32, ptr %387) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %387) #9
  %4496 = load ptr, ptr %385, align 8, !tbaa !5
  %4497 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4496, i32 0, i32 4
  %4498 = load i32, ptr %4497, align 8, !tbaa !201
  %4499 = icmp eq i32 %4498, 1
  br i1 %4499, label %4500, label %4531

4500:                                             ; preds = %4495
  %4501 = load ptr, ptr %386, align 8, !tbaa !5
  %4502 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4501, i32 0, i32 4
  %4503 = load i32, ptr %4502, align 8, !tbaa !201
  %4504 = icmp eq i32 %4503, 1
  br i1 %4504, label %4505, label %4531

4505:                                             ; preds = %4500
  call void @llvm.lifetime.start.p0(i64 32, ptr %388) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %389) #9
  %4506 = load ptr, ptr %385, align 8, !tbaa !5
  %4507 = load ptr, ptr %448, align 8, !tbaa !197
  %4508 = getelementptr inbounds ptr, ptr %4507, i64 19
  %4509 = load ptr, ptr %4508, align 8
  invoke void %4509(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %389, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %4506, i32 noundef 0)
          to label %4510 unwind label %4517

4510:                                             ; preds = %4505
  call void @llvm.lifetime.start.p0(i64 32, ptr %390) #9
  %4511 = load ptr, ptr %5, align 8, !tbaa !5
  %4512 = getelementptr inbounds i32, ptr %4511, i64 2
  %4513 = load i32, ptr %4512, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %390, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4513, i1 noundef zeroext true)
          to label %4514 unwind label %4521

4514:                                             ; preds = %4510
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %388, ptr noundef nonnull align 1 dereferenceable(18) @.str.1075, ptr noundef nonnull align 8 dereferenceable(32) %389, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %390, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %4515 unwind label %4525

4515:                                             ; preds = %4514
  %4516 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull align 8 dereferenceable(32) %388) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %390) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %390) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %389) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %389) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %388) #9
  br label %4589

4517:                                             ; preds = %4505
  %4518 = landingpad { ptr, i32 }
          cleanup
  %4519 = extractvalue { ptr, i32 } %4518, 0
  store ptr %4519, ptr %30, align 8
  %4520 = extractvalue { ptr, i32 } %4518, 1
  store i32 %4520, ptr %31, align 4
  br label %4530

4521:                                             ; preds = %4510
  %4522 = landingpad { ptr, i32 }
          cleanup
  %4523 = extractvalue { ptr, i32 } %4522, 0
  store ptr %4523, ptr %30, align 8
  %4524 = extractvalue { ptr, i32 } %4522, 1
  store i32 %4524, ptr %31, align 4
  br label %4529

4525:                                             ; preds = %4514
  %4526 = landingpad { ptr, i32 }
          cleanup
  %4527 = extractvalue { ptr, i32 } %4526, 0
  store ptr %4527, ptr %30, align 8
  %4528 = extractvalue { ptr, i32 } %4526, 1
  store i32 %4528, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %390) #9
  br label %4529

4529:                                             ; preds = %4525, %4521
  call void @llvm.lifetime.end.p0(i64 32, ptr %390) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %389) #9
  br label %4530

4530:                                             ; preds = %4529, %4517
  call void @llvm.lifetime.end.p0(i64 32, ptr %389) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %388) #9
  br label %4614

4531:                                             ; preds = %4500, %4495
  %4532 = load ptr, ptr %386, align 8, !tbaa !5
  %4533 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4532, i32 0, i32 4
  %4534 = load i32, ptr %4533, align 8, !tbaa !201
  %4535 = icmp eq i32 %4534, 2
  br i1 %4535, label %4536, label %4562

4536:                                             ; preds = %4531
  call void @llvm.lifetime.start.p0(i64 32, ptr %391) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %392) #9
  %4537 = load ptr, ptr %385, align 8, !tbaa !5
  %4538 = load ptr, ptr %448, align 8, !tbaa !197
  %4539 = getelementptr inbounds ptr, ptr %4538, i64 19
  %4540 = load ptr, ptr %4539, align 8
  invoke void %4540(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %392, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %4537, i32 noundef 0)
          to label %4541 unwind label %4548

4541:                                             ; preds = %4536
  call void @llvm.lifetime.start.p0(i64 32, ptr %393) #9
  %4542 = load ptr, ptr %5, align 8, !tbaa !5
  %4543 = getelementptr inbounds i32, ptr %4542, i64 2
  %4544 = load i32, ptr %4543, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %393, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4544, i1 noundef zeroext true)
          to label %4545 unwind label %4552

4545:                                             ; preds = %4541
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %391, ptr noundef nonnull align 1 dereferenceable(18) @.str.1075, ptr noundef nonnull align 8 dereferenceable(32) %392, ptr noundef nonnull align 1 dereferenceable(18) @.str.1076, ptr noundef nonnull align 8 dereferenceable(32) %393, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %4546 unwind label %4556

4546:                                             ; preds = %4545
  %4547 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull align 8 dereferenceable(32) %391) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %393) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %393) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %392) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %392) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %391) #9
  br label %4588

4548:                                             ; preds = %4536
  %4549 = landingpad { ptr, i32 }
          cleanup
  %4550 = extractvalue { ptr, i32 } %4549, 0
  store ptr %4550, ptr %30, align 8
  %4551 = extractvalue { ptr, i32 } %4549, 1
  store i32 %4551, ptr %31, align 4
  br label %4561

4552:                                             ; preds = %4541
  %4553 = landingpad { ptr, i32 }
          cleanup
  %4554 = extractvalue { ptr, i32 } %4553, 0
  store ptr %4554, ptr %30, align 8
  %4555 = extractvalue { ptr, i32 } %4553, 1
  store i32 %4555, ptr %31, align 4
  br label %4560

4556:                                             ; preds = %4545
  %4557 = landingpad { ptr, i32 }
          cleanup
  %4558 = extractvalue { ptr, i32 } %4557, 0
  store ptr %4558, ptr %30, align 8
  %4559 = extractvalue { ptr, i32 } %4557, 1
  store i32 %4559, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %393) #9
  br label %4560

4560:                                             ; preds = %4556, %4552
  call void @llvm.lifetime.end.p0(i64 32, ptr %393) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %392) #9
  br label %4561

4561:                                             ; preds = %4560, %4548
  call void @llvm.lifetime.end.p0(i64 32, ptr %392) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %391) #9
  br label %4614

4562:                                             ; preds = %4531
  call void @llvm.lifetime.start.p0(i64 32, ptr %394) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %395) #9
  %4563 = load ptr, ptr %385, align 8, !tbaa !5
  %4564 = load ptr, ptr %448, align 8, !tbaa !197
  %4565 = getelementptr inbounds ptr, ptr %4564, i64 19
  %4566 = load ptr, ptr %4565, align 8
  invoke void %4566(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %395, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %4563, i32 noundef 0)
          to label %4567 unwind label %4574

4567:                                             ; preds = %4562
  call void @llvm.lifetime.start.p0(i64 32, ptr %396) #9
  %4568 = load ptr, ptr %5, align 8, !tbaa !5
  %4569 = getelementptr inbounds i32, ptr %4568, i64 2
  %4570 = load i32, ptr %4569, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %396, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4570, i1 noundef zeroext true)
          to label %4571 unwind label %4578

4571:                                             ; preds = %4567
  invoke void @_ZN11spirv_cross4joinIJRA9_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA27_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %394, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %395, ptr noundef nonnull align 1 dereferenceable(27) @.str.1078, ptr noundef nonnull align 8 dereferenceable(32) %396, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %4572 unwind label %4582

4572:                                             ; preds = %4571
  %4573 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull align 8 dereferenceable(32) %394) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %394) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %396) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %396) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %395) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %395) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %394) #9
  br label %4588

4574:                                             ; preds = %4562
  %4575 = landingpad { ptr, i32 }
          cleanup
  %4576 = extractvalue { ptr, i32 } %4575, 0
  store ptr %4576, ptr %30, align 8
  %4577 = extractvalue { ptr, i32 } %4575, 1
  store i32 %4577, ptr %31, align 4
  br label %4587

4578:                                             ; preds = %4567
  %4579 = landingpad { ptr, i32 }
          cleanup
  %4580 = extractvalue { ptr, i32 } %4579, 0
  store ptr %4580, ptr %30, align 8
  %4581 = extractvalue { ptr, i32 } %4579, 1
  store i32 %4581, ptr %31, align 4
  br label %4586

4582:                                             ; preds = %4571
  %4583 = landingpad { ptr, i32 }
          cleanup
  %4584 = extractvalue { ptr, i32 } %4583, 0
  store ptr %4584, ptr %30, align 8
  %4585 = extractvalue { ptr, i32 } %4583, 1
  store i32 %4585, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %396) #9
  br label %4586

4586:                                             ; preds = %4582, %4578
  call void @llvm.lifetime.end.p0(i64 32, ptr %396) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %395) #9
  br label %4587

4587:                                             ; preds = %4586, %4574
  call void @llvm.lifetime.end.p0(i64 32, ptr %395) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %394) #9
  br label %4614

4588:                                             ; preds = %4572, %4546
  br label %4589

4589:                                             ; preds = %4588, %4515
  %4590 = load ptr, ptr %5, align 8, !tbaa !5
  %4591 = getelementptr inbounds i32, ptr %4590, i64 0
  %4592 = load i32, ptr %4591, align 4, !tbaa !15
  %4593 = load ptr, ptr %5, align 8, !tbaa !5
  %4594 = getelementptr inbounds i32, ptr %4593, i64 1
  %4595 = load i32, ptr %4594, align 4, !tbaa !15
  %4596 = load ptr, ptr %5, align 8, !tbaa !5
  %4597 = getelementptr inbounds i32, ptr %4596, i64 2
  %4598 = load i32, ptr %4597, align 4, !tbaa !15
  %4599 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4598)
          to label %4600 unwind label %4610

4600:                                             ; preds = %4589
  %4601 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4592, i32 noundef %4595, ptr noundef nonnull align 8 dereferenceable(32) %387, i1 noundef zeroext %4599, i1 noundef zeroext false)
          to label %4602 unwind label %4610

4602:                                             ; preds = %4600
  %4603 = load ptr, ptr %5, align 8, !tbaa !5
  %4604 = getelementptr inbounds i32, ptr %4603, i64 1
  %4605 = load i32, ptr %4604, align 4, !tbaa !15
  %4606 = load ptr, ptr %5, align 8, !tbaa !5
  %4607 = getelementptr inbounds i32, ptr %4606, i64 2
  %4608 = load i32, ptr %4607, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4605, i32 noundef %4608)
          to label %4609 unwind label %4610

4609:                                             ; preds = %4602
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %387) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %387) #9
  br label %4617

4610:                                             ; preds = %4602, %4600, %4589
  %4611 = landingpad { ptr, i32 }
          cleanup
  %4612 = extractvalue { ptr, i32 } %4611, 0
  store ptr %4612, ptr %30, align 8
  %4613 = extractvalue { ptr, i32 } %4611, 1
  store i32 %4613, ptr %31, align 4
  br label %4614

4614:                                             ; preds = %4610, %4587, %4561, %4530
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %387) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %387) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %386) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %385) #9
  br label %5109

4615:                                             ; preds = %4490
  %4616 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %4616)
  br label %4617

4617:                                             ; preds = %4615, %4609
  store i32 2, ptr %217, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %386) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %385) #9
  br label %5106

4618:                                             ; preds = %2, %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %397) #9
  %4619 = load ptr, ptr %5, align 8, !tbaa !5
  %4620 = getelementptr inbounds i32, ptr %4619, i64 0
  %4621 = load i32, ptr %4620, align 4, !tbaa !15
  store i32 %4621, ptr %397, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %398) #9
  %4622 = load ptr, ptr %5, align 8, !tbaa !5
  %4623 = getelementptr inbounds i32, ptr %4622, i64 1
  %4624 = load i32, ptr %4623, align 4, !tbaa !15
  store i32 %4624, ptr %398, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %399) #9
  %4625 = load ptr, ptr %5, align 8, !tbaa !5
  %4626 = getelementptr inbounds i32, ptr %4625, i64 2
  %4627 = load i32, ptr %4626, align 4, !tbaa !15
  store i32 %4627, ptr %399, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %400) #9
  %4628 = load ptr, ptr %5, align 8, !tbaa !5
  %4629 = getelementptr inbounds i32, ptr %4628, i64 3
  %4630 = load i32, ptr %4629, align 4, !tbaa !15
  store i32 %4630, ptr %400, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %401) #9
  %4631 = load i32, ptr %399, align 4, !tbaa !15
  %4632 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4631)
  store ptr %4632, ptr %401, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %402) #9
  %4633 = load i32, ptr %400, align 4, !tbaa !15
  %4634 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4633)
  store ptr %4634, ptr %402, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %403) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %403) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %404) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %405) #9
  %4635 = load ptr, ptr %401, align 8, !tbaa !5
  %4636 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4635, i32 0, i32 4
  %4637 = load i32, ptr %4636, align 8, !tbaa !201
  store i32 %4637, ptr %405, align 4, !tbaa !15
  %4638 = load ptr, ptr %4, align 8, !tbaa !5
  %4639 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %4638, i32 0, i32 3
  %4640 = load i32, ptr %4639, align 4, !tbaa !200
  %4641 = icmp eq i32 %4640, 5
  br i1 %4641, label %4642, label %4712

4642:                                             ; preds = %4618
  %4643 = load ptr, ptr %5, align 8, !tbaa !5
  %4644 = getelementptr inbounds i32, ptr %4643, i64 4
  %4645 = load i32, ptr %4644, align 4, !tbaa !15
  %4646 = icmp eq i32 %4645, 0
  br i1 %4646, label %4647, label %4700

4647:                                             ; preds = %4642
  call void @llvm.lifetime.start.p0(i64 32, ptr %406) #9
  %4648 = load i32, ptr %6, align 4, !tbaa !13
  %4649 = icmp eq i32 %4648, 4450
  br i1 %4649, label %4653, label %4650

4650:                                             ; preds = %4647
  %4651 = load i32, ptr %6, align 4, !tbaa !13
  %4652 = icmp eq i32 %4651, 4452
  br label %4653

4653:                                             ; preds = %4650, %4647
  %4654 = phi i1 [ true, %4647 ], [ %4652, %4650 ]
  %4655 = zext i1 %4654 to i64
  %4656 = select i1 %4654, ptr @.str.1079, ptr @.str.1080
  call void @llvm.lifetime.start.p0(i64 1, ptr %407) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef %4656, ptr noundef nonnull align 1 dereferenceable(1) %407)
          to label %4657 unwind label %4672

4657:                                             ; preds = %4653
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %407) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %408) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %409) #9
  %4658 = load i32, ptr %399, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %409, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4658, i1 noundef zeroext true)
          to label %4659 unwind label %4676

4659:                                             ; preds = %4657
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %408, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %409, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %4660 unwind label %4680

4660:                                             ; preds = %4659
  %4661 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull align 8 dereferenceable(32) %408) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %408) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %409) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %409) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %408) #9
  %4662 = load i32, ptr %6, align 4, !tbaa !13
  %4663 = icmp eq i32 %4662, 4450
  %4664 = zext i1 %4663 to i64
  %4665 = select i1 %4663, ptr @.str.1079, ptr @.str.1080
  %4666 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef %4665)
          to label %4667 unwind label %4685

4667:                                             ; preds = %4660
  call void @llvm.lifetime.start.p0(i64 32, ptr %410) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %411) #9
  %4668 = load i32, ptr %400, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %411, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4668, i1 noundef zeroext true)
          to label %4669 unwind label %4689

4669:                                             ; preds = %4667
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %410, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %411, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %4670 unwind label %4693

4670:                                             ; preds = %4669
  %4671 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef nonnull align 8 dereferenceable(32) %410) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %411) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %411) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %410) #9
  store i32 4, ptr %405, align 4, !tbaa !15
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %406) #9
  br label %4711

4672:                                             ; preds = %4653
  %4673 = landingpad { ptr, i32 }
          cleanup
  %4674 = extractvalue { ptr, i32 } %4673, 0
  store ptr %4674, ptr %30, align 8
  %4675 = extractvalue { ptr, i32 } %4673, 1
  store i32 %4675, ptr %31, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %407) #9
  br label %4699

4676:                                             ; preds = %4657
  %4677 = landingpad { ptr, i32 }
          cleanup
  %4678 = extractvalue { ptr, i32 } %4677, 0
  store ptr %4678, ptr %30, align 8
  %4679 = extractvalue { ptr, i32 } %4677, 1
  store i32 %4679, ptr %31, align 4
  br label %4684

4680:                                             ; preds = %4659
  %4681 = landingpad { ptr, i32 }
          cleanup
  %4682 = extractvalue { ptr, i32 } %4681, 0
  store ptr %4682, ptr %30, align 8
  %4683 = extractvalue { ptr, i32 } %4681, 1
  store i32 %4683, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %409) #9
  br label %4684

4684:                                             ; preds = %4680, %4676
  call void @llvm.lifetime.end.p0(i64 32, ptr %409) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %408) #9
  br label %4698

4685:                                             ; preds = %4660
  %4686 = landingpad { ptr, i32 }
          cleanup
  %4687 = extractvalue { ptr, i32 } %4686, 0
  store ptr %4687, ptr %30, align 8
  %4688 = extractvalue { ptr, i32 } %4686, 1
  store i32 %4688, ptr %31, align 4
  br label %4698

4689:                                             ; preds = %4667
  %4690 = landingpad { ptr, i32 }
          cleanup
  %4691 = extractvalue { ptr, i32 } %4690, 0
  store ptr %4691, ptr %30, align 8
  %4692 = extractvalue { ptr, i32 } %4690, 1
  store i32 %4692, ptr %31, align 4
  br label %4697

4693:                                             ; preds = %4669
  %4694 = landingpad { ptr, i32 }
          cleanup
  %4695 = extractvalue { ptr, i32 } %4694, 0
  store ptr %4695, ptr %30, align 8
  %4696 = extractvalue { ptr, i32 } %4694, 1
  store i32 %4696, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %411) #9
  br label %4697

4697:                                             ; preds = %4693, %4689
  call void @llvm.lifetime.end.p0(i64 32, ptr %411) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %410) #9
  br label %4698

4698:                                             ; preds = %4697, %4685, %4684
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #9
  br label %4699

4699:                                             ; preds = %4698, %4672
  call void @llvm.lifetime.end.p0(i64 32, ptr %406) #9
  br label %4825

4700:                                             ; preds = %4642
  %4701 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4701, ptr noundef @.str.1081)
          to label %4702 unwind label %4703

4702:                                             ; preds = %4700
  invoke void @__cxa_throw(ptr %4701, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %5115 unwind label %4707

4703:                                             ; preds = %4700
  %4704 = landingpad { ptr, i32 }
          cleanup
  %4705 = extractvalue { ptr, i32 } %4704, 0
  store ptr %4705, ptr %30, align 8
  %4706 = extractvalue { ptr, i32 } %4704, 1
  store i32 %4706, ptr %31, align 4
  call void @__cxa_free_exception(ptr %4701) #9
  br label %4825

4707:                                             ; preds = %4702
  %4708 = landingpad { ptr, i32 }
          cleanup
  %4709 = extractvalue { ptr, i32 } %4708, 0
  store ptr %4709, ptr %30, align 8
  %4710 = extractvalue { ptr, i32 } %4708, 1
  store i32 %4710, ptr %31, align 4
  br label %4825

4711:                                             ; preds = %4670
  br label %4771

4712:                                             ; preds = %4618
  call void @llvm.lifetime.start.p0(i64 4, ptr %412) #9
  %4713 = load i32, ptr %6, align 4, !tbaa !13
  %4714 = icmp ne i32 %4713, 4451
  br i1 %4714, label %4715, label %4721

4715:                                             ; preds = %4712
  %4716 = load ptr, ptr %401, align 8, !tbaa !5
  %4717 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4716, i32 0, i32 3
  %4718 = load i32, ptr %4717, align 4, !tbaa !261
  %4719 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %4718)
          to label %4720 unwind label %4753

4720:                                             ; preds = %4715
  br label %4727

4721:                                             ; preds = %4712
  %4722 = load ptr, ptr %401, align 8, !tbaa !5
  %4723 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4722, i32 0, i32 3
  %4724 = load i32, ptr %4723, align 4, !tbaa !261
  %4725 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %4724)
          to label %4726 unwind label %4753

4726:                                             ; preds = %4721
  br label %4727

4727:                                             ; preds = %4726, %4720
  %4728 = phi i32 [ %4719, %4720 ], [ %4725, %4726 ]
  store i32 %4728, ptr %412, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %413) #9
  %4729 = load i32, ptr %6, align 4, !tbaa !13
  %4730 = icmp ne i32 %4729, 4450
  br i1 %4730, label %4731, label %4737

4731:                                             ; preds = %4727
  %4732 = load ptr, ptr %402, align 8, !tbaa !5
  %4733 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4732, i32 0, i32 3
  %4734 = load i32, ptr %4733, align 4, !tbaa !261
  %4735 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %4734)
          to label %4736 unwind label %4757

4736:                                             ; preds = %4731
  br label %4743

4737:                                             ; preds = %4727
  %4738 = load ptr, ptr %402, align 8, !tbaa !5
  %4739 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4738, i32 0, i32 3
  %4740 = load i32, ptr %4739, align 4, !tbaa !261
  %4741 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %4740)
          to label %4742 unwind label %4757

4742:                                             ; preds = %4737
  br label %4743

4743:                                             ; preds = %4742, %4736
  %4744 = phi i32 [ %4735, %4736 ], [ %4741, %4742 ]
  store i32 %4744, ptr %413, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %414) #9
  %4745 = load i32, ptr %412, align 4, !tbaa !16
  %4746 = load i32, ptr %399, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %414, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4745, i32 noundef %4746)
          to label %4747 unwind label %4761

4747:                                             ; preds = %4743
  %4748 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull align 8 dereferenceable(32) %414) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %414) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %414) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %415) #9
  %4749 = load i32, ptr %413, align 4, !tbaa !16
  %4750 = load i32, ptr %400, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %415, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4749, i32 noundef %4750)
          to label %4751 unwind label %4765

4751:                                             ; preds = %4747
  %4752 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef nonnull align 8 dereferenceable(32) %415) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %415) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %415) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %413) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %412) #9
  br label %4771

4753:                                             ; preds = %4721, %4715
  %4754 = landingpad { ptr, i32 }
          cleanup
  %4755 = extractvalue { ptr, i32 } %4754, 0
  store ptr %4755, ptr %30, align 8
  %4756 = extractvalue { ptr, i32 } %4754, 1
  store i32 %4756, ptr %31, align 4
  br label %4770

4757:                                             ; preds = %4737, %4731
  %4758 = landingpad { ptr, i32 }
          cleanup
  %4759 = extractvalue { ptr, i32 } %4758, 0
  store ptr %4759, ptr %30, align 8
  %4760 = extractvalue { ptr, i32 } %4758, 1
  store i32 %4760, ptr %31, align 4
  br label %4769

4761:                                             ; preds = %4743
  %4762 = landingpad { ptr, i32 }
          cleanup
  %4763 = extractvalue { ptr, i32 } %4762, 0
  store ptr %4763, ptr %30, align 8
  %4764 = extractvalue { ptr, i32 } %4762, 1
  store i32 %4764, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %414) #9
  br label %4769

4765:                                             ; preds = %4747
  %4766 = landingpad { ptr, i32 }
          cleanup
  %4767 = extractvalue { ptr, i32 } %4766, 0
  store ptr %4767, ptr %30, align 8
  %4768 = extractvalue { ptr, i32 } %4766, 1
  store i32 %4768, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %415) #9
  br label %4769

4769:                                             ; preds = %4765, %4761, %4757
  call void @llvm.lifetime.end.p0(i64 4, ptr %413) #9
  br label %4770

4770:                                             ; preds = %4769, %4753
  call void @llvm.lifetime.end.p0(i64 4, ptr %412) #9
  br label %4825

4771:                                             ; preds = %4751, %4711
  call void @llvm.lifetime.start.p0(i64 8, ptr %416) #9
  %4772 = load i32, ptr %397, align 4, !tbaa !15
  %4773 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4772)
          to label %4774 unwind label %4801

4774:                                             ; preds = %4771
  store ptr %4773, ptr %416, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %417) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %418) #9
  %4775 = load ptr, ptr %416, align 8, !tbaa !5
  %4776 = load ptr, ptr %448, align 8, !tbaa !197
  %4777 = getelementptr inbounds ptr, ptr %4776, i64 19
  %4778 = load ptr, ptr %4777, align 8
  invoke void %4778(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %418, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %4775, i32 noundef 0)
          to label %4779 unwind label %4805

4779:                                             ; preds = %4774
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %417, ptr noundef nonnull align 8 dereferenceable(32) %418, ptr noundef nonnull align 4 dereferenceable(4) %405)
          to label %4780 unwind label %4809

4780:                                             ; preds = %4779
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %418) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %418) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %419) #9
  invoke void @_ZN11spirv_cross4joinIJRA12_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA5_S1_SA_SC_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %419, ptr noundef nonnull align 1 dereferenceable(12) @.str.1082, ptr noundef nonnull align 8 dereferenceable(32) %417, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull align 1 dereferenceable(5) @.str.1083, ptr noundef nonnull align 8 dereferenceable(32) %417, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %4781 unwind label %4814

4781:                                             ; preds = %4780
  %4782 = load i32, ptr %397, align 4, !tbaa !15
  %4783 = load i32, ptr %398, align 4, !tbaa !15
  %4784 = load i32, ptr %399, align 4, !tbaa !15
  %4785 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4784)
          to label %4786 unwind label %4818

4786:                                             ; preds = %4781
  br i1 %4785, label %4787, label %4791

4787:                                             ; preds = %4786
  %4788 = load i32, ptr %400, align 4, !tbaa !15
  %4789 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4788)
          to label %4790 unwind label %4818

4790:                                             ; preds = %4787
  br label %4791

4791:                                             ; preds = %4790, %4786
  %4792 = phi i1 [ false, %4786 ], [ %4789, %4790 ]
  %4793 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4782, i32 noundef %4783, ptr noundef nonnull align 8 dereferenceable(32) %419, i1 noundef zeroext %4792, i1 noundef zeroext false)
          to label %4794 unwind label %4818

4794:                                             ; preds = %4791
  %4795 = load i32, ptr %398, align 4, !tbaa !15
  %4796 = load i32, ptr %399, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4795, i32 noundef %4796)
          to label %4797 unwind label %4818

4797:                                             ; preds = %4794
  %4798 = load i32, ptr %398, align 4, !tbaa !15
  %4799 = load i32, ptr %400, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4798, i32 noundef %4799)
          to label %4800 unwind label %4818

4800:                                             ; preds = %4797
  store i32 2, ptr %217, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %419) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %419) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %417) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %417) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %416) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %405) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %404) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %403) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %403) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %402) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %401) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %400) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %399) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %398) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %397) #9
  br label %5106

4801:                                             ; preds = %4771
  %4802 = landingpad { ptr, i32 }
          cleanup
  %4803 = extractvalue { ptr, i32 } %4802, 0
  store ptr %4803, ptr %30, align 8
  %4804 = extractvalue { ptr, i32 } %4802, 1
  store i32 %4804, ptr %31, align 4
  br label %4824

4805:                                             ; preds = %4774
  %4806 = landingpad { ptr, i32 }
          cleanup
  %4807 = extractvalue { ptr, i32 } %4806, 0
  store ptr %4807, ptr %30, align 8
  %4808 = extractvalue { ptr, i32 } %4806, 1
  store i32 %4808, ptr %31, align 4
  br label %4813

4809:                                             ; preds = %4779
  %4810 = landingpad { ptr, i32 }
          cleanup
  %4811 = extractvalue { ptr, i32 } %4810, 0
  store ptr %4811, ptr %30, align 8
  %4812 = extractvalue { ptr, i32 } %4810, 1
  store i32 %4812, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %418) #9
  br label %4813

4813:                                             ; preds = %4809, %4805
  call void @llvm.lifetime.end.p0(i64 32, ptr %418) #9
  br label %4823

4814:                                             ; preds = %4780
  %4815 = landingpad { ptr, i32 }
          cleanup
  %4816 = extractvalue { ptr, i32 } %4815, 0
  store ptr %4816, ptr %30, align 8
  %4817 = extractvalue { ptr, i32 } %4815, 1
  store i32 %4817, ptr %31, align 4
  br label %4822

4818:                                             ; preds = %4797, %4794, %4791, %4787, %4781
  %4819 = landingpad { ptr, i32 }
          cleanup
  %4820 = extractvalue { ptr, i32 } %4819, 0
  store ptr %4820, ptr %30, align 8
  %4821 = extractvalue { ptr, i32 } %4819, 1
  store i32 %4821, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %419) #9
  br label %4822

4822:                                             ; preds = %4818, %4814
  call void @llvm.lifetime.end.p0(i64 32, ptr %419) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %417) #9
  br label %4823

4823:                                             ; preds = %4822, %4813
  call void @llvm.lifetime.end.p0(i64 32, ptr %417) #9
  br label %4824

4824:                                             ; preds = %4823, %4801
  call void @llvm.lifetime.end.p0(i64 8, ptr %416) #9
  br label %4825

4825:                                             ; preds = %4824, %4770, %4707, %4703, %4699
  call void @llvm.lifetime.end.p0(i64 4, ptr %405) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %404) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %403) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %403) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %402) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %401) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %400) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %399) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %398) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %397) #9
  br label %5109

4826:                                             ; preds = %2, %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %420) #9
  %4827 = load ptr, ptr %5, align 8, !tbaa !5
  %4828 = getelementptr inbounds i32, ptr %4827, i64 0
  %4829 = load i32, ptr %4828, align 4, !tbaa !15
  store i32 %4829, ptr %420, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %421) #9
  %4830 = load ptr, ptr %5, align 8, !tbaa !5
  %4831 = getelementptr inbounds i32, ptr %4830, i64 1
  %4832 = load i32, ptr %4831, align 4, !tbaa !15
  store i32 %4832, ptr %421, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %422) #9
  %4833 = load ptr, ptr %5, align 8, !tbaa !5
  %4834 = getelementptr inbounds i32, ptr %4833, i64 2
  %4835 = load i32, ptr %4834, align 4, !tbaa !15
  store i32 %4835, ptr %422, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %423) #9
  %4836 = load ptr, ptr %5, align 8, !tbaa !5
  %4837 = getelementptr inbounds i32, ptr %4836, i64 3
  %4838 = load i32, ptr %4837, align 4, !tbaa !15
  store i32 %4838, ptr %423, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %424) #9
  %4839 = load ptr, ptr %5, align 8, !tbaa !5
  %4840 = getelementptr inbounds i32, ptr %4839, i64 4
  %4841 = load i32, ptr %4840, align 4, !tbaa !15
  store i32 %4841, ptr %424, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 336, ptr %425) #9
  %4842 = load i32, ptr %422, align 4, !tbaa !15
  %4843 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4842)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %425, ptr noundef nonnull align 8 dereferenceable(336) %4843)
  call void @llvm.lifetime.start.p0(i64 336, ptr %426) #9
  %4844 = load i32, ptr %423, align 4, !tbaa !15
  %4845 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4844)
          to label %4846 unwind label %4884

4846:                                             ; preds = %4826
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %426, ptr noundef nonnull align 8 dereferenceable(336) %4845)
          to label %4847 unwind label %4884

4847:                                             ; preds = %4846
  call void @llvm.lifetime.start.p0(i64 32, ptr %427) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %427) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %428) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %428) #9
  %4848 = load ptr, ptr %4, align 8, !tbaa !5
  %4849 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %4848, i32 0, i32 3
  %4850 = load i32, ptr %4849, align 4, !tbaa !200
  %4851 = icmp eq i32 %4850, 6
  br i1 %4851, label %4852, label %4928

4852:                                             ; preds = %4847
  %4853 = load ptr, ptr %5, align 8, !tbaa !5
  %4854 = getelementptr inbounds i32, ptr %4853, i64 5
  %4855 = load i32, ptr %4854, align 4, !tbaa !15
  %4856 = icmp eq i32 %4855, 0
  br i1 %4856, label %4857, label %4916

4857:                                             ; preds = %4852
  call void @llvm.lifetime.start.p0(i64 32, ptr %429) #9
  %4858 = load i32, ptr %6, align 4, !tbaa !13
  %4859 = icmp eq i32 %4858, 4453
  br i1 %4859, label %4863, label %4860

4860:                                             ; preds = %4857
  %4861 = load i32, ptr %6, align 4, !tbaa !13
  %4862 = icmp eq i32 %4861, 4455
  br label %4863

4863:                                             ; preds = %4860, %4857
  %4864 = phi i1 [ true, %4857 ], [ %4862, %4860 ]
  %4865 = zext i1 %4864 to i64
  %4866 = select i1 %4864, ptr @.str.1079, ptr @.str.1080
  call void @llvm.lifetime.start.p0(i64 1, ptr %430) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %430) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %429, ptr noundef %4866, ptr noundef nonnull align 1 dereferenceable(1) %430)
          to label %4867 unwind label %4888

4867:                                             ; preds = %4863
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %430) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %430) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %431) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %432) #9
  %4868 = load i32, ptr %422, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %432, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4868, i1 noundef zeroext true)
          to label %4869 unwind label %4892

4869:                                             ; preds = %4867
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %431, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %429, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %432, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %4870 unwind label %4896

4870:                                             ; preds = %4869
  %4871 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %427, ptr noundef nonnull align 8 dereferenceable(32) %431) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %431) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %432) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %432) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %431) #9
  %4872 = load i32, ptr %6, align 4, !tbaa !13
  %4873 = icmp eq i32 %4872, 4453
  %4874 = zext i1 %4873 to i64
  %4875 = select i1 %4873, ptr @.str.1079, ptr @.str.1080
  %4876 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %429, ptr noundef %4875)
          to label %4877 unwind label %4901

4877:                                             ; preds = %4870
  call void @llvm.lifetime.start.p0(i64 32, ptr %433) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %434) #9
  %4878 = load i32, ptr %423, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %434, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4878, i1 noundef zeroext true)
          to label %4879 unwind label %4905

4879:                                             ; preds = %4877
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %433, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %429, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %434, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %4880 unwind label %4909

4880:                                             ; preds = %4879
  %4881 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %428, ptr noundef nonnull align 8 dereferenceable(32) %433) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %433) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %434) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %434) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %433) #9
  %4882 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %425, i32 0, i32 4
  store i32 4, ptr %4882, align 8, !tbaa !201
  %4883 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %426, i32 0, i32 4
  store i32 4, ptr %4883, align 8, !tbaa !201
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %429) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %429) #9
  br label %4927

4884:                                             ; preds = %4846, %4826
  %4885 = landingpad { ptr, i32 }
          cleanup
  %4886 = extractvalue { ptr, i32 } %4885, 0
  store ptr %4886, ptr %30, align 8
  %4887 = extractvalue { ptr, i32 } %4885, 1
  store i32 %4887, ptr %31, align 4
  br label %5083

4888:                                             ; preds = %4863
  %4889 = landingpad { ptr, i32 }
          cleanup
  %4890 = extractvalue { ptr, i32 } %4889, 0
  store ptr %4890, ptr %30, align 8
  %4891 = extractvalue { ptr, i32 } %4889, 1
  store i32 %4891, ptr %31, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %430) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %430) #9
  br label %4915

4892:                                             ; preds = %4867
  %4893 = landingpad { ptr, i32 }
          cleanup
  %4894 = extractvalue { ptr, i32 } %4893, 0
  store ptr %4894, ptr %30, align 8
  %4895 = extractvalue { ptr, i32 } %4893, 1
  store i32 %4895, ptr %31, align 4
  br label %4900

4896:                                             ; preds = %4869
  %4897 = landingpad { ptr, i32 }
          cleanup
  %4898 = extractvalue { ptr, i32 } %4897, 0
  store ptr %4898, ptr %30, align 8
  %4899 = extractvalue { ptr, i32 } %4897, 1
  store i32 %4899, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %432) #9
  br label %4900

4900:                                             ; preds = %4896, %4892
  call void @llvm.lifetime.end.p0(i64 32, ptr %432) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %431) #9
  br label %4914

4901:                                             ; preds = %4870
  %4902 = landingpad { ptr, i32 }
          cleanup
  %4903 = extractvalue { ptr, i32 } %4902, 0
  store ptr %4903, ptr %30, align 8
  %4904 = extractvalue { ptr, i32 } %4902, 1
  store i32 %4904, ptr %31, align 4
  br label %4914

4905:                                             ; preds = %4877
  %4906 = landingpad { ptr, i32 }
          cleanup
  %4907 = extractvalue { ptr, i32 } %4906, 0
  store ptr %4907, ptr %30, align 8
  %4908 = extractvalue { ptr, i32 } %4906, 1
  store i32 %4908, ptr %31, align 4
  br label %4913

4909:                                             ; preds = %4879
  %4910 = landingpad { ptr, i32 }
          cleanup
  %4911 = extractvalue { ptr, i32 } %4910, 0
  store ptr %4911, ptr %30, align 8
  %4912 = extractvalue { ptr, i32 } %4910, 1
  store i32 %4912, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %434) #9
  br label %4913

4913:                                             ; preds = %4909, %4905
  call void @llvm.lifetime.end.p0(i64 32, ptr %434) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %433) #9
  br label %4914

4914:                                             ; preds = %4913, %4901, %4900
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %429) #9
  br label %4915

4915:                                             ; preds = %4914, %4888
  call void @llvm.lifetime.end.p0(i64 32, ptr %429) #9
  br label %5082

4916:                                             ; preds = %4852
  %4917 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4917, ptr noundef @.str.1081)
          to label %4918 unwind label %4919

4918:                                             ; preds = %4916
  invoke void @__cxa_throw(ptr %4917, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %5115 unwind label %4923

4919:                                             ; preds = %4916
  %4920 = landingpad { ptr, i32 }
          cleanup
  %4921 = extractvalue { ptr, i32 } %4920, 0
  store ptr %4921, ptr %30, align 8
  %4922 = extractvalue { ptr, i32 } %4920, 1
  store i32 %4922, ptr %31, align 4
  call void @__cxa_free_exception(ptr %4917) #9
  br label %5082

4923:                                             ; preds = %4918
  %4924 = landingpad { ptr, i32 }
          cleanup
  %4925 = extractvalue { ptr, i32 } %4924, 0
  store ptr %4925, ptr %30, align 8
  %4926 = extractvalue { ptr, i32 } %4924, 1
  store i32 %4926, ptr %31, align 4
  br label %5082

4927:                                             ; preds = %4880
  br label %4983

4928:                                             ; preds = %4847
  call void @llvm.lifetime.start.p0(i64 4, ptr %435) #9
  %4929 = load i32, ptr %6, align 4, !tbaa !13
  %4930 = icmp ne i32 %4929, 4454
  br i1 %4930, label %4931, label %4936

4931:                                             ; preds = %4928
  %4932 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %425, i32 0, i32 3
  %4933 = load i32, ptr %4932, align 4, !tbaa !261
  %4934 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %4933)
          to label %4935 unwind label %4965

4935:                                             ; preds = %4931
  br label %4941

4936:                                             ; preds = %4928
  %4937 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %425, i32 0, i32 3
  %4938 = load i32, ptr %4937, align 4, !tbaa !261
  %4939 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %4938)
          to label %4940 unwind label %4965

4940:                                             ; preds = %4936
  br label %4941

4941:                                             ; preds = %4940, %4935
  %4942 = phi i32 [ %4934, %4935 ], [ %4939, %4940 ]
  store i32 %4942, ptr %435, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %436) #9
  %4943 = load i32, ptr %6, align 4, !tbaa !13
  %4944 = icmp ne i32 %4943, 4453
  br i1 %4944, label %4945, label %4950

4945:                                             ; preds = %4941
  %4946 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %426, i32 0, i32 3
  %4947 = load i32, ptr %4946, align 4, !tbaa !261
  %4948 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %4947)
          to label %4949 unwind label %4969

4949:                                             ; preds = %4945
  br label %4955

4950:                                             ; preds = %4941
  %4951 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %426, i32 0, i32 3
  %4952 = load i32, ptr %4951, align 4, !tbaa !261
  %4953 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %4952)
          to label %4954 unwind label %4969

4954:                                             ; preds = %4950
  br label %4955

4955:                                             ; preds = %4954, %4949
  %4956 = phi i32 [ %4948, %4949 ], [ %4953, %4954 ]
  store i32 %4956, ptr %436, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %437) #9
  %4957 = load i32, ptr %435, align 4, !tbaa !16
  %4958 = load i32, ptr %422, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %437, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4957, i32 noundef %4958)
          to label %4959 unwind label %4973

4959:                                             ; preds = %4955
  %4960 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %427, ptr noundef nonnull align 8 dereferenceable(32) %437) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %437) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %437) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %438) #9
  %4961 = load i32, ptr %436, align 4, !tbaa !16
  %4962 = load i32, ptr %423, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %438, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %4961, i32 noundef %4962)
          to label %4963 unwind label %4977

4963:                                             ; preds = %4959
  %4964 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %428, ptr noundef nonnull align 8 dereferenceable(32) %438) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %438) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %438) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %436) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %435) #9
  br label %4983

4965:                                             ; preds = %4936, %4931
  %4966 = landingpad { ptr, i32 }
          cleanup
  %4967 = extractvalue { ptr, i32 } %4966, 0
  store ptr %4967, ptr %30, align 8
  %4968 = extractvalue { ptr, i32 } %4966, 1
  store i32 %4968, ptr %31, align 4
  br label %4982

4969:                                             ; preds = %4950, %4945
  %4970 = landingpad { ptr, i32 }
          cleanup
  %4971 = extractvalue { ptr, i32 } %4970, 0
  store ptr %4971, ptr %30, align 8
  %4972 = extractvalue { ptr, i32 } %4970, 1
  store i32 %4972, ptr %31, align 4
  br label %4981

4973:                                             ; preds = %4955
  %4974 = landingpad { ptr, i32 }
          cleanup
  %4975 = extractvalue { ptr, i32 } %4974, 0
  store ptr %4975, ptr %30, align 8
  %4976 = extractvalue { ptr, i32 } %4974, 1
  store i32 %4976, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %437) #9
  br label %4981

4977:                                             ; preds = %4959
  %4978 = landingpad { ptr, i32 }
          cleanup
  %4979 = extractvalue { ptr, i32 } %4978, 0
  store ptr %4979, ptr %30, align 8
  %4980 = extractvalue { ptr, i32 } %4978, 1
  store i32 %4980, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %438) #9
  br label %4981

4981:                                             ; preds = %4977, %4973, %4969
  call void @llvm.lifetime.end.p0(i64 4, ptr %436) #9
  br label %4982

4982:                                             ; preds = %4981, %4965
  call void @llvm.lifetime.end.p0(i64 4, ptr %435) #9
  br label %5082

4983:                                             ; preds = %4963, %4927
  call void @llvm.lifetime.start.p0(i64 8, ptr %439) #9
  %4984 = load i32, ptr %420, align 4, !tbaa !15
  %4985 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %4984)
          to label %4986 unwind label %5043

4986:                                             ; preds = %4983
  store ptr %4985, ptr %439, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %440) #9
  %4987 = load i32, ptr %6, align 4, !tbaa !13
  %4988 = icmp ne i32 %4987, 4454
  br i1 %4988, label %4989, label %4995

4989:                                             ; preds = %4986
  %4990 = load ptr, ptr %439, align 8, !tbaa !5
  %4991 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4990, i32 0, i32 3
  %4992 = load i32, ptr %4991, align 4, !tbaa !261
  %4993 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %4992)
          to label %4994 unwind label %5047

4994:                                             ; preds = %4989
  br label %5001

4995:                                             ; preds = %4986
  %4996 = load ptr, ptr %439, align 8, !tbaa !5
  %4997 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4996, i32 0, i32 3
  %4998 = load i32, ptr %4997, align 4, !tbaa !261
  %4999 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %4998)
          to label %5000 unwind label %5047

5000:                                             ; preds = %4995
  br label %5001

5001:                                             ; preds = %5000, %4994
  %5002 = phi i32 [ %4993, %4994 ], [ %4999, %5000 ]
  store i32 %5002, ptr %440, align 4, !tbaa !16
  %5003 = load i32, ptr %440, align 4, !tbaa !16
  %5004 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %425, i32 0, i32 2
  store i32 %5003, ptr %5004, align 8, !tbaa !18
  %5005 = load i32, ptr %440, align 4, !tbaa !16
  %5006 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %426, i32 0, i32 2
  store i32 %5005, ptr %5006, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 32, ptr %441) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %442) #9
  %5007 = load ptr, ptr %439, align 8, !tbaa !5
  %5008 = load ptr, ptr %448, align 8, !tbaa !197
  %5009 = getelementptr inbounds ptr, ptr %5008, i64 19
  %5010 = load ptr, ptr %5009, align 8
  invoke void %5010(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %442, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %5007, i32 noundef 0)
          to label %5011 unwind label %5051

5011:                                             ; preds = %5001
  call void @llvm.lifetime.start.p0(i64 32, ptr %443) #9
  %5012 = load ptr, ptr %448, align 8, !tbaa !197
  %5013 = getelementptr inbounds ptr, ptr %5012, i64 19
  %5014 = load ptr, ptr %5013, align 8
  invoke void %5014(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %443, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %425, i32 noundef 0)
          to label %5015 unwind label %5055

5015:                                             ; preds = %5011
  call void @llvm.lifetime.start.p0(i64 32, ptr %444) #9
  %5016 = load ptr, ptr %448, align 8, !tbaa !197
  %5017 = getelementptr inbounds ptr, ptr %5016, i64 19
  %5018 = load ptr, ptr %5017, align 8
  invoke void %5018(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %444, ptr noundef nonnull align 8 dereferenceable(12482) %448, ptr noundef nonnull align 8 dereferenceable(336) %426, i32 noundef 0)
          to label %5019 unwind label %5059

5019:                                             ; preds = %5015
  call void @llvm.lifetime.start.p0(i64 32, ptr %445) #9
  %5020 = load i32, ptr %440, align 4, !tbaa !16
  %5021 = load i32, ptr %424, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %445, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5020, i32 noundef %5021)
          to label %5022 unwind label %5063

5022:                                             ; preds = %5019
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcS6_RA2_S7_RS6_RA5_S7_S6_SB_SC_SE_S6_RA3_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %441, ptr noundef nonnull align 8 dereferenceable(32) %442, ptr noundef nonnull align 1 dereferenceable(20) @.str.1084, ptr noundef nonnull align 8 dereferenceable(32) %443, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %427, ptr noundef nonnull align 1 dereferenceable(5) @.str.1083, ptr noundef nonnull align 8 dereferenceable(32) %444, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %428, ptr noundef nonnull align 1 dereferenceable(5) @.str.1085, ptr noundef nonnull align 8 dereferenceable(32) %445, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %5023 unwind label %5067

5023:                                             ; preds = %5022
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %445) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %445) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %444) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %444) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %443) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %442) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %442) #9
  %5024 = load i32, ptr %420, align 4, !tbaa !15
  %5025 = load i32, ptr %421, align 4, !tbaa !15
  %5026 = load i32, ptr %422, align 4, !tbaa !15
  %5027 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5026)
          to label %5028 unwind label %5075

5028:                                             ; preds = %5023
  br i1 %5027, label %5029, label %5033

5029:                                             ; preds = %5028
  %5030 = load i32, ptr %423, align 4, !tbaa !15
  %5031 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5030)
          to label %5032 unwind label %5075

5032:                                             ; preds = %5029
  br label %5033

5033:                                             ; preds = %5032, %5028
  %5034 = phi i1 [ false, %5028 ], [ %5031, %5032 ]
  %5035 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5024, i32 noundef %5025, ptr noundef nonnull align 8 dereferenceable(32) %441, i1 noundef zeroext %5034, i1 noundef zeroext false)
          to label %5036 unwind label %5075

5036:                                             ; preds = %5033
  %5037 = load i32, ptr %421, align 4, !tbaa !15
  %5038 = load i32, ptr %422, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %5037, i32 noundef %5038)
          to label %5039 unwind label %5075

5039:                                             ; preds = %5036
  %5040 = load i32, ptr %421, align 4, !tbaa !15
  %5041 = load i32, ptr %423, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %448, i32 noundef %5040, i32 noundef %5041)
          to label %5042 unwind label %5075

5042:                                             ; preds = %5039
  store i32 2, ptr %217, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %441) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %441) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %440) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %439) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %428) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %428) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %427) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %427) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %426) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %426) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %425) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %425) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %424) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %423) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %422) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %421) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %420) #9
  br label %5106

5043:                                             ; preds = %4983
  %5044 = landingpad { ptr, i32 }
          cleanup
  %5045 = extractvalue { ptr, i32 } %5044, 0
  store ptr %5045, ptr %30, align 8
  %5046 = extractvalue { ptr, i32 } %5044, 1
  store i32 %5046, ptr %31, align 4
  br label %5081

5047:                                             ; preds = %4995, %4989
  %5048 = landingpad { ptr, i32 }
          cleanup
  %5049 = extractvalue { ptr, i32 } %5048, 0
  store ptr %5049, ptr %30, align 8
  %5050 = extractvalue { ptr, i32 } %5048, 1
  store i32 %5050, ptr %31, align 4
  br label %5080

5051:                                             ; preds = %5001
  %5052 = landingpad { ptr, i32 }
          cleanup
  %5053 = extractvalue { ptr, i32 } %5052, 0
  store ptr %5053, ptr %30, align 8
  %5054 = extractvalue { ptr, i32 } %5052, 1
  store i32 %5054, ptr %31, align 4
  br label %5074

5055:                                             ; preds = %5011
  %5056 = landingpad { ptr, i32 }
          cleanup
  %5057 = extractvalue { ptr, i32 } %5056, 0
  store ptr %5057, ptr %30, align 8
  %5058 = extractvalue { ptr, i32 } %5056, 1
  store i32 %5058, ptr %31, align 4
  br label %5073

5059:                                             ; preds = %5015
  %5060 = landingpad { ptr, i32 }
          cleanup
  %5061 = extractvalue { ptr, i32 } %5060, 0
  store ptr %5061, ptr %30, align 8
  %5062 = extractvalue { ptr, i32 } %5060, 1
  store i32 %5062, ptr %31, align 4
  br label %5072

5063:                                             ; preds = %5019
  %5064 = landingpad { ptr, i32 }
          cleanup
  %5065 = extractvalue { ptr, i32 } %5064, 0
  store ptr %5065, ptr %30, align 8
  %5066 = extractvalue { ptr, i32 } %5064, 1
  store i32 %5066, ptr %31, align 4
  br label %5071

5067:                                             ; preds = %5022
  %5068 = landingpad { ptr, i32 }
          cleanup
  %5069 = extractvalue { ptr, i32 } %5068, 0
  store ptr %5069, ptr %30, align 8
  %5070 = extractvalue { ptr, i32 } %5068, 1
  store i32 %5070, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %445) #9
  br label %5071

5071:                                             ; preds = %5067, %5063
  call void @llvm.lifetime.end.p0(i64 32, ptr %445) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %444) #9
  br label %5072

5072:                                             ; preds = %5071, %5059
  call void @llvm.lifetime.end.p0(i64 32, ptr %444) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #9
  br label %5073

5073:                                             ; preds = %5072, %5055
  call void @llvm.lifetime.end.p0(i64 32, ptr %443) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %442) #9
  br label %5074

5074:                                             ; preds = %5073, %5051
  call void @llvm.lifetime.end.p0(i64 32, ptr %442) #9
  br label %5079

5075:                                             ; preds = %5039, %5036, %5033, %5029, %5023
  %5076 = landingpad { ptr, i32 }
          cleanup
  %5077 = extractvalue { ptr, i32 } %5076, 0
  store ptr %5077, ptr %30, align 8
  %5078 = extractvalue { ptr, i32 } %5076, 1
  store i32 %5078, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %441) #9
  br label %5079

5079:                                             ; preds = %5075, %5074
  call void @llvm.lifetime.end.p0(i64 32, ptr %441) #9
  br label %5080

5080:                                             ; preds = %5079, %5047
  call void @llvm.lifetime.end.p0(i64 4, ptr %440) #9
  br label %5081

5081:                                             ; preds = %5080, %5043
  call void @llvm.lifetime.end.p0(i64 8, ptr %439) #9
  br label %5082

5082:                                             ; preds = %5081, %4982, %4923, %4919, %4915
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %428) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %428) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %427) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %427) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %426) #9
  br label %5083

5083:                                             ; preds = %5082, %4884
  call void @llvm.lifetime.end.p0(i64 336, ptr %426) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %425) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %425) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %424) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %423) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %422) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %421) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %420) #9
  br label %5109

5084:                                             ; preds = %2
  %5085 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 20
  %5086 = load i32, ptr %5085, align 8, !tbaa !262
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5086)
  call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %448, i8 noundef zeroext 76)
  call void @llvm.lifetime.start.p0(i64 32, ptr %446) #9
  %5087 = load ptr, ptr %5, align 8, !tbaa !5
  %5088 = getelementptr inbounds i32, ptr %5087, i64 0
  %5089 = load i32, ptr %5088, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %446, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5089, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %447) #9
  %5090 = load ptr, ptr %5, align 8, !tbaa !5
  %5091 = getelementptr inbounds i32, ptr %5090, i64 1
  %5092 = load i32, ptr %5091, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %447, ptr noundef nonnull align 8 dereferenceable(9848) %448, i32 noundef %5092, i1 noundef zeroext true)
          to label %5093 unwind label %5095

5093:                                             ; preds = %5084
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA61_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 1 dereferenceable(61) @.str.1086, ptr noundef nonnull align 8 dereferenceable(32) %446, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %447, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %5094 unwind label %5099

5094:                                             ; preds = %5093
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %447) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %447) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %446) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %446) #9
  br label %5106

5095:                                             ; preds = %5084
  %5096 = landingpad { ptr, i32 }
          cleanup
  %5097 = extractvalue { ptr, i32 } %5096, 0
  store ptr %5097, ptr %30, align 8
  %5098 = extractvalue { ptr, i32 } %5096, 1
  store i32 %5098, ptr %31, align 4
  br label %5103

5099:                                             ; preds = %5093
  %5100 = landingpad { ptr, i32 }
          cleanup
  %5101 = extractvalue { ptr, i32 } %5100, 0
  store ptr %5101, ptr %30, align 8
  %5102 = extractvalue { ptr, i32 } %5100, 1
  store i32 %5102, ptr %31, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %447) #9
  br label %5103

5103:                                             ; preds = %5099, %5095
  call void @llvm.lifetime.end.p0(i64 32, ptr %447) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %446) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %446) #9
  br label %5109

5104:                                             ; preds = %2
  %5105 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %448, ptr noundef nonnull align 4 dereferenceable(12) %5105)
  br label %5106

5106:                                             ; preds = %5104, %5094, %5042, %4800, %4617, %4469, %4449, %4430, %4410, %4394, %4339, %4284, %4229, %4174, %4119, %4064, %4009, %3954, %3899, %3844, %3789, %3725, %3700, %3675, %3650, %3592, %3539, %3513, %3462, %3433, %3384, %3341, %3328, %3315, %3302, %3289, %3279, %3269, %3264, %3254, %3203, %3156, %2966, %2839, %2826, %2676, %2662, %2563, %2542, %2541, %2461, %2438, %2418, %2304, %2249, %2195, %2049, %1819, %1642, %1488, %1438, %1412, %1386, %1360, %1334, %1308, %1282, %1256, %1233, %1183, %1162, %1125, %1102, %1101, %1062, %1023, %972, %954, %944, %926, %908, %889, %876, %863, %850, %837, %824, %811, %798, %785, %772, %759, %746, %733, %720, %704, %688, %675, %659, %643, %630, %614, %598, %585, %569, %553, %540, %524, %511, %495, %494
  %5107 = load i32, ptr %6, align 4, !tbaa !13
  %5108 = getelementptr inbounds %"class.spirv_cross::CompilerMSL", ptr %448, i32 0, i32 102
  store i32 %5107, ptr %5108, align 8, !tbaa !254
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  ret void

5109:                                             ; preds = %5103, %5083, %4825, %4614, %4470, %4458, %4431, %4419, %4393, %4371, %4338, %4316, %4283, %4261, %4228, %4206, %4173, %4151, %4118, %4096, %4063, %4041, %4008, %3986, %3953, %3931, %3898, %3876, %3843, %3821, %3788, %3766, %3734, %3709, %3684, %3659, %3631, %3550, %3543, %3535, %3528, %3486, %3473, %3458, %3451, %3402, %3263, %3227, %3157, %2952, %2795, %2663, %2513, %2447, %2419, %2328, %2273, %2218, %2061, %2054, %1821, %1643, %1484, %1158
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  br label %5110

5110:                                             ; preds = %5109
  %5111 = load ptr, ptr %30, align 8
  %5112 = load i32, ptr %31, align 4
  %5113 = insertvalue { ptr, i32 } poison, ptr %5111, 0
  %5114 = insertvalue { ptr, i32 } %5113, i32 %5112, 1
  resume { ptr, i32 } %5114

5115:                                             ; preds = %4918, %4702, %2182, %2136, %1854
  unreachable
}

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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) #6

declare void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #5

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef) #7

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(23), 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)) #2

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

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

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

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) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionEENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcS6_RA3_S7_S6_RA2_S7_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(8), 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)) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL16to_function_argsB5cxx11ERKNS_12CompilerGLSL24TextureFunctionArgumentsEPb(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(74), ptr noundef) unnamed_addr #2 align 2

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

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

declare void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #6

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) #5

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(21), 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)) #2

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind writable sret(%"struct.spirv_cross::SPIRType") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef, i1 noundef zeroext) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_RS9_SB_SC_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(16), 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(3), 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)) #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(18), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(18), 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)) #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(9), 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)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjEEES6_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 4 dereferenceable(4)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA12_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA5_S1_SA_SC_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(12), 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(5), 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(3)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcS6_RA2_S7_RS6_RA5_S7_S6_SB_SC_SE_S6_RA3_S7_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(20), 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(5), 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(5), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #2

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

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

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

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


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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.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.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 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.290 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.945 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.946 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.947 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.948 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.949 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.950 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.951 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.952 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.953 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.954 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.955 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.956 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.957 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.958 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.959 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.961 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.962 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.963 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.964 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.966 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.967 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.969 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.970 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.971 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.972 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.973 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.974 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.977 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.978 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.979 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.980 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.981 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.982 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.983 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.984 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.985 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.986 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.987 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.988 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.989 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.990 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.991 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.992 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.993 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.994 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.995 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.996 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.997 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.998 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.999 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1000 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionE = external hidden unnamed_addr constant [77 x i8], align 1
@.str.1001 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1002 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1003 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1004 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1005 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1006 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1007 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1008 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1009 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1010 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1011 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1012 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1013 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1014 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1015 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1016 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1017 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1018 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1019 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1020 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1021 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1022 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1023 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1024 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1025 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1026 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1027 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1028 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1029 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1030 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1031 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.1032 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1033 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1034 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1035 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1036 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1037 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.1038 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1039 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1040 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1041 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1042 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1043 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1044 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1045 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1046 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1047 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1048 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1049 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1050 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1051 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.1052 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1053 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1054 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1055 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1056 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1057 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1058 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1059 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1060 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1061 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1062 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1063 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1064 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1065 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1066 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1067 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1068 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1069 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1070 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1071 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1072 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1073 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1074 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1075 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1076 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1077 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1078 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1079 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1080 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1081 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.1082 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1083 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1084 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1085 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1086 = external hidden unnamed_addr constant [61 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #4

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

; 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 nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(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

declare void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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 #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(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 #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

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

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

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

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

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

; 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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) local_unnamed_addr #5

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

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

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

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 #4

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 #4

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

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 #4

declare void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #4

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

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

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

declare noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.spirv_cross::TypedID.413", align 4
  %4 = alloca %"class.spirv_cross::TypedID.413", align 4
  %5 = alloca %"class.spirv_cross::TypedID.413", align 4
  %6 = alloca %"class.spirv_cross::TypedID.413", align 4
  %7 = alloca %"class.spirv_cross::TypedID.413", align 4
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %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 i8, align 1
  %17 = alloca i32, align 4
  %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 i8, align 1
  %22 = alloca %"class.spirv_cross::TypedID.413", align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca %class.anon.568, align 8
  %30 = alloca %"struct.spirv_cross::SPIRType", align 8
  %31 = alloca %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", align 8
  %32 = alloca %"class.spirv_cross::TypedID.350", align 4
  %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.spirv_cross::TypedID.413", align 4
  %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.spirv_cross::TypedID.413", align 4
  %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 i32, align 4
  %125 = alloca %"class.std::__cxx11::basic_string", align 8
  %126 = alloca %"class.std::__cxx11::basic_string", align 8
  %127 = alloca %"struct.spirv_cross::SPIRType", 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 i32, align 4
  %132 = alloca i32, align 4
  %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::allocator.71", align 1
  %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
  %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 %"class.std::__cxx11::basic_string", 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 %"class.std::__cxx11::basic_string", align 8
  %188 = alloca %"class.std::__cxx11::basic_string", align 8
  %189 = alloca %"class.std::__cxx11::basic_string", align 8
  %190 = alloca %"class.std::__cxx11::basic_string", 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
  %194 = alloca %"class.std::__cxx11::basic_string", align 8
  %195 = alloca %"class.std::__cxx11::basic_string", align 8
  %196 = alloca %"class.std::__cxx11::basic_string", align 8
  %197 = alloca %"class.std::__cxx11::basic_string", align 8
  %198 = alloca %"class.std::__cxx11::basic_string", align 8
  %199 = alloca %"class.std::__cxx11::basic_string", align 8
  %200 = alloca %"class.std::__cxx11::basic_string", align 8
  %201 = alloca %"class.std::__cxx11::basic_string", align 8
  %202 = alloca %"class.std::__cxx11::basic_string", align 8
  %203 = alloca %"class.std::__cxx11::basic_string", align 8
  %204 = alloca %"class.std::__cxx11::basic_string", align 8
  %205 = alloca %"class.std::__cxx11::basic_string", align 8
  %206 = alloca %"class.std::__cxx11::basic_string", align 8
  %207 = alloca %"class.std::__cxx11::basic_string", align 8
  %208 = alloca %"class.std::__cxx11::basic_string", align 8
  %209 = alloca %"class.std::__cxx11::basic_string", align 8
  %210 = alloca %"class.std::__cxx11::basic_string", align 8
  %211 = alloca %"class.std::__cxx11::basic_string", align 8
  %212 = alloca %"class.std::__cxx11::basic_string", align 8
  %213 = alloca %"class.std::__cxx11::basic_string", align 8
  %214 = alloca %"class.std::__cxx11::basic_string", align 8
  %215 = alloca %"class.std::__cxx11::basic_string", align 8
  %216 = alloca %"class.std::__cxx11::basic_string", align 8
  %217 = alloca %"class.std::__cxx11::basic_string", align 8
  %218 = alloca %"class.std::__cxx11::basic_string", align 8
  %219 = alloca %"class.std::__cxx11::basic_string", align 8
  %220 = alloca %"class.std::__cxx11::basic_string", align 8
  %221 = alloca %"class.std::__cxx11::basic_string", align 8
  %222 = alloca %"class.std::__cxx11::basic_string", align 8
  %223 = alloca %"class.std::__cxx11::basic_string", align 8
  %224 = alloca %"class.std::__cxx11::basic_string", align 8
  %225 = alloca i32, align 4
  %226 = alloca %"class.std::__cxx11::basic_string", align 8
  %227 = alloca %"class.std::allocator.71", align 1
  %228 = alloca %"class.std::__cxx11::basic_string", align 8
  %229 = alloca %"class.std::__cxx11::basic_string", align 8
  %230 = alloca %"class.std::__cxx11::basic_string", align 8
  %231 = alloca %"class.std::__cxx11::basic_string", align 8
  %232 = alloca %"class.std::__cxx11::basic_string", align 8
  %233 = alloca %"class.std::__cxx11::basic_string", align 8
  %234 = alloca %"class.std::__cxx11::basic_string", align 8
  %235 = alloca %"class.std::__cxx11::basic_string", align 8
  %236 = alloca %"class.std::__cxx11::basic_string", align 8
  %237 = alloca %"struct.spirv_cross::SPIRType", align 8
  %238 = alloca %"struct.spirv_cross::SPIRType", align 8
  %239 = alloca %"class.std::__cxx11::basic_string", align 8
  %240 = alloca %"class.std::__cxx11::basic_string", align 8
  %241 = alloca %"class.std::__cxx11::basic_string", align 8
  %242 = alloca %"class.std::allocator.71", align 1
  %243 = alloca %"class.std::__cxx11::basic_string", align 8
  %244 = alloca %"class.std::__cxx11::basic_string", align 8
  %245 = alloca %"class.std::__cxx11::basic_string", align 8
  %246 = alloca %"class.std::__cxx11::basic_string", align 8
  %247 = alloca %"class.std::__cxx11::basic_string", align 8
  %248 = alloca %"class.std::__cxx11::basic_string", align 8
  %249 = alloca %"class.std::__cxx11::basic_string", align 8
  %250 = alloca %"class.std::__cxx11::basic_string", align 8
  %251 = alloca %"class.std::__cxx11::basic_string", align 8
  %252 = alloca %"class.std::__cxx11::basic_string", align 8
  %253 = alloca %"class.std::__cxx11::basic_string", align 8
  %254 = alloca %"class.std::__cxx11::basic_string", align 8
  %255 = alloca %"class.std::__cxx11::basic_string", align 8
  %256 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %257 = load i16, ptr %1, align 4, !tbaa !5
  %258 = zext i16 %257 to i32
  %259 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %258)
  %260 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %261 = tail call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %260)
  %262 = tail call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %260)
  switch i32 %259, label %2873 [
    i32 61, label %263
    i32 170, label %280
    i32 164, label %289
    i32 180, label %289
    i32 171, label %297
    i32 165, label %306
    i32 182, label %306
    i32 172, label %314
    i32 173, label %323
    i32 186, label %332
    i32 174, label %340
    i32 175, label %349
    i32 190, label %358
    i32 176, label %366
    i32 177, label %375
    i32 184, label %384
    i32 178, label %392
    i32 179, label %401
    i32 188, label %410
    i32 181, label %418
    i32 183, label %426
    i32 187, label %434
    i32 191, label %442
    i32 185, label %450
    i32 189, label %458
    i32 401, label %466
    i32 402, label %474
    i32 403, label %482
    i32 207, label %490
    i32 210, label %490
    i32 213, label %490
    i32 208, label %497
    i32 211, label %497
    i32 214, label %497
    i32 209, label %504
    i32 215, label %504
    i32 212, label %504
    i32 201, label %511
    i32 202, label %523
    i32 203, label %533
    i32 204, label %543
    i32 205, label %549
    i32 140, label %559
    i32 133, label %567
    i32 129, label %591
    i32 131, label %615
    i32 229, label %639
    i32 230, label %649
    i32 231, label %663
    i32 227, label %668
    i32 228, label %677
    i32 232, label %688
    i32 233, label %696
    i32 234, label %704
    i32 6035, label %704
    i32 235, label %714
    i32 236, label %724
    i32 237, label %724
    i32 238, label %734
    i32 239, label %734
    i32 240, label %744
    i32 241, label %754
    i32 242, label %764
    i32 98, label %774
    i32 60, label %802
    i32 99, label %882
    i32 104, label %972
    i32 103, label %972
    i32 105, label %1117
    i32 106, label %1217
    i32 107, label %1249
    i32 100, label %1281
    i32 116, label %1327
    i32 66, label %1343
    i32 65, label %1343
    i32 67, label %1343
    i32 62, label %1352
    i32 225, label %1391
    i32 224, label %1395
    i32 147, label %1404
    i32 144, label %1459
    i32 145, label %1459
    i32 146, label %1549
    i32 149, label %1626
    i32 150, label %1626
    i32 151, label %1739
    i32 152, label %1739
    i32 68, label %1780
    i32 4421, label %1801
    i32 4422, label %1801
    i32 4432, label %1801
    i32 4428, label %1801
    i32 4429, label %1801
    i32 4430, label %1801
    i32 5585, label %1805
    i32 5586, label %1811
    i32 5587, label %1817
    i32 5588, label %1817
    i32 5589, label %1825
    i32 5590, label %1825
    i32 5591, label %1833
    i32 5592, label %1833
    i32 5593, label %1841
    i32 5594, label %1841
    i32 5595, label %1849
    i32 5596, label %1849
    i32 5597, label %1857
    i32 5598, label %1882
    i32 5380, label %1907
    i32 5381, label %1916
    i32 5364, label %1953
    i32 5365, label %1953
    i32 4447, label %1961
    i32 6021, label %1966
    i32 4473, label %1971
    i32 4477, label %2020
    i32 6016, label %2036
    i32 6030, label %2051
    i32 6029, label %2066
    i32 6020, label %2081
    i32 6019, label %2112
    i32 6024, label %2143
    i32 6023, label %2174
    i32 6022, label %2205
    i32 6028, label %2236
    i32 6027, label %2267
    i32 6031, label %2298
    i32 6032, label %2329
    i32 6025, label %2360
    i32 4479, label %2391
    i32 6018, label %2422
    i32 6026, label %2453
    i32 4476, label %2468
    i32 4475, label %2475
    i32 4474, label %2488
    i32 117, label %2495
    i32 120, label %2495
    i32 124, label %2495
    i32 4450, label %2585
    i32 4451, label %2585
    i32 4452, label %2585
    i32 4453, label %2706
    i32 4454, label %2706
    i32 4455, label %2706
    i32 5295, label %2860
  ]

263:                                              ; preds = %2
  %264 = getelementptr inbounds i8, ptr %256, i64 4
  %265 = load i32, ptr %264, align 4, !tbaa !11
  %266 = getelementptr inbounds i8, ptr %256, i64 8
  %267 = load i32, ptr %266, align 4, !tbaa !11
  %268 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br i1 %268, label %269, label %273

269:                                              ; preds = %263
  %270 = load i32, ptr %256, align 4, !tbaa !11
  %271 = tail call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL25emit_tessellation_io_loadEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %270, i32 noundef %265, i32 noundef %267)
  br i1 %271, label %2874, label %272

272:                                              ; preds = %269
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

273:                                              ; preds = %263
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %3, i32 noundef %267)
  %274 = load i32, ptr %3, align 4
  %275 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %274, i32 noundef 11)
  %276 = icmp eq i32 %275, 20
  br i1 %276, label %277, label %279

277:                                              ; preds = %273
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %4, i32 noundef %265)
  %278 = load i32, ptr %4, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %278, i32 noundef 11, i32 noundef 20)
  br label %279

279:                                              ; preds = %277, %273
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

280:                                              ; preds = %2
  %281 = load i32, ptr %256, align 4, !tbaa !11
  %282 = getelementptr inbounds i8, ptr %256, i64 4
  %283 = load i32, ptr %282, align 4, !tbaa !11
  %284 = getelementptr inbounds i8, ptr %256, i64 8
  %285 = load i32, ptr %284, align 4, !tbaa !11
  %286 = getelementptr inbounds i8, ptr %256, i64 12
  %287 = load i32, ptr %286, align 4, !tbaa !11
  %288 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 170)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %281, i32 noundef %283, i32 noundef %285, i32 noundef %287, ptr noundef nonnull @.str.945, i32 noundef %261, i1 noundef zeroext %288, i1 noundef zeroext false)
  br label %2874

289:                                              ; preds = %2, %2
  %290 = load i32, ptr %256, align 4, !tbaa !11
  %291 = getelementptr inbounds i8, ptr %256, i64 4
  %292 = load i32, ptr %291, align 4, !tbaa !11
  %293 = getelementptr inbounds i8, ptr %256, i64 8
  %294 = load i32, ptr %293, align 4, !tbaa !11
  %295 = getelementptr inbounds i8, ptr %256, i64 12
  %296 = load i32, ptr %295, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %290, i32 noundef %292, i32 noundef %294, i32 noundef %296, ptr noundef nonnull @.str.945)
  br label %2874

297:                                              ; preds = %2
  %298 = load i32, ptr %256, align 4, !tbaa !11
  %299 = getelementptr inbounds i8, ptr %256, i64 4
  %300 = load i32, ptr %299, align 4, !tbaa !11
  %301 = getelementptr inbounds i8, ptr %256, i64 8
  %302 = load i32, ptr %301, align 4, !tbaa !11
  %303 = getelementptr inbounds i8, ptr %256, i64 12
  %304 = load i32, ptr %303, align 4, !tbaa !11
  %305 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 171)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %298, i32 noundef %300, i32 noundef %302, i32 noundef %304, ptr noundef nonnull @.str.946, i32 noundef %261, i1 noundef zeroext %305, i1 noundef zeroext false)
  br label %2874

306:                                              ; preds = %2, %2
  %307 = load i32, ptr %256, align 4, !tbaa !11
  %308 = getelementptr inbounds i8, ptr %256, i64 4
  %309 = load i32, ptr %308, align 4, !tbaa !11
  %310 = getelementptr inbounds i8, ptr %256, i64 8
  %311 = load i32, ptr %310, align 4, !tbaa !11
  %312 = getelementptr inbounds i8, ptr %256, i64 12
  %313 = load i32, ptr %312, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %307, i32 noundef %309, i32 noundef %311, i32 noundef %313, ptr noundef nonnull @.str.946)
  br label %2874

314:                                              ; preds = %2
  %315 = load i32, ptr %256, align 4, !tbaa !11
  %316 = getelementptr inbounds i8, ptr %256, i64 4
  %317 = load i32, ptr %316, align 4, !tbaa !11
  %318 = getelementptr inbounds i8, ptr %256, i64 8
  %319 = load i32, ptr %318, align 4, !tbaa !11
  %320 = getelementptr inbounds i8, ptr %256, i64 12
  %321 = load i32, ptr %320, align 4, !tbaa !11
  %322 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 172)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %315, i32 noundef %317, i32 noundef %319, i32 noundef %321, ptr noundef nonnull @.str.290, i32 noundef %262, i1 noundef zeroext %322, i1 noundef zeroext false)
  br label %2874

323:                                              ; preds = %2
  %324 = load i32, ptr %256, align 4, !tbaa !11
  %325 = getelementptr inbounds i8, ptr %256, i64 4
  %326 = load i32, ptr %325, align 4, !tbaa !11
  %327 = getelementptr inbounds i8, ptr %256, i64 8
  %328 = load i32, ptr %327, align 4, !tbaa !11
  %329 = getelementptr inbounds i8, ptr %256, i64 12
  %330 = load i32, ptr %329, align 4, !tbaa !11
  %331 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 173)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %324, i32 noundef %326, i32 noundef %328, i32 noundef %330, ptr noundef nonnull @.str.290, i32 noundef %261, i1 noundef zeroext %331, i1 noundef zeroext false)
  br label %2874

332:                                              ; preds = %2
  %333 = load i32, ptr %256, align 4, !tbaa !11
  %334 = getelementptr inbounds i8, ptr %256, i64 4
  %335 = load i32, ptr %334, align 4, !tbaa !11
  %336 = getelementptr inbounds i8, ptr %256, i64 8
  %337 = load i32, ptr %336, align 4, !tbaa !11
  %338 = getelementptr inbounds i8, ptr %256, i64 12
  %339 = load i32, ptr %338, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %333, i32 noundef %335, i32 noundef %337, i32 noundef %339, ptr noundef nonnull @.str.290)
  br label %2874

340:                                              ; preds = %2
  %341 = load i32, ptr %256, align 4, !tbaa !11
  %342 = getelementptr inbounds i8, ptr %256, i64 4
  %343 = load i32, ptr %342, align 4, !tbaa !11
  %344 = getelementptr inbounds i8, ptr %256, i64 8
  %345 = load i32, ptr %344, align 4, !tbaa !11
  %346 = getelementptr inbounds i8, ptr %256, i64 12
  %347 = load i32, ptr %346, align 4, !tbaa !11
  %348 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 174)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %341, i32 noundef %343, i32 noundef %345, i32 noundef %347, ptr noundef nonnull @.str.947, i32 noundef %262, i1 noundef zeroext %348, i1 noundef zeroext false)
  br label %2874

349:                                              ; preds = %2
  %350 = load i32, ptr %256, align 4, !tbaa !11
  %351 = getelementptr inbounds i8, ptr %256, i64 4
  %352 = load i32, ptr %351, align 4, !tbaa !11
  %353 = getelementptr inbounds i8, ptr %256, i64 8
  %354 = load i32, ptr %353, align 4, !tbaa !11
  %355 = getelementptr inbounds i8, ptr %256, i64 12
  %356 = load i32, ptr %355, align 4, !tbaa !11
  %357 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 175)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %350, i32 noundef %352, i32 noundef %354, i32 noundef %356, ptr noundef nonnull @.str.947, i32 noundef %261, i1 noundef zeroext %357, i1 noundef zeroext false)
  br label %2874

358:                                              ; preds = %2
  %359 = load i32, ptr %256, align 4, !tbaa !11
  %360 = getelementptr inbounds i8, ptr %256, i64 4
  %361 = load i32, ptr %360, align 4, !tbaa !11
  %362 = getelementptr inbounds i8, ptr %256, i64 8
  %363 = load i32, ptr %362, align 4, !tbaa !11
  %364 = getelementptr inbounds i8, ptr %256, i64 12
  %365 = load i32, ptr %364, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %359, i32 noundef %361, i32 noundef %363, i32 noundef %365, ptr noundef nonnull @.str.947)
  br label %2874

366:                                              ; preds = %2
  %367 = load i32, ptr %256, align 4, !tbaa !11
  %368 = getelementptr inbounds i8, ptr %256, i64 4
  %369 = load i32, ptr %368, align 4, !tbaa !11
  %370 = getelementptr inbounds i8, ptr %256, i64 8
  %371 = load i32, ptr %370, align 4, !tbaa !11
  %372 = getelementptr inbounds i8, ptr %256, i64 12
  %373 = load i32, ptr %372, align 4, !tbaa !11
  %374 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 176)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %367, i32 noundef %369, i32 noundef %371, i32 noundef %373, ptr noundef nonnull @.str.948, i32 noundef %262, i1 noundef zeroext %374, i1 noundef zeroext false)
  br label %2874

375:                                              ; preds = %2
  %376 = load i32, ptr %256, align 4, !tbaa !11
  %377 = getelementptr inbounds i8, ptr %256, i64 4
  %378 = load i32, ptr %377, align 4, !tbaa !11
  %379 = getelementptr inbounds i8, ptr %256, i64 8
  %380 = load i32, ptr %379, align 4, !tbaa !11
  %381 = getelementptr inbounds i8, ptr %256, i64 12
  %382 = load i32, ptr %381, align 4, !tbaa !11
  %383 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 177)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %376, i32 noundef %378, i32 noundef %380, i32 noundef %382, ptr noundef nonnull @.str.948, i32 noundef %261, i1 noundef zeroext %383, i1 noundef zeroext false)
  br label %2874

384:                                              ; preds = %2
  %385 = load i32, ptr %256, align 4, !tbaa !11
  %386 = getelementptr inbounds i8, ptr %256, i64 4
  %387 = load i32, ptr %386, align 4, !tbaa !11
  %388 = getelementptr inbounds i8, ptr %256, i64 8
  %389 = load i32, ptr %388, align 4, !tbaa !11
  %390 = getelementptr inbounds i8, ptr %256, i64 12
  %391 = load i32, ptr %390, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %385, i32 noundef %387, i32 noundef %389, i32 noundef %391, ptr noundef nonnull @.str.948)
  br label %2874

392:                                              ; preds = %2
  %393 = load i32, ptr %256, align 4, !tbaa !11
  %394 = getelementptr inbounds i8, ptr %256, i64 4
  %395 = load i32, ptr %394, align 4, !tbaa !11
  %396 = getelementptr inbounds i8, ptr %256, i64 8
  %397 = load i32, ptr %396, align 4, !tbaa !11
  %398 = getelementptr inbounds i8, ptr %256, i64 12
  %399 = load i32, ptr %398, align 4, !tbaa !11
  %400 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 178)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %393, i32 noundef %395, i32 noundef %397, i32 noundef %399, ptr noundef nonnull @.str.949, i32 noundef %262, i1 noundef zeroext %400, i1 noundef zeroext false)
  br label %2874

401:                                              ; preds = %2
  %402 = load i32, ptr %256, align 4, !tbaa !11
  %403 = getelementptr inbounds i8, ptr %256, i64 4
  %404 = load i32, ptr %403, align 4, !tbaa !11
  %405 = getelementptr inbounds i8, ptr %256, i64 8
  %406 = load i32, ptr %405, align 4, !tbaa !11
  %407 = getelementptr inbounds i8, ptr %256, i64 12
  %408 = load i32, ptr %407, align 4, !tbaa !11
  %409 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 179)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %402, i32 noundef %404, i32 noundef %406, i32 noundef %408, ptr noundef nonnull @.str.949, i32 noundef %261, i1 noundef zeroext %409, i1 noundef zeroext false)
  br label %2874

410:                                              ; preds = %2
  %411 = load i32, ptr %256, align 4, !tbaa !11
  %412 = getelementptr inbounds i8, ptr %256, i64 4
  %413 = load i32, ptr %412, align 4, !tbaa !11
  %414 = getelementptr inbounds i8, ptr %256, i64 8
  %415 = load i32, ptr %414, align 4, !tbaa !11
  %416 = getelementptr inbounds i8, ptr %256, i64 12
  %417 = load i32, ptr %416, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %411, i32 noundef %413, i32 noundef %415, i32 noundef %417, ptr noundef nonnull @.str.949)
  br label %2874

418:                                              ; preds = %2
  %419 = load i32, ptr %256, align 4, !tbaa !11
  %420 = getelementptr inbounds i8, ptr %256, i64 4
  %421 = load i32, ptr %420, align 4, !tbaa !11
  %422 = getelementptr inbounds i8, ptr %256, i64 8
  %423 = load i32, ptr %422, align 4, !tbaa !11
  %424 = getelementptr inbounds i8, ptr %256, i64 12
  %425 = load i32, ptr %424, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %419, i32 noundef %421, i32 noundef %423, i32 noundef %425, ptr noundef nonnull @.str.945)
  br label %2874

426:                                              ; preds = %2
  %427 = load i32, ptr %256, align 4, !tbaa !11
  %428 = getelementptr inbounds i8, ptr %256, i64 4
  %429 = load i32, ptr %428, align 4, !tbaa !11
  %430 = getelementptr inbounds i8, ptr %256, i64 8
  %431 = load i32, ptr %430, align 4, !tbaa !11
  %432 = getelementptr inbounds i8, ptr %256, i64 12
  %433 = load i32, ptr %432, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %427, i32 noundef %429, i32 noundef %431, i32 noundef %433, ptr noundef nonnull @.str.946)
  br label %2874

434:                                              ; preds = %2
  %435 = load i32, ptr %256, align 4, !tbaa !11
  %436 = getelementptr inbounds i8, ptr %256, i64 4
  %437 = load i32, ptr %436, align 4, !tbaa !11
  %438 = getelementptr inbounds i8, ptr %256, i64 8
  %439 = load i32, ptr %438, align 4, !tbaa !11
  %440 = getelementptr inbounds i8, ptr %256, i64 12
  %441 = load i32, ptr %440, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %435, i32 noundef %437, i32 noundef %439, i32 noundef %441, ptr noundef nonnull @.str.290)
  br label %2874

442:                                              ; preds = %2
  %443 = load i32, ptr %256, align 4, !tbaa !11
  %444 = getelementptr inbounds i8, ptr %256, i64 4
  %445 = load i32, ptr %444, align 4, !tbaa !11
  %446 = getelementptr inbounds i8, ptr %256, i64 8
  %447 = load i32, ptr %446, align 4, !tbaa !11
  %448 = getelementptr inbounds i8, ptr %256, i64 12
  %449 = load i32, ptr %448, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %443, i32 noundef %445, i32 noundef %447, i32 noundef %449, ptr noundef nonnull @.str.947)
  br label %2874

450:                                              ; preds = %2
  %451 = load i32, ptr %256, align 4, !tbaa !11
  %452 = getelementptr inbounds i8, ptr %256, i64 4
  %453 = load i32, ptr %452, align 4, !tbaa !11
  %454 = getelementptr inbounds i8, ptr %256, i64 8
  %455 = load i32, ptr %454, align 4, !tbaa !11
  %456 = getelementptr inbounds i8, ptr %256, i64 12
  %457 = load i32, ptr %456, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %451, i32 noundef %453, i32 noundef %455, i32 noundef %457, ptr noundef nonnull @.str.948)
  br label %2874

458:                                              ; preds = %2
  %459 = load i32, ptr %256, align 4, !tbaa !11
  %460 = getelementptr inbounds i8, ptr %256, i64 4
  %461 = load i32, ptr %460, align 4, !tbaa !11
  %462 = getelementptr inbounds i8, ptr %256, i64 8
  %463 = load i32, ptr %462, align 4, !tbaa !11
  %464 = getelementptr inbounds i8, ptr %256, i64 12
  %465 = load i32, ptr %464, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL20emit_binary_unord_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %459, i32 noundef %461, i32 noundef %463, i32 noundef %465, ptr noundef nonnull @.str.949)
  br label %2874

466:                                              ; preds = %2
  %467 = load i32, ptr %256, align 4, !tbaa !11
  %468 = getelementptr inbounds i8, ptr %256, i64 4
  %469 = load i32, ptr %468, align 4, !tbaa !11
  %470 = getelementptr inbounds i8, ptr %256, i64 8
  %471 = load i32, ptr %470, align 4, !tbaa !11
  %472 = getelementptr inbounds i8, ptr %256, i64 12
  %473 = load i32, ptr %472, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL18emit_binary_ptr_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %467, i32 noundef %469, i32 noundef %471, i32 noundef %473, ptr noundef nonnull @.str.945)
  br label %2874

474:                                              ; preds = %2
  %475 = load i32, ptr %256, align 4, !tbaa !11
  %476 = getelementptr inbounds i8, ptr %256, i64 4
  %477 = load i32, ptr %476, align 4, !tbaa !11
  %478 = getelementptr inbounds i8, ptr %256, i64 8
  %479 = load i32, ptr %478, align 4, !tbaa !11
  %480 = getelementptr inbounds i8, ptr %256, i64 12
  %481 = load i32, ptr %480, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL18emit_binary_ptr_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %475, i32 noundef %477, i32 noundef %479, i32 noundef %481, ptr noundef nonnull @.str.946)
  br label %2874

482:                                              ; preds = %2
  %483 = load i32, ptr %256, align 4, !tbaa !11
  %484 = getelementptr inbounds i8, ptr %256, i64 4
  %485 = load i32, ptr %484, align 4, !tbaa !11
  %486 = getelementptr inbounds i8, ptr %256, i64 8
  %487 = load i32, ptr %486, align 4, !tbaa !11
  %488 = getelementptr inbounds i8, ptr %256, i64 12
  %489 = load i32, ptr %488, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL18emit_binary_ptr_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %483, i32 noundef %485, i32 noundef %487, i32 noundef %489, ptr noundef nonnull @.str.950)
  br label %2874

490:                                              ; preds = %2, %2, %2
  %491 = load i32, ptr %256, align 4, !tbaa !11
  %492 = getelementptr inbounds i8, ptr %256, i64 4
  %493 = load i32, ptr %492, align 4, !tbaa !11
  %494 = getelementptr inbounds i8, ptr %256, i64 8
  %495 = load i32, ptr %494, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %491, i32 noundef %493, i32 noundef %495, ptr noundef nonnull @.str.951)
  %496 = load i32, ptr %492, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %496)
  br label %2874

497:                                              ; preds = %2, %2, %2
  %498 = load i32, ptr %256, align 4, !tbaa !11
  %499 = getelementptr inbounds i8, ptr %256, i64 4
  %500 = load i32, ptr %499, align 4, !tbaa !11
  %501 = getelementptr inbounds i8, ptr %256, i64 8
  %502 = load i32, ptr %501, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %498, i32 noundef %500, i32 noundef %502, ptr noundef nonnull @.str.952)
  %503 = load i32, ptr %499, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %503)
  br label %2874

504:                                              ; preds = %2, %2, %2
  %505 = load i32, ptr %256, align 4, !tbaa !11
  %506 = getelementptr inbounds i8, ptr %256, i64 4
  %507 = load i32, ptr %506, align 4, !tbaa !11
  %508 = getelementptr inbounds i8, ptr %256, i64 8
  %509 = load i32, ptr %508, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %505, i32 noundef %507, i32 noundef %509, ptr noundef nonnull @.str.953)
  %510 = load i32, ptr %506, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %510)
  br label %2874

511:                                              ; preds = %2
  %512 = load i32, ptr %256, align 4, !tbaa !11
  %513 = getelementptr inbounds i8, ptr %256, i64 4
  %514 = load i32, ptr %513, align 4, !tbaa !11
  %515 = getelementptr inbounds i8, ptr %256, i64 8
  %516 = load i32, ptr %515, align 4, !tbaa !11
  %517 = getelementptr inbounds i8, ptr %256, i64 12
  %518 = load i32, ptr %517, align 4, !tbaa !11
  %519 = getelementptr inbounds i8, ptr %256, i64 16
  %520 = load i32, ptr %519, align 4, !tbaa !11
  %521 = getelementptr inbounds i8, ptr %256, i64 20
  %522 = load i32, ptr %521, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_bitfield_insert_opEjjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %512, i32 noundef %514, i32 noundef %516, i32 noundef %518, i32 noundef %520, i32 noundef %522, ptr noundef nonnull @.str.954, i32 noundef 8)
  br label %2874

523:                                              ; preds = %2
  %524 = load i32, ptr %256, align 4, !tbaa !11
  %525 = getelementptr inbounds i8, ptr %256, i64 4
  %526 = load i32, ptr %525, align 4, !tbaa !11
  %527 = getelementptr inbounds i8, ptr %256, i64 8
  %528 = load i32, ptr %527, align 4, !tbaa !11
  %529 = getelementptr inbounds i8, ptr %256, i64 12
  %530 = load i32, ptr %529, align 4, !tbaa !11
  %531 = getelementptr inbounds i8, ptr %256, i64 16
  %532 = load i32, ptr %531, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %524, i32 noundef %526, i32 noundef %528, i32 noundef %530, i32 noundef %532, ptr noundef nonnull @.str.955, i32 noundef %261, i32 noundef %261, i32 noundef 8, i32 noundef 8)
  br label %2874

533:                                              ; preds = %2
  %534 = load i32, ptr %256, align 4, !tbaa !11
  %535 = getelementptr inbounds i8, ptr %256, i64 4
  %536 = load i32, ptr %535, align 4, !tbaa !11
  %537 = getelementptr inbounds i8, ptr %256, i64 8
  %538 = load i32, ptr %537, align 4, !tbaa !11
  %539 = getelementptr inbounds i8, ptr %256, i64 12
  %540 = load i32, ptr %539, align 4, !tbaa !11
  %541 = getelementptr inbounds i8, ptr %256, i64 16
  %542 = load i32, ptr %541, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %534, i32 noundef %536, i32 noundef %538, i32 noundef %540, i32 noundef %542, ptr noundef nonnull @.str.955, i32 noundef %262, i32 noundef %262, i32 noundef 8, i32 noundef 8)
  br label %2874

543:                                              ; preds = %2
  %544 = load i32, ptr %256, align 4, !tbaa !11
  %545 = getelementptr inbounds i8, ptr %256, i64 4
  %546 = load i32, ptr %545, align 4, !tbaa !11
  %547 = getelementptr inbounds i8, ptr %256, i64 8
  %548 = load i32, ptr %547, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %544, i32 noundef %546, i32 noundef %548, ptr noundef nonnull @.str.956)
  br label %2874

549:                                              ; preds = %2
  %550 = getelementptr inbounds i8, ptr %256, i64 8
  %551 = load i32, ptr %550, align 4, !tbaa !11
  %552 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %551)
  %553 = getelementptr inbounds i8, ptr %552, i64 16
  %554 = load i32, ptr %553, align 8, !tbaa !12
  %555 = load i32, ptr %256, align 4, !tbaa !11
  %556 = getelementptr inbounds i8, ptr %256, i64 4
  %557 = load i32, ptr %556, align 4, !tbaa !11
  %558 = load i32, ptr %550, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %555, i32 noundef %557, i32 noundef %558, ptr noundef nonnull @.str.957, i32 noundef %554, i32 noundef %554)
  br label %2874

559:                                              ; preds = %2
  %560 = load i32, ptr %256, align 4, !tbaa !11
  %561 = getelementptr inbounds i8, ptr %256, i64 4
  %562 = load i32, ptr %561, align 4, !tbaa !11
  %563 = getelementptr inbounds i8, ptr %256, i64 8
  %564 = load i32, ptr %563, align 4, !tbaa !11
  %565 = getelementptr inbounds i8, ptr %256, i64 12
  %566 = load i32, ptr %565, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %560, i32 noundef %562, i32 noundef %564, i32 noundef %566, ptr noundef nonnull @.str.958)
  br label %2874

567:                                              ; preds = %2
  %568 = getelementptr inbounds i8, ptr %0, i64 10141
  %569 = load i8, ptr %568, align 1, !tbaa !41, !range !189, !noundef !190
  %570 = trunc nuw i8 %569 to i1
  br i1 %570, label %576, label %571

571:                                              ; preds = %567
  %572 = getelementptr inbounds i8, ptr %256, i64 4
  %573 = load i32, ptr %572, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %573)
  %574 = load i32, ptr %5, align 4
  %575 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %574, i32 noundef 42)
  br i1 %575, label %576, label %584

576:                                              ; preds = %571, %567
  %577 = load i32, ptr %256, align 4, !tbaa !11
  %578 = getelementptr inbounds i8, ptr %256, i64 4
  %579 = load i32, ptr %578, align 4, !tbaa !11
  %580 = getelementptr inbounds i8, ptr %256, i64 8
  %581 = load i32, ptr %580, align 4, !tbaa !11
  %582 = getelementptr inbounds i8, ptr %256, i64 12
  %583 = load i32, ptr %582, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %577, i32 noundef %579, i32 noundef %581, i32 noundef %583, ptr noundef nonnull @.str.959)
  br label %2874

584:                                              ; preds = %571
  %585 = load i32, ptr %256, align 4, !tbaa !11
  %586 = load i32, ptr %572, align 4, !tbaa !11
  %587 = getelementptr inbounds i8, ptr %256, i64 8
  %588 = load i32, ptr %587, align 4, !tbaa !11
  %589 = getelementptr inbounds i8, ptr %256, i64 12
  %590 = load i32, ptr %589, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %585, i32 noundef %586, i32 noundef %588, i32 noundef %590, ptr noundef nonnull @.str.960)
  br label %2874

591:                                              ; preds = %2
  %592 = getelementptr inbounds i8, ptr %0, i64 10141
  %593 = load i8, ptr %592, align 1, !tbaa !41, !range !189, !noundef !190
  %594 = trunc nuw i8 %593 to i1
  br i1 %594, label %600, label %595

595:                                              ; preds = %591
  %596 = getelementptr inbounds i8, ptr %256, i64 4
  %597 = load i32, ptr %596, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef %597)
  %598 = load i32, ptr %6, align 4
  %599 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %598, i32 noundef 42)
  br i1 %599, label %600, label %608

600:                                              ; preds = %595, %591
  %601 = load i32, ptr %256, align 4, !tbaa !11
  %602 = getelementptr inbounds i8, ptr %256, i64 4
  %603 = load i32, ptr %602, align 4, !tbaa !11
  %604 = getelementptr inbounds i8, ptr %256, i64 8
  %605 = load i32, ptr %604, align 4, !tbaa !11
  %606 = getelementptr inbounds i8, ptr %256, i64 12
  %607 = load i32, ptr %606, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %601, i32 noundef %603, i32 noundef %605, i32 noundef %607, ptr noundef nonnull @.str.961)
  br label %2874

608:                                              ; preds = %595
  %609 = load i32, ptr %256, align 4, !tbaa !11
  %610 = load i32, ptr %596, align 4, !tbaa !11
  %611 = getelementptr inbounds i8, ptr %256, i64 8
  %612 = load i32, ptr %611, align 4, !tbaa !11
  %613 = getelementptr inbounds i8, ptr %256, i64 12
  %614 = load i32, ptr %613, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %609, i32 noundef %610, i32 noundef %612, i32 noundef %614, ptr noundef nonnull @.str.962)
  br label %2874

615:                                              ; preds = %2
  %616 = getelementptr inbounds i8, ptr %0, i64 10141
  %617 = load i8, ptr %616, align 1, !tbaa !41, !range !189, !noundef !190
  %618 = trunc nuw i8 %617 to i1
  br i1 %618, label %624, label %619

619:                                              ; preds = %615
  %620 = getelementptr inbounds i8, ptr %256, i64 4
  %621 = load i32, ptr %620, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %7, i32 noundef %621)
  %622 = load i32, ptr %7, align 4
  %623 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %622, i32 noundef 42)
  br i1 %623, label %624, label %632

624:                                              ; preds = %619, %615
  %625 = load i32, ptr %256, align 4, !tbaa !11
  %626 = getelementptr inbounds i8, ptr %256, i64 4
  %627 = load i32, ptr %626, align 4, !tbaa !11
  %628 = getelementptr inbounds i8, ptr %256, i64 8
  %629 = load i32, ptr %628, align 4, !tbaa !11
  %630 = getelementptr inbounds i8, ptr %256, i64 12
  %631 = load i32, ptr %630, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %625, i32 noundef %627, i32 noundef %629, i32 noundef %631, ptr noundef nonnull @.str.963)
  br label %2874

632:                                              ; preds = %619
  %633 = load i32, ptr %256, align 4, !tbaa !11
  %634 = load i32, ptr %620, align 4, !tbaa !11
  %635 = getelementptr inbounds i8, ptr %256, i64 8
  %636 = load i32, ptr %635, align 4, !tbaa !11
  %637 = getelementptr inbounds i8, ptr %256, i64 12
  %638 = load i32, ptr %637, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %633, i32 noundef %634, i32 noundef %636, i32 noundef %638, ptr noundef nonnull @.str.950)
  br label %2874

639:                                              ; preds = %2
  %640 = load i32, ptr %256, align 4, !tbaa !11
  %641 = getelementptr inbounds i8, ptr %256, i64 4
  %642 = load i32, ptr %641, align 4, !tbaa !11
  %643 = getelementptr inbounds i8, ptr %256, i64 8
  %644 = load i32, ptr %643, align 4, !tbaa !11
  %645 = getelementptr inbounds i8, ptr %256, i64 16
  %646 = load i32, ptr %645, align 4, !tbaa !11
  %647 = getelementptr inbounds i8, ptr %256, i64 20
  %648 = load i32, ptr %647, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %640, i32 noundef %642, ptr noundef nonnull @.str.964, i32 noundef 229, i32 noundef %646, i32 noundef %646, i1 noundef zeroext false, i32 noundef %644, i32 noundef %648, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

649:                                              ; preds = %2
  %650 = load i32, ptr %256, align 4, !tbaa !11
  %651 = getelementptr inbounds i8, ptr %256, i64 4
  %652 = load i32, ptr %651, align 4, !tbaa !11
  %653 = getelementptr inbounds i8, ptr %256, i64 8
  %654 = load i32, ptr %653, align 4, !tbaa !11
  %655 = getelementptr inbounds i8, ptr %256, i64 16
  %656 = load i32, ptr %655, align 4, !tbaa !11
  %657 = getelementptr inbounds i8, ptr %256, i64 20
  %658 = load i32, ptr %657, align 4, !tbaa !11
  %659 = getelementptr inbounds i8, ptr %256, i64 24
  %660 = load i32, ptr %659, align 4, !tbaa !11
  %661 = getelementptr inbounds i8, ptr %256, i64 28
  %662 = load i32, ptr %661, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %650, i32 noundef %652, ptr noundef nonnull @.str.965, i32 noundef 230, i32 noundef %656, i32 noundef %658, i1 noundef zeroext true, i32 noundef %654, i32 noundef %662, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef %660)
  br label %2874

663:                                              ; preds = %2
  %664 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %664, ptr noundef nonnull @.str.966)
          to label %665 unwind label %666

665:                                              ; preds = %663
  tail call void @__cxa_throw(ptr nonnull %664, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

666:                                              ; preds = %663
  %667 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %664) #9
  br label %2876

668:                                              ; preds = %2
  %669 = load i32, ptr %256, align 4, !tbaa !11
  %670 = getelementptr inbounds i8, ptr %256, i64 4
  %671 = load i32, ptr %670, align 4, !tbaa !11
  %672 = getelementptr inbounds i8, ptr %256, i64 8
  %673 = load i32, ptr %672, align 4, !tbaa !11
  %674 = getelementptr inbounds i8, ptr %256, i64 16
  %675 = load i32, ptr %674, align 4, !tbaa !11
  %676 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %673)
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %669, i32 noundef %671, ptr noundef nonnull @.str.967, i32 noundef 227, i32 noundef %675, i32 noundef %675, i1 noundef zeroext false, i32 noundef %673, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

677:                                              ; preds = %2
  %678 = load i32, ptr %256, align 4, !tbaa !11
  %679 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %678)
  %680 = getelementptr inbounds i8, ptr %679, i64 8
  %681 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %680)
  %682 = load i32, ptr %256, align 4, !tbaa !11
  %683 = getelementptr inbounds i8, ptr %256, i64 8
  %684 = load i32, ptr %683, align 4, !tbaa !11
  %685 = getelementptr inbounds i8, ptr %256, i64 12
  %686 = load i32, ptr %685, align 4, !tbaa !11
  %687 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %682)
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %681, i32 noundef %682, ptr noundef nonnull @.str.968, i32 noundef 228, i32 noundef %684, i32 noundef %684, i1 noundef zeroext false, i32 noundef %682, i32 noundef %686, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

688:                                              ; preds = %2
  %689 = load i32, ptr %256, align 4, !tbaa !11
  %690 = getelementptr inbounds i8, ptr %256, i64 4
  %691 = load i32, ptr %690, align 4, !tbaa !11
  %692 = getelementptr inbounds i8, ptr %256, i64 8
  %693 = load i32, ptr %692, align 4, !tbaa !11
  %694 = getelementptr inbounds i8, ptr %256, i64 16
  %695 = load i32, ptr %694, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %689, i32 noundef %691, ptr noundef nonnull @.str.969, i32 noundef 232, i32 noundef %695, i32 noundef %695, i1 noundef zeroext false, i32 noundef %693, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext true, i32 noundef 0)
  br label %2874

696:                                              ; preds = %2
  %697 = load i32, ptr %256, align 4, !tbaa !11
  %698 = getelementptr inbounds i8, ptr %256, i64 4
  %699 = load i32, ptr %698, align 4, !tbaa !11
  %700 = getelementptr inbounds i8, ptr %256, i64 8
  %701 = load i32, ptr %700, align 4, !tbaa !11
  %702 = getelementptr inbounds i8, ptr %256, i64 16
  %703 = load i32, ptr %702, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %697, i32 noundef %699, ptr noundef nonnull @.str.970, i32 noundef 233, i32 noundef %703, i32 noundef %703, i1 noundef zeroext false, i32 noundef %701, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext true, i32 noundef 0)
  br label %2874

704:                                              ; preds = %2, %2
  %705 = load i32, ptr %256, align 4, !tbaa !11
  %706 = getelementptr inbounds i8, ptr %256, i64 4
  %707 = load i32, ptr %706, align 4, !tbaa !11
  %708 = getelementptr inbounds i8, ptr %256, i64 8
  %709 = load i32, ptr %708, align 4, !tbaa !11
  %710 = getelementptr inbounds i8, ptr %256, i64 16
  %711 = load i32, ptr %710, align 4, !tbaa !11
  %712 = getelementptr inbounds i8, ptr %256, i64 20
  %713 = load i32, ptr %712, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %705, i32 noundef %707, ptr noundef nonnull @.str.969, i32 noundef %259, i32 noundef %711, i32 noundef %711, i1 noundef zeroext false, i32 noundef %709, i32 noundef %713, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

714:                                              ; preds = %2
  %715 = load i32, ptr %256, align 4, !tbaa !11
  %716 = getelementptr inbounds i8, ptr %256, i64 4
  %717 = load i32, ptr %716, align 4, !tbaa !11
  %718 = getelementptr inbounds i8, ptr %256, i64 8
  %719 = load i32, ptr %718, align 4, !tbaa !11
  %720 = getelementptr inbounds i8, ptr %256, i64 16
  %721 = load i32, ptr %720, align 4, !tbaa !11
  %722 = getelementptr inbounds i8, ptr %256, i64 20
  %723 = load i32, ptr %722, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %715, i32 noundef %717, ptr noundef nonnull @.str.970, i32 noundef 235, i32 noundef %721, i32 noundef %721, i1 noundef zeroext false, i32 noundef %719, i32 noundef %723, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

724:                                              ; preds = %2, %2
  %725 = load i32, ptr %256, align 4, !tbaa !11
  %726 = getelementptr inbounds i8, ptr %256, i64 4
  %727 = load i32, ptr %726, align 4, !tbaa !11
  %728 = getelementptr inbounds i8, ptr %256, i64 8
  %729 = load i32, ptr %728, align 4, !tbaa !11
  %730 = getelementptr inbounds i8, ptr %256, i64 16
  %731 = load i32, ptr %730, align 4, !tbaa !11
  %732 = getelementptr inbounds i8, ptr %256, i64 20
  %733 = load i32, ptr %732, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %725, i32 noundef %727, ptr noundef nonnull @.str.971, i32 noundef %259, i32 noundef %731, i32 noundef %731, i1 noundef zeroext false, i32 noundef %729, i32 noundef %733, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

734:                                              ; preds = %2, %2
  %735 = load i32, ptr %256, align 4, !tbaa !11
  %736 = getelementptr inbounds i8, ptr %256, i64 4
  %737 = load i32, ptr %736, align 4, !tbaa !11
  %738 = getelementptr inbounds i8, ptr %256, i64 8
  %739 = load i32, ptr %738, align 4, !tbaa !11
  %740 = getelementptr inbounds i8, ptr %256, i64 16
  %741 = load i32, ptr %740, align 4, !tbaa !11
  %742 = getelementptr inbounds i8, ptr %256, i64 20
  %743 = load i32, ptr %742, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %735, i32 noundef %737, ptr noundef nonnull @.str.972, i32 noundef %259, i32 noundef %741, i32 noundef %741, i1 noundef zeroext false, i32 noundef %739, i32 noundef %743, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

744:                                              ; preds = %2
  %745 = load i32, ptr %256, align 4, !tbaa !11
  %746 = getelementptr inbounds i8, ptr %256, i64 4
  %747 = load i32, ptr %746, align 4, !tbaa !11
  %748 = getelementptr inbounds i8, ptr %256, i64 8
  %749 = load i32, ptr %748, align 4, !tbaa !11
  %750 = getelementptr inbounds i8, ptr %256, i64 16
  %751 = load i32, ptr %750, align 4, !tbaa !11
  %752 = getelementptr inbounds i8, ptr %256, i64 20
  %753 = load i32, ptr %752, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %745, i32 noundef %747, ptr noundef nonnull @.str.973, i32 noundef 240, i32 noundef %751, i32 noundef %751, i1 noundef zeroext false, i32 noundef %749, i32 noundef %753, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

754:                                              ; preds = %2
  %755 = load i32, ptr %256, align 4, !tbaa !11
  %756 = getelementptr inbounds i8, ptr %256, i64 4
  %757 = load i32, ptr %756, align 4, !tbaa !11
  %758 = getelementptr inbounds i8, ptr %256, i64 8
  %759 = load i32, ptr %758, align 4, !tbaa !11
  %760 = getelementptr inbounds i8, ptr %256, i64 16
  %761 = load i32, ptr %760, align 4, !tbaa !11
  %762 = getelementptr inbounds i8, ptr %256, i64 20
  %763 = load i32, ptr %762, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %755, i32 noundef %757, ptr noundef nonnull @.str.974, i32 noundef 241, i32 noundef %761, i32 noundef %761, i1 noundef zeroext false, i32 noundef %759, i32 noundef %763, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

764:                                              ; preds = %2
  %765 = load i32, ptr %256, align 4, !tbaa !11
  %766 = getelementptr inbounds i8, ptr %256, i64 4
  %767 = load i32, ptr %766, align 4, !tbaa !11
  %768 = getelementptr inbounds i8, ptr %256, i64 8
  %769 = load i32, ptr %768, align 4, !tbaa !11
  %770 = getelementptr inbounds i8, ptr %256, i64 16
  %771 = load i32, ptr %770, align 4, !tbaa !11
  %772 = getelementptr inbounds i8, ptr %256, i64 20
  %773 = load i32, ptr %772, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL19emit_atomic_func_opEjjPKcN3spv2OpEjjbjjbbj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %765, i32 noundef %767, ptr noundef nonnull @.str.975, i32 noundef 242, i32 noundef %771, i32 noundef %771, i1 noundef zeroext false, i32 noundef %769, i32 noundef %773, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 0)
  br label %2874

774:                                              ; preds = %2
  %775 = getelementptr inbounds i8, ptr %256, i64 8
  %776 = load i32, ptr %775, align 4, !tbaa !11
  %777 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %776)
  %778 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %776)
  %779 = getelementptr inbounds i8, ptr %777, i64 252
  %780 = load i32, ptr %779, align 4, !tbaa !191
  %781 = icmp ne i32 %780, 6
  %782 = icmp ne ptr %778, null
  %or.cond11 = and i1 %782, %781
  br i1 %or.cond11, label %783, label %787

783:                                              ; preds = %774
  %784 = getelementptr inbounds i8, ptr %778, i64 8
  %.sroa.0263.0.copyload = load i32, ptr %784, align 8, !tbaa !11
  %785 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0263.0.copyload, i32 noundef 25)
  br i1 %785, label %786, label %787

786:                                              ; preds = %783
  %.sroa.0262.0.copyload = load i32, ptr %784, align 8, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0262.0.copyload, i32 noundef 25)
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %787

787:                                              ; preds = %783, %786, %774
  %788 = getelementptr inbounds i8, ptr %0, i64 10168
  %789 = load i8, ptr %788, align 8, !tbaa !192, !range !189, !noundef !190
  %790 = trunc nuw i8 %789 to i1
  %or.cond = and i1 %782, %790
  br i1 %or.cond, label %791, label %798

791:                                              ; preds = %787
  %792 = getelementptr inbounds i8, ptr %778, i64 8
  %.sroa.0261.0.copyload = load i32, ptr %792, align 8, !tbaa !11
  %793 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0261.0.copyload, i32 noundef 24)
  br i1 %793, label %798, label %794

794:                                              ; preds = %791
  tail call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i8 noundef zeroext 73)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %776, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA15_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(15) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %795 unwind label %796

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

796:                                              ; preds = %794
  %797 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  br label %2876

798:                                              ; preds = %795, %791, %787
  %799 = load ptr, ptr %0, align 8, !tbaa !193
  %800 = getelementptr inbounds i8, ptr %799, i64 128
  %801 = load ptr, ptr %800, align 8
  call void %801(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, i1 noundef zeroext false)
  br label %2874

802:                                              ; preds = %2
  %803 = getelementptr inbounds i8, ptr %256, i64 8
  %804 = load i32, ptr %803, align 4, !tbaa !11
  %805 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %804)
  %.not1459 = icmp eq ptr %805, null
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #9
  br i1 %.not1459, label %.critedge, label %806

806:                                              ; preds = %802
  %807 = getelementptr inbounds i8, ptr %0, i64 12024
  %808 = getelementptr inbounds i8, ptr %805, i64 8
  %809 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %808)
  store i32 %809, ptr %9, align 4, !tbaa !11
  %810 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %807, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %.not1460 = icmp eq i64 %810, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #9
  br i1 %.not1460, label %856, label %811

811:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #9
  %812 = load i32, ptr %256, align 4, !tbaa !11
  store i32 %812, ptr %10, align 4, !tbaa !11
  %813 = getelementptr inbounds i8, ptr %256, i64 4
  %814 = load i32, ptr %813, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #9
  %815 = getelementptr inbounds i8, ptr %256, i64 12
  %816 = load i32, ptr %815, align 4, !tbaa !11
  call 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) %0, i32 noundef %816, i1 noundef zeroext true)
  %817 = load i32, ptr %803, align 4, !tbaa !11
  %818 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %817)
          to label %819 unwind label %828

819:                                              ; preds = %811
  %820 = getelementptr inbounds i8, ptr %818, i64 252
  %821 = load i32, ptr %820, align 4, !tbaa !191
  %822 = icmp eq i32 %821, 1
  br i1 %822, label %823, label %835

823:                                              ; preds = %819
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #9
  %824 = load i32, ptr %803, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %824, i1 noundef zeroext true)
          to label %825 unwind label %830

825:                                              ; preds = %823
  invoke void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 1 dereferenceable(23) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %826 unwind label %832

826:                                              ; preds = %825
  %827 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  br label %835

828:                                              ; preds = %811
  %829 = landingpad { ptr, i32 }
          cleanup
  br label %855

830:                                              ; preds = %823
  %831 = landingpad { ptr, i32 }
          cleanup
  br label %834

832:                                              ; preds = %825
  %833 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #9
  br label %834

834:                                              ; preds = %832, %830
  %.pn1464 = phi { ptr, i32 } [ %833, %832 ], [ %831, %830 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  br label %855

835:                                              ; preds = %826, %819
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #9
  %836 = load i32, ptr %803, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %836, i1 noundef zeroext true)
          to label %837 unwind label %845

837:                                              ; preds = %835
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA9_KcRS6_RA2_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(9) @.str.978, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %838 unwind label %847

838:                                              ; preds = %837
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #9
  store i8 1, ptr %16, align 1, !tbaa !195
  %839 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %814, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %840 unwind label %849

840:                                              ; preds = %838
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #9
  %841 = load i32, ptr %808, align 8, !tbaa !11
  %842 = getelementptr inbounds i8, ptr %839, i64 52
  store i32 %841, ptr %842, align 4, !tbaa !11
  %843 = load i32, ptr %815, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %814, i32 noundef %843)
          to label %844 unwind label %853

844:                                              ; preds = %840
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  br label %2874

845:                                              ; preds = %835
  %846 = landingpad { ptr, i32 }
          cleanup
  br label %852

847:                                              ; preds = %837
  %848 = landingpad { ptr, i32 }
          cleanup
  br label %851

849:                                              ; preds = %838
  %850 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  br label %851

851:                                              ; preds = %849, %847
  %.pn1466 = phi { ptr, i32 } [ %850, %849 ], [ %848, %847 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  br label %852

852:                                              ; preds = %851, %845
  %.pn1466.pn = phi { ptr, i32 } [ %.pn1466, %851 ], [ %846, %845 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #9
  br label %855

853:                                              ; preds = %840
  %854 = landingpad { ptr, i32 }
          cleanup
  br label %855

855:                                              ; preds = %852, %853, %834, %828
  %.pn1469.pn = phi { ptr, i32 } [ %.pn1464, %834 ], [ %829, %828 ], [ %854, %853 ], [ %.pn1466.pn, %852 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  br label %2876

.critedge:                                        ; preds = %802
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #9
  br label %856

856:                                              ; preds = %.critedge, %806
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #9
  %857 = load i32, ptr %256, align 4, !tbaa !11
  store i32 %857, ptr %17, align 4, !tbaa !11
  %858 = getelementptr inbounds i8, ptr %256, i64 4
  %859 = load i32, ptr %858, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #9
  %860 = load i32, ptr %803, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %860, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #9
  %861 = getelementptr inbounds i8, ptr %256, i64 12
  %862 = load i32, ptr %861, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 8, i32 noundef %862)
          to label %863 unwind label %874

863:                                              ; preds = %856
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.979, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %864 unwind label %876

864:                                              ; preds = %863
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #9
  store i8 1, ptr %21, align 1, !tbaa !195
  %865 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %859, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %866 unwind label %878

866:                                              ; preds = %864
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #9
  br i1 %.not1459, label %869, label %867

867:                                              ; preds = %866
  %868 = getelementptr inbounds i8, ptr %805, i64 8
  br label %870

869:                                              ; preds = %866
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef 0)
  br label %870

870:                                              ; preds = %869, %867
  %.in = phi ptr [ %22, %869 ], [ %868, %867 ]
  %871 = load i32, ptr %.in, align 4, !tbaa !11
  %872 = getelementptr inbounds i8, ptr %865, i64 52
  store i32 %871, ptr %872, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #9
  %873 = load i32, ptr %861, align 4, !tbaa !11
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %859, i32 noundef %873)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #9
  br label %2874

874:                                              ; preds = %856
  %875 = landingpad { ptr, i32 }
          cleanup
  br label %881

876:                                              ; preds = %863
  %877 = landingpad { ptr, i32 }
          cleanup
  br label %880

878:                                              ; preds = %864
  %879 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  br label %880

880:                                              ; preds = %878, %876
  %.pn1461 = phi { ptr, i32 } [ %879, %878 ], [ %877, %876 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  br label %881

881:                                              ; preds = %880, %874
  %.pn1461.pn = phi { ptr, i32 } [ %.pn1461, %880 ], [ %875, %874 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #9
  br label %2876

882:                                              ; preds = %2
  %883 = load i32, ptr %256, align 4, !tbaa !11
  %884 = getelementptr inbounds i8, ptr %256, i64 4
  %885 = load i32, ptr %884, align 4, !tbaa !11
  %886 = getelementptr inbounds i8, ptr %256, i64 8
  %887 = load i32, ptr %886, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #9
  %888 = getelementptr inbounds i8, ptr %256, i64 12
  store ptr %888, ptr %23, align 8, !tbaa !196
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #9
  %889 = getelementptr inbounds i8, ptr %1, i64 8
  %890 = load i32, ptr %889, align 4, !tbaa !197
  %891 = add i32 %890, -3
  store i32 %891, ptr %24, align 4, !tbaa !11
  %892 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %883)
  %893 = getelementptr inbounds i8, ptr %892, i64 8
  %894 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %893)
  %895 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %894)
  %896 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %883)
  %.not1447 = icmp eq ptr %896, null
  br i1 %.not1447, label %901, label %897

897:                                              ; preds = %882
  %898 = getelementptr inbounds i8, ptr %896, i64 8
  %.sroa.0233.0.copyload = load i32, ptr %898, align 8, !tbaa !11
  %899 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0233.0.copyload, i32 noundef 24)
  br i1 %899, label %900, label %901

900:                                              ; preds = %897
  %.sroa.0.0.copyload = load i32, ptr %898, align 8, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 24)
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %901

901:                                              ; preds = %900, %897, %882
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #9
  store i8 0, ptr %25, align 1, !tbaa !195
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #9
  store i32 0, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #9
  store i32 0, ptr %27, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #9
  store i32 0, ptr %28, align 4, !tbaa !11
  %.not1448 = icmp eq i32 %891, 0
  br i1 %.not1448, label %906, label %902

902:                                              ; preds = %901
  %903 = getelementptr inbounds i8, ptr %256, i64 16
  store ptr %903, ptr %23, align 8, !tbaa !196
  %904 = load i32, ptr %888, align 4, !tbaa !11
  store i32 %904, ptr %28, align 4, !tbaa !11
  %905 = add i32 %890, -4
  store i32 %905, ptr %24, align 4, !tbaa !11
  br label %906

906:                                              ; preds = %902, %901
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %29) #9
  store ptr %24, ptr %29, align 8, !tbaa !196
  %907 = getelementptr inbounds i8, ptr %29, i64 8
  store ptr %28, ptr %907, align 8, !tbaa !196
  %908 = getelementptr inbounds i8, ptr %29, i64 16
  store ptr %23, ptr %908, align 8, !tbaa !196
  call void @"_ZZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionEENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef 1)
  call void @"_ZZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionEENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef 2)
  %909 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %887)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %30) #9
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %30, ptr noundef nonnull align 8 dereferenceable(336) %909)
  %910 = getelementptr inbounds i8, ptr %30, i64 24
  store i32 4, ptr %910, align 8, !tbaa !198
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %31) #9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %31, i32 noundef 0)
  %911 = getelementptr inbounds i8, ptr %31, i64 8
  %912 = getelementptr inbounds i8, ptr %31, i64 16
  %913 = getelementptr inbounds i8, ptr %31, i64 24
  %914 = getelementptr inbounds i8, ptr %31, i64 44
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(11) %911, i8 0, i64 11, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(50) %913, i8 0, i64 50, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %32, i32 noundef %883)
  %915 = load i32, ptr %32, align 4, !tbaa !11
  store i32 %915, ptr %31, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #9
  store ptr %895, ptr %911, align 8, !tbaa !199
  store i8 1, ptr %912, align 8, !tbaa !202
  store i32 %885, ptr %913, align 8, !tbaa !203
  %916 = load i32, ptr %27, align 4, !tbaa !11
  store i32 %916, ptr %914, align 4, !tbaa !204
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  %917 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %918 unwind label %926

918:                                              ; preds = %906
  br i1 %917, label %919, label %933

919:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #9
  %920 = load ptr, ptr %0, align 8, !tbaa !193
  %921 = getelementptr inbounds i8, ptr %920, i64 160
  %922 = load ptr, ptr %921, align 8
  invoke void %922(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 23, i32 noundef 1)
          to label %923 unwind label %928

923:                                              ; preds = %919
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(16) @.str.980)
          to label %924 unwind label %930

924:                                              ; preds = %923
  %925 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %34) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #9
  br label %933

926:                                              ; preds = %969, %966, %964, %945, %942, %906
  %927 = landingpad { ptr, i32 }
          cleanup
  br label %971

928:                                              ; preds = %919
  %929 = landingpad { ptr, i32 }
          cleanup
  br label %932

930:                                              ; preds = %923
  %931 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #9
  br label %932

932:                                              ; preds = %930, %928
  %.pn1449 = phi { ptr, i32 } [ %931, %930 ], [ %929, %928 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #9
  br label %971

933:                                              ; preds = %924, %918
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %883, i1 noundef zeroext true)
          to label %934 unwind label %947

934:                                              ; preds = %933
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #9
  %935 = getelementptr inbounds i8, ptr %909, i64 24
  %936 = load i32, ptr %935, align 8, !tbaa !198
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %887, i1 noundef zeroext true)
          to label %937 unwind label %949

937:                                              ; preds = %934
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %30, i32 noundef %936, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %938 unwind label %951

938:                                              ; preds = %937
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #9
  invoke void @_ZN11spirv_cross11CompilerMSL16to_function_argsB5cxx11ERKNS_12CompilerGLSL24TextureFunctionArgumentsEPb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(74) %31, ptr noundef nonnull %25)
          to label %939 unwind label %953

939:                                              ; preds = %938
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcS6_RA3_S7_S6_RA2_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(8) @.str.981, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %940 unwind label %955

940:                                              ; preds = %939
  %941 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %942 unwind label %957

942:                                              ; preds = %940
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #9
  %943 = invoke noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
          to label %944 unwind label %926

944:                                              ; preds = %942
  br i1 %943, label %945, label %964

945:                                              ; preds = %944
  %946 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.53)
          to label %964 unwind label %926

947:                                              ; preds = %933
  %948 = landingpad { ptr, i32 }
          cleanup
  br label %963

949:                                              ; preds = %934
  %950 = landingpad { ptr, i32 }
          cleanup
  br label %962

951:                                              ; preds = %937
  %952 = landingpad { ptr, i32 }
          cleanup
  br label %961

953:                                              ; preds = %938
  %954 = landingpad { ptr, i32 }
          cleanup
  br label %960

955:                                              ; preds = %939
  %956 = landingpad { ptr, i32 }
          cleanup
  br label %959

957:                                              ; preds = %940
  %958 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  br label %959

959:                                              ; preds = %957, %955
  %.pn1451 = phi { ptr, i32 } [ %958, %957 ], [ %956, %955 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  br label %960

960:                                              ; preds = %959, %953
  %.pn1451.pn = phi { ptr, i32 } [ %.pn1451, %959 ], [ %954, %953 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #9
  br label %961

961:                                              ; preds = %960, %951
  %.pn1451.pn.pn = phi { ptr, i32 } [ %.pn1451.pn, %960 ], [ %952, %951 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  br label %962

962:                                              ; preds = %961, %949
  %.pn1451.pn.pn.pn = phi { ptr, i32 } [ %.pn1451.pn.pn, %961 ], [ %950, %949 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #9
  br label %963

963:                                              ; preds = %962, %947
  %.pn1451.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1451.pn.pn.pn, %962 ], [ %948, %947 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #9
  br label %971

964:                                              ; preds = %945, %944
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %965 unwind label %926

965:                                              ; preds = %964
  br i1 %.not1447, label %970, label %966

966:                                              ; preds = %965
  %967 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler27variable_storage_is_aliasedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %896)
          to label %968 unwind label %926

968:                                              ; preds = %966
  br i1 %967, label %969, label %970

969:                                              ; preds = %968
  invoke void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %970 unwind label %926

970:                                              ; preds = %969, %968, %965
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %31) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %30) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #9
  br label %2874

971:                                              ; preds = %963, %932, %926
  %.pn1457 = phi { ptr, i32 } [ %927, %926 ], [ %.pn1451.pn.pn.pn.pn, %963 ], [ %.pn1449, %932 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %31) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %30) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #9
  br label %2876

972:                                              ; preds = %2, %2
  %973 = load i32, ptr %256, align 4, !tbaa !11
  %974 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %973)
  %975 = getelementptr inbounds i8, ptr %256, i64 4
  %976 = load i32, ptr %975, align 4, !tbaa !11
  %977 = getelementptr inbounds i8, ptr %256, i64 8
  %978 = load i32, ptr %977, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %978, i1 noundef zeroext true)
  %979 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %978)
          to label %980 unwind label %991

980:                                              ; preds = %972
  %981 = getelementptr inbounds i8, ptr %979, i64 252
  %982 = load i32, ptr %981, align 4, !tbaa !191
  %983 = getelementptr inbounds i8, ptr %979, i64 257
  %984 = load i8, ptr %983, align 1, !tbaa !205, !range !189, !noundef !190
  %985 = trunc nuw i8 %984 to i1
  %986 = getelementptr inbounds i8, ptr %979, i64 16
  %987 = load i32, ptr %986, align 8, !tbaa !12
  %.not1418 = icmp eq i32 %987, 16
  br i1 %.not1418, label %997, label %988

988:                                              ; preds = %980
  %989 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %989, ptr noundef nonnull @.str.982)
          to label %990 unwind label %993

990:                                              ; preds = %988
  invoke void @__cxa_throw(ptr nonnull %989, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %2877 unwind label %995

991:                                              ; preds = %972
  %992 = landingpad { ptr, i32 }
          cleanup
  br label %1116

993:                                              ; preds = %988
  %994 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %989) #9
  br label %1116

995:                                              ; preds = %990
  %996 = landingpad { ptr, i32 }
          cleanup
  br label %1116

997:                                              ; preds = %980
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  %998 = icmp eq i32 %259, 103
  br i1 %998, label %999, label %1013

999:                                              ; preds = %997
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #9
  %1000 = getelementptr inbounds i8, ptr %256, i64 12
  %1001 = load i32, ptr %1000, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1001, i1 noundef zeroext true)
          to label %1002 unwind label %1007

1002:                                             ; preds = %999
  %1003 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull @.str.983)
          to label %1004 unwind label %1009

1004:                                             ; preds = %1002
  br i1 %1003, label %1005, label %1011

1005:                                             ; preds = %1004
  %1006 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %1011 unwind label %1009

1007:                                             ; preds = %999
  %1008 = landingpad { ptr, i32 }
          cleanup
  br label %1012

1009:                                             ; preds = %1005, %1002
  %1010 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  br label %1012

1011:                                             ; preds = %1005, %1004
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  br label %1013

1012:                                             ; preds = %1009, %1007
  %.pn1419 = phi { ptr, i32 } [ %1010, %1009 ], [ %1008, %1007 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  br label %1115

1013:                                             ; preds = %1011, %997
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #9
  %1014 = load ptr, ptr %0, align 8, !tbaa !193
  %1015 = getelementptr inbounds i8, ptr %1014, i64 152
  %1016 = load ptr, ptr %1015, align 8
  invoke void %1016(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %974, i32 noundef 0)
          to label %1017 unwind label %1033

1017:                                             ; preds = %1013
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(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 @.str.58)
          to label %1018 unwind label %1035

1018:                                             ; preds = %1017
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull @.str.984)
          to label %1019 unwind label %1038

1019:                                             ; preds = %1018
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %1020 unwind label %1040

1020:                                             ; preds = %1019
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull @.str.53)
          to label %1021 unwind label %1042

1021:                                             ; preds = %1020
  %1022 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %46)
          to label %1023 unwind label %1044

1023:                                             ; preds = %1021
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #9
  %1024 = icmp eq i32 %982, 3
  %1025 = icmp eq i32 %982, 2
  %1026 = add i32 %982, -1
  %or.cond5 = icmp ult i32 %1026, 3
  br i1 %or.cond5, label %1027, label %.thread

1027:                                             ; preds = %1023
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %1028 unwind label %1049

1028:                                             ; preds = %1027
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef nonnull @.str.985)
          to label %1029 unwind label %1051

1029:                                             ; preds = %1028
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(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 align 8 dereferenceable(32) %42)
          to label %1030 unwind label %1053

1030:                                             ; preds = %1029
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.53)
          to label %1031 unwind label %1055

1031:                                             ; preds = %1030
  %1032 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %1063 unwind label %1057

1033:                                             ; preds = %1013
  %1034 = landingpad { ptr, i32 }
          cleanup
  br label %1037

1035:                                             ; preds = %1017
  %1036 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  br label %1037

1037:                                             ; preds = %1035, %1033
  %.pn1421 = phi { ptr, i32 } [ %1036, %1035 ], [ %1034, %1033 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  br label %1114

1038:                                             ; preds = %1018
  %1039 = landingpad { ptr, i32 }
          cleanup
  br label %1048

1040:                                             ; preds = %1019
  %1041 = landingpad { ptr, i32 }
          cleanup
  br label %1047

1042:                                             ; preds = %1020
  %1043 = landingpad { ptr, i32 }
          cleanup
  br label %1046

1044:                                             ; preds = %1021
  %1045 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #9
  br label %1046

1046:                                             ; preds = %1044, %1042
  %.pn1423 = phi { ptr, i32 } [ %1045, %1044 ], [ %1043, %1042 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  br label %1047

1047:                                             ; preds = %1046, %1040
  %.pn1423.pn = phi { ptr, i32 } [ %.pn1423, %1046 ], [ %1041, %1040 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  br label %1048

1048:                                             ; preds = %1047, %1038
  %.pn1423.pn.pn = phi { ptr, i32 } [ %.pn1423.pn, %1047 ], [ %1039, %1038 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #9
  br label %1113

1049:                                             ; preds = %1027
  %1050 = landingpad { ptr, i32 }
          cleanup
  br label %1062

1051:                                             ; preds = %1028
  %1052 = landingpad { ptr, i32 }
          cleanup
  br label %1061

1053:                                             ; preds = %1029
  %1054 = landingpad { ptr, i32 }
          cleanup
  br label %1060

1055:                                             ; preds = %1030
  %1056 = landingpad { ptr, i32 }
          cleanup
  br label %1059

1057:                                             ; preds = %1031
  %1058 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  br label %1059

1059:                                             ; preds = %1057, %1055
  %.pn1427 = phi { ptr, i32 } [ %1058, %1057 ], [ %1056, %1055 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  br label %1060

1060:                                             ; preds = %1059, %1053
  %.pn1427.pn = phi { ptr, i32 } [ %.pn1427, %1059 ], [ %1054, %1053 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  br label %1061

1061:                                             ; preds = %1060, %1051
  %.pn1427.pn.pn = phi { ptr, i32 } [ %.pn1427.pn, %1060 ], [ %1052, %1051 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #9
  br label %1062

1062:                                             ; preds = %1061, %1049
  %.pn1427.pn.pn.pn = phi { ptr, i32 } [ %.pn1427.pn.pn, %1061 ], [ %1050, %1049 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  br label %1113

1063:                                             ; preds = %1031
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  br i1 %1025, label %1064, label %.thread

1064:                                             ; preds = %1063
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %1065 unwind label %1071

1065:                                             ; preds = %1064
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull @.str.986)
          to label %1066 unwind label %1073

1066:                                             ; preds = %1065
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %1067 unwind label %1075

1067:                                             ; preds = %1066
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull @.str.53)
          to label %1068 unwind label %1077

1068:                                             ; preds = %1067
  %1069 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %1070 unwind label %1079

1070:                                             ; preds = %1068
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #9
  br label %.thread

1071:                                             ; preds = %1064
  %1072 = landingpad { ptr, i32 }
          cleanup
  br label %1084

1073:                                             ; preds = %1065
  %1074 = landingpad { ptr, i32 }
          cleanup
  br label %1083

1075:                                             ; preds = %1066
  %1076 = landingpad { ptr, i32 }
          cleanup
  br label %1082

1077:                                             ; preds = %1067
  %1078 = landingpad { ptr, i32 }
          cleanup
  br label %1081

1079:                                             ; preds = %1068
  %1080 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  br label %1081

1081:                                             ; preds = %1079, %1077
  %.pn1432 = phi { ptr, i32 } [ %1080, %1079 ], [ %1078, %1077 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  br label %1082

1082:                                             ; preds = %1081, %1075
  %.pn1432.pn = phi { ptr, i32 } [ %.pn1432, %1081 ], [ %1076, %1075 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  br label %1083

1083:                                             ; preds = %1082, %1073
  %.pn1432.pn.pn = phi { ptr, i32 } [ %.pn1432.pn, %1082 ], [ %1074, %1073 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  br label %1084

1084:                                             ; preds = %1083, %1071
  %.pn1432.pn.pn.pn = phi { ptr, i32 } [ %.pn1432.pn.pn, %1083 ], [ %1072, %1071 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #9
  br label %1113

.thread:                                          ; preds = %1023, %1070, %1063
  br i1 %985, label %1085, label %1106

1085:                                             ; preds = %.thread
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %1086 unwind label %1096

1086:                                             ; preds = %1085
  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.987)
          to label %1087 unwind label %1098

1087:                                             ; preds = %1086
  %1088 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %1089 unwind label %1100

1089:                                             ; preds = %1087
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #9
  br i1 %1024, label %1090, label %1106

1090:                                             ; preds = %1089
  %1091 = getelementptr inbounds i8, ptr %0, i64 10142
  %1092 = load i8, ptr %1091, align 2, !tbaa !206, !range !189, !noundef !190
  %1093 = trunc nuw i8 %1092 to i1
  br i1 %1093, label %1094, label %1106

1094:                                             ; preds = %1090
  %1095 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.988)
          to label %1106 unwind label %1104

1096:                                             ; preds = %1085
  %1097 = landingpad { ptr, i32 }
          cleanup
  br label %1103

1098:                                             ; preds = %1086
  %1099 = landingpad { ptr, i32 }
          cleanup
  br label %1102

1100:                                             ; preds = %1087
  %1101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  br label %1102

1102:                                             ; preds = %1100, %1098
  %.pn1437 = phi { ptr, i32 } [ %1101, %1100 ], [ %1099, %1098 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  br label %1103

1103:                                             ; preds = %1102, %1096
  %.pn1437.pn = phi { ptr, i32 } [ %.pn1437, %1102 ], [ %1097, %1096 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #9
  br label %1113

1104:                                             ; preds = %1110, %1108, %1106, %1094
  %1105 = landingpad { ptr, i32 }
          cleanup
  br label %1113

1106:                                             ; preds = %1089, %1090, %1094, %.thread
  %1107 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.53)
          to label %1108 unwind label %1104

1108:                                             ; preds = %1106
  %1109 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %978)
          to label %1110 unwind label %1104

1110:                                             ; preds = %1108
  %1111 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %973, i32 noundef %976, ptr noundef nonnull align 8 dereferenceable(32) %44, i1 noundef zeroext %1109, i1 noundef zeroext false)
          to label %1112 unwind label %1104

1112:                                             ; preds = %1110
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #9
  br label %2874

1113:                                             ; preds = %1104, %1103, %1084, %1062, %1048
  %.pn1440 = phi { ptr, i32 } [ %1105, %1104 ], [ %.pn1437.pn, %1103 ], [ %.pn1432.pn.pn.pn, %1084 ], [ %.pn1427.pn.pn.pn, %1062 ], [ %.pn1423.pn.pn, %1048 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #9
  br label %1114

1114:                                             ; preds = %1113, %1037
  %.pn1440.pn = phi { ptr, i32 } [ %.pn1440, %1113 ], [ %.pn1421, %1037 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #9
  br label %1115

1115:                                             ; preds = %1114, %1012
  %.pn1440.pn.pn = phi { ptr, i32 } [ %.pn1440.pn, %1114 ], [ %.pn1419, %1012 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #9
  br label %1116

1116:                                             ; preds = %993, %995, %1115, %991
  %.pn1444.pn = phi { ptr, i32 } [ %992, %991 ], [ %996, %995 ], [ %994, %993 ], [ %.pn1440.pn.pn, %1115 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #9
  br label %2876

1117:                                             ; preds = %2
  %1118 = getelementptr inbounds i8, ptr %0, i64 10036
  %1119 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1118, i32 noundef 2, i32 noundef 2, i32 noundef 0)
  br i1 %1119, label %1125, label %1120

1120:                                             ; preds = %1117
  %1121 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1121, ptr noundef nonnull @.str.989)
          to label %1122 unwind label %1123

1122:                                             ; preds = %1120
  tail call void @__cxa_throw(ptr nonnull %1121, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1123:                                             ; preds = %1120
  %1124 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1121) #9
  br label %2876

1125:                                             ; preds = %1117
  %1126 = load i32, ptr %256, align 4, !tbaa !11
  %1127 = getelementptr inbounds i8, ptr %256, i64 4
  %1128 = load i32, ptr %1127, align 4, !tbaa !11
  %1129 = getelementptr inbounds i8, ptr %256, i64 8
  %1130 = load i32, ptr %1129, align 4, !tbaa !11
  %1131 = getelementptr inbounds i8, ptr %256, i64 12
  %1132 = load i32, ptr %1131, align 4, !tbaa !11
  %1133 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1126, i32 noundef %1128)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1132, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #9
  invoke void @_ZN11spirv_cross11CompilerMSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1130)
          to label %1134 unwind label %1148

1134:                                             ; preds = %1125
  %1135 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1130)
          to label %1136 unwind label %1150

1136:                                             ; preds = %1134
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #9
  %.not1403 = icmp eq ptr %1135, null
  br i1 %.not1403, label %.invoke, label %1137

1137:                                             ; preds = %1136
  %1138 = getelementptr inbounds i8, ptr %1135, i64 16
  %1139 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1138)
  br label %.invoke

.invoke:                                          ; preds = %1136, %1137
  %1140 = phi i32 [ %1139, %1137 ], [ %1130, %1136 ]
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1140, i1 noundef zeroext true)
          to label %1141 unwind label %1152

1141:                                             ; preds = %.invoke
  %1142 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1130)
          to label %1143 unwind label %1154

1143:                                             ; preds = %1141
  %1144 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1132)
          to label %1145 unwind label %1156

1145:                                             ; preds = %1143
  %1146 = getelementptr inbounds i8, ptr %1142, i64 252
  %1147 = load i32, ptr %1146, align 4, !tbaa !191
  switch i32 %1147, label %1192 [
    i32 0, label %1158
    i32 1, label %1166
    i32 3, label %1179
    i32 2, label %1179
  ]

1148:                                             ; preds = %1125
  %1149 = landingpad { ptr, i32 }
          cleanup
  br label %1216

1150:                                             ; preds = %1134
  %1151 = landingpad { ptr, i32 }
          cleanup
  br label %1215

1152:                                             ; preds = %.invoke
  %1153 = landingpad { ptr, i32 }
          cleanup
  br label %1214

1154:                                             ; preds = %1141
  %1155 = landingpad { ptr, i32 }
          cleanup
  br label %1213

1156:                                             ; preds = %.invoke1497, %1201, %1143
  %1157 = landingpad { ptr, i32 }
          cleanup
  br label %1213

1158:                                             ; preds = %1145
  %1159 = getelementptr inbounds i8, ptr %0, i64 10127
  %1160 = load i8, ptr %1159, align 1, !tbaa !207, !range !189, !noundef !190
  %1161 = trunc nuw i8 %1160 to i1
  br i1 %1161, label %1166, label %1162

1162:                                             ; preds = %1158
  %1163 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1163, ptr noundef nonnull @.str.990)
          to label %.invoke1497 unwind label %1164

1164:                                             ; preds = %1162
  %1165 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1163) #9
  br label %1213

1166:                                             ; preds = %1158, %1145
  %1167 = getelementptr inbounds i8, ptr %1144, i64 24
  %1168 = load i32, ptr %1167, align 8, !tbaa !198
  %1169 = icmp ugt i32 %1168, 2
  br i1 %1169, label %1170, label %1197

1170:                                             ; preds = %1166
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %1171 unwind label %1174

1171:                                             ; preds = %1170
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull @.str.164)
          to label %1172 unwind label %1176

1172:                                             ; preds = %1171
  %1173 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #9
  br label %1197

1174:                                             ; preds = %1170
  %1175 = landingpad { ptr, i32 }
          cleanup
  br label %1178

1176:                                             ; preds = %1171
  %1177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  br label %1178

1178:                                             ; preds = %1176, %1174
  %.pn1406 = phi { ptr, i32 } [ %1177, %1176 ], [ %1175, %1174 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #9
  br label %1213

1179:                                             ; preds = %1145, %1145
  %1180 = getelementptr inbounds i8, ptr %1144, i64 24
  %1181 = load i32, ptr %1180, align 8, !tbaa !198
  %1182 = icmp ugt i32 %1181, 3
  br i1 %1182, label %1183, label %1197

1183:                                             ; preds = %1179
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %1184 unwind label %1187

1184:                                             ; preds = %1183
  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.165)
          to label %1185 unwind label %1189

1185:                                             ; preds = %1184
  %1186 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #9
  br label %1197

1187:                                             ; preds = %1183
  %1188 = landingpad { ptr, i32 }
          cleanup
  br label %1191

1189:                                             ; preds = %1184
  %1190 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  br label %1191

1191:                                             ; preds = %1189, %1187
  %.pn1404 = phi { ptr, i32 } [ %1190, %1189 ], [ %1188, %1187 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #9
  br label %1213

1192:                                             ; preds = %1145
  %1193 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1193, ptr noundef nonnull @.str.991)
          to label %.invoke1497 unwind label %1195

.invoke1497:                                      ; preds = %1192, %1162
  %1194 = phi ptr [ %1163, %1162 ], [ %1193, %1192 ]
  invoke void @__cxa_throw(ptr nonnull %1194, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %.cont unwind label %1156

.cont:                                            ; preds = %.invoke1497
  unreachable

1195:                                             ; preds = %1192
  %1196 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1193) #9
  br label %1213

1197:                                             ; preds = %1179, %1185, %1166, %1172
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1128, i1 noundef zeroext true)
          to label %1198 unwind label %1203

1198:                                             ; preds = %1197
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcRS7_RA24_S8_SB_RA3_S8_SB_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(6) @.str.992, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 1 dereferenceable(24) @.str.993, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %1199 unwind label %1205

1199:                                             ; preds = %1198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1128, i1 noundef zeroext true)
          to label %1200 unwind label %1208

1200:                                             ; preds = %1199
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcRS7_RA26_S8_SB_RA3_S8_SB_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 1 dereferenceable(6) @.str.994, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 1 dereferenceable(26) @.str.995, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %1201 unwind label %1210

1201:                                             ; preds = %1200
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1128)
          to label %1202 unwind label %1156

1202:                                             ; preds = %1201
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #9
  br label %2874

1203:                                             ; preds = %1197
  %1204 = landingpad { ptr, i32 }
          cleanup
  br label %1207

1205:                                             ; preds = %1198
  %1206 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  br label %1207

1207:                                             ; preds = %1205, %1203
  %.pn1408 = phi { ptr, i32 } [ %1206, %1205 ], [ %1204, %1203 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #9
  br label %1213

1208:                                             ; preds = %1199
  %1209 = landingpad { ptr, i32 }
          cleanup
  br label %1212

1210:                                             ; preds = %1200
  %1211 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  br label %1212

1212:                                             ; preds = %1210, %1208
  %.pn1410 = phi { ptr, i32 } [ %1211, %1210 ], [ %1209, %1208 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #9
  br label %1213

1213:                                             ; preds = %1156, %1164, %1178, %1191, %1195, %1207, %1212, %1154
  %.pn1412.pn = phi { ptr, i32 } [ %1155, %1154 ], [ %1157, %1156 ], [ %1196, %1195 ], [ %.pn1410, %1212 ], [ %.pn1408, %1207 ], [ %.pn1404, %1191 ], [ %.pn1406, %1178 ], [ %1165, %1164 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  br label %1214

1214:                                             ; preds = %1213, %1152
  %.pn1412.pn.pn = phi { ptr, i32 } [ %.pn1412.pn, %1213 ], [ %1153, %1152 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #9
  br label %1215

1215:                                             ; preds = %1214, %1150
  %.pn1412.pn.pn.pn = phi { ptr, i32 } [ %.pn1412.pn.pn, %1214 ], [ %1151, %1150 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  br label %1216

1216:                                             ; preds = %1215, %1148
  %.pn1412.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1412.pn.pn.pn, %1215 ], [ %1149, %1148 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #9
  br label %2876

1217:                                             ; preds = %2
  %1218 = load i32, ptr %256, align 4, !tbaa !11
  %1219 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1218)
  %1220 = getelementptr inbounds i8, ptr %256, i64 4
  %1221 = load i32, ptr %1220, align 4, !tbaa !11
  %1222 = getelementptr inbounds i8, ptr %256, i64 8
  %1223 = load i32, ptr %1222, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1223, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #9
  %1224 = load ptr, ptr %0, align 8, !tbaa !193
  %1225 = getelementptr inbounds i8, ptr %1224, i64 152
  %1226 = load ptr, ptr %1225, align 8
  invoke void %1226(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1219, i32 noundef 0)
          to label %1227 unwind label %1235

1227:                                             ; preds = %1217
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull @.str.58)
          to label %1228 unwind label %1237

1228:                                             ; preds = %1227
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %1229 unwind label %1239

1229:                                             ; preds = %1228
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull @.str.996)
          to label %1230 unwind label %1241

1230:                                             ; preds = %1229
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #9
  %1231 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1223)
          to label %1232 unwind label %1246

1232:                                             ; preds = %1230
  %1233 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1218, i32 noundef %1221, ptr noundef nonnull align 8 dereferenceable(32) %69, i1 noundef zeroext %1231, i1 noundef zeroext false)
          to label %1234 unwind label %1246

1234:                                             ; preds = %1232
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #9
  br label %2874

1235:                                             ; preds = %1217
  %1236 = landingpad { ptr, i32 }
          cleanup
  br label %1245

1237:                                             ; preds = %1227
  %1238 = landingpad { ptr, i32 }
          cleanup
  br label %1244

1239:                                             ; preds = %1228
  %1240 = landingpad { ptr, i32 }
          cleanup
  br label %1243

1241:                                             ; preds = %1229
  %1242 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #9
  br label %1243

1243:                                             ; preds = %1241, %1239
  %.pn1397 = phi { ptr, i32 } [ %1242, %1241 ], [ %1240, %1239 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #9
  br label %1244

1244:                                             ; preds = %1243, %1237
  %.pn1397.pn = phi { ptr, i32 } [ %.pn1397, %1243 ], [ %1238, %1237 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #9
  br label %1245

1245:                                             ; preds = %1244, %1235
  %.pn1397.pn.pn = phi { ptr, i32 } [ %.pn1397.pn, %1244 ], [ %1236, %1235 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #9
  br label %1248

1246:                                             ; preds = %1232, %1230
  %1247 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #9
  br label %1248

1248:                                             ; preds = %1246, %1245
  %.pn1401 = phi { ptr, i32 } [ %1247, %1246 ], [ %.pn1397.pn.pn, %1245 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #9
  br label %2876

1249:                                             ; preds = %2
  %1250 = load i32, ptr %256, align 4, !tbaa !11
  %1251 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1250)
  %1252 = getelementptr inbounds i8, ptr %256, i64 4
  %1253 = load i32, ptr %1252, align 4, !tbaa !11
  %1254 = getelementptr inbounds i8, ptr %256, i64 8
  %1255 = load i32, ptr %1254, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1255, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %75) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #9
  %1256 = load ptr, ptr %0, align 8, !tbaa !193
  %1257 = getelementptr inbounds i8, ptr %1256, i64 152
  %1258 = load ptr, ptr %1257, align 8
  invoke void %1258(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1251, i32 noundef 0)
          to label %1259 unwind label %1267

1259:                                             ; preds = %1249
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull @.str.58)
          to label %1260 unwind label %1269

1260:                                             ; preds = %1259
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %1261 unwind label %1271

1261:                                             ; preds = %1260
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull @.str.997)
          to label %1262 unwind label %1273

1262:                                             ; preds = %1261
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #9
  %1263 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1255)
          to label %1264 unwind label %1278

1264:                                             ; preds = %1262
  %1265 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1250, i32 noundef %1253, ptr noundef nonnull align 8 dereferenceable(32) %74, i1 noundef zeroext %1263, i1 noundef zeroext false)
          to label %1266 unwind label %1278

1266:                                             ; preds = %1264
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #9
  br label %2874

1267:                                             ; preds = %1249
  %1268 = landingpad { ptr, i32 }
          cleanup
  br label %1277

1269:                                             ; preds = %1259
  %1270 = landingpad { ptr, i32 }
          cleanup
  br label %1276

1271:                                             ; preds = %1260
  %1272 = landingpad { ptr, i32 }
          cleanup
  br label %1275

1273:                                             ; preds = %1261
  %1274 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #9
  br label %1275

1275:                                             ; preds = %1273, %1271
  %.pn1391 = phi { ptr, i32 } [ %1274, %1273 ], [ %1272, %1271 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #9
  br label %1276

1276:                                             ; preds = %1275, %1269
  %.pn1391.pn = phi { ptr, i32 } [ %.pn1391, %1275 ], [ %1270, %1269 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #9
  br label %1277

1277:                                             ; preds = %1276, %1267
  %.pn1391.pn.pn = phi { ptr, i32 } [ %.pn1391.pn, %1276 ], [ %1268, %1267 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #9
  br label %1280

1278:                                             ; preds = %1264, %1262
  %1279 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #9
  br label %1280

1280:                                             ; preds = %1278, %1277
  %.pn1395 = phi { ptr, i32 } [ %1279, %1278 ], [ %.pn1391.pn.pn, %1277 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #9
  br label %2876

1281:                                             ; preds = %2
  %1282 = load i32, ptr %256, align 4, !tbaa !11
  %1283 = getelementptr inbounds i8, ptr %256, i64 4
  %1284 = load i32, ptr %1283, align 4, !tbaa !11
  %1285 = getelementptr inbounds i8, ptr %256, i64 8
  %1286 = load i32, ptr %1285, align 4, !tbaa !11
  %1287 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1286)
  %.not1383 = icmp eq ptr %1287, null
  br i1 %.not1383, label %1301, label %1288

1288:                                             ; preds = %1281
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %78) #9
  %1289 = getelementptr inbounds i8, ptr %1287, i64 16
  %1290 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1289)
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1290, i1 noundef zeroext true)
  %1291 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1282, i32 noundef %1284, ptr noundef nonnull align 8 dereferenceable(32) %78, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %1292 unwind label %1299

1292:                                             ; preds = %1288
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #9
  %1293 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1289)
  %1294 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1293)
  %.not1390 = icmp eq ptr %1294, null
  br i1 %.not1390, label %2874, label %1295

1295:                                             ; preds = %1292
  %1296 = getelementptr inbounds i8, ptr %1294, i64 8
  %1297 = getelementptr inbounds i8, ptr %1291, i64 52
  %1298 = load i32, ptr %1296, align 8, !tbaa !11
  store i32 %1298, ptr %1297, align 4, !tbaa !11
  br label %2874

1299:                                             ; preds = %1288
  %1300 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #9
  br label %2876

1301:                                             ; preds = %1281
  %1302 = load i32, ptr %1285, align 4, !tbaa !11
  %1303 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1302)
  %.not1384 = icmp eq ptr %1303, null
  br i1 %.not1384, label %1317, label %1304

1304:                                             ; preds = %1301
  %1305 = getelementptr inbounds i8, ptr %1303, i64 8
  %1306 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1305)
  %1307 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1306, i32 noundef 12)
  br i1 %1307, label %1308, label %1317

1308:                                             ; preds = %1304
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %80) #9
  %1309 = load i32, ptr %1285, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1309, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 1 dereferenceable(8) @.str.998)
          to label %1310 unwind label %1312

1310:                                             ; preds = %1308
  %1311 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1282, i32 noundef %1284, ptr noundef nonnull align 8 dereferenceable(32) %79, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %.thread1481 unwind label %1314

.thread1481:                                      ; preds = %1310
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #9
  br label %1323

1312:                                             ; preds = %1308
  %1313 = landingpad { ptr, i32 }
          cleanup
  br label %1316

1314:                                             ; preds = %1310
  %1315 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #9
  br label %1316

1316:                                             ; preds = %1314, %1312
  %.pn1385 = phi { ptr, i32 } [ %1315, %1314 ], [ %1313, %1312 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #9
  br label %2876

1317:                                             ; preds = %1304, %1301
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %81) #9
  %1318 = load i32, ptr %1285, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1318, i1 noundef zeroext true)
  %1319 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1282, i32 noundef %1284, ptr noundef nonnull align 8 dereferenceable(32) %81, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %1322 unwind label %1320

1320:                                             ; preds = %1317
  %1321 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #9
  br label %2876

1322:                                             ; preds = %1317
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #9
  br i1 %.not1384, label %2874, label %1323

1323:                                             ; preds = %.thread1481, %1322
  %.011531483 = phi ptr [ %1311, %.thread1481 ], [ %1319, %1322 ]
  %1324 = getelementptr inbounds i8, ptr %1303, i64 8
  %1325 = getelementptr inbounds i8, ptr %.011531483, i64 52
  %1326 = load i32, ptr %1324, align 8, !tbaa !11
  store i32 %1326, ptr %1325, align 4, !tbaa !11
  br label %2874

1327:                                             ; preds = %2
  %1328 = load i32, ptr %256, align 4, !tbaa !11
  %1329 = getelementptr inbounds i8, ptr %256, i64 4
  %1330 = load i32, ptr %1329, align 4, !tbaa !11
  %1331 = getelementptr inbounds i8, ptr %256, i64 8
  %1332 = load i32, ptr %1331, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %82) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %83) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1332, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 1 dereferenceable(18) @.str.999, ptr noundef nonnull align 8 dereferenceable(32) %83, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1333 unwind label %1338

1333:                                             ; preds = %1327
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %83) #9
  %1334 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1332)
          to label %1335 unwind label %1340

1335:                                             ; preds = %1333
  %1336 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1328, i32 noundef %1330, ptr noundef nonnull align 8 dereferenceable(32) %82, i1 noundef zeroext %1334, i1 noundef zeroext false)
          to label %1337 unwind label %1340

1337:                                             ; preds = %1335
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #9
  br label %2874

1338:                                             ; preds = %1327
  %1339 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %83) #9
  br label %1342

1340:                                             ; preds = %1335, %1333
  %1341 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  br label %1342

1342:                                             ; preds = %1340, %1338
  %.pn1381 = phi { ptr, i32 } [ %1341, %1340 ], [ %1339, %1338 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #9
  br label %2876

1343:                                             ; preds = %2, %2, %2
  %1344 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler22is_tessellation_shaderEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br i1 %1344, label %1345, label %.sink.split

1345:                                             ; preds = %1343
  %1346 = getelementptr inbounds i8, ptr %1, i64 8
  %1347 = load i32, ptr %1346, align 4, !tbaa !197
  %1348 = tail call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL30emit_tessellation_access_chainEPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef %256, i32 noundef %1347)
  br i1 %1348, label %1349, label %.sink.split

.sink.split:                                      ; preds = %1343, %1345
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1349

1349:                                             ; preds = %.sink.split, %1345
  %1350 = getelementptr inbounds i8, ptr %1, i64 8
  %1351 = load i32, ptr %1350, align 4, !tbaa !197
  tail call void @_ZN11spirv_cross11CompilerMSL31fix_up_interpolant_access_chainEPKjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef %256, i32 noundef %1351)
  br label %2874

1352:                                             ; preds = %2
  %1353 = load i32, ptr %256, align 4, !tbaa !11
  %1354 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1353)
  %1355 = load i32, ptr %256, align 4, !tbaa !11
  %1356 = tail call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL35is_out_of_bounds_tessellation_levelEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1355)
  br i1 %1356, label %2874, label %1357

1357:                                             ; preds = %1352
  %1358 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1358, label %1359, label %1379

1359:                                             ; preds = %1357
  %1360 = getelementptr inbounds i8, ptr %1354, i64 128
  %1361 = load i32, ptr %1360, align 8, !tbaa !208
  switch i32 %1361, label %1379 [
    i32 12, label %1362
    i32 2, label %1362
  ]

1362:                                             ; preds = %1359, %1359
  %1363 = getelementptr inbounds i8, ptr %0, i64 3176
  %1364 = load ptr, ptr %1363, align 8, !tbaa !209
  %.not1380 = icmp eq ptr %1364, null
  br i1 %.not1380, label %1365, label %1366

1365:                                             ; preds = %1362
  tail call void @__assert_fail(ptr noundef nonnull @.str.1000, ptr noundef nonnull @.str.25, i32 noundef 9582, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionE) #11
  unreachable

1366:                                             ; preds = %1362
  %1367 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19continue_block_typeERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1364)
  %1368 = and i32 %1367, -5
  %or.cond7.not = icmp eq i32 %1368, 0
  br i1 %or.cond7.not, label %1372, label %1369

1369:                                             ; preds = %1366
  %1370 = load ptr, ptr %1363, align 8, !tbaa !209
  %1371 = getelementptr inbounds i8, ptr %1370, i64 793
  store i8 1, ptr %1371, align 1, !tbaa !210
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %1372

1372:                                             ; preds = %1369, %1366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %84) #9
  %1373 = load ptr, ptr %0, align 8, !tbaa !193
  %1374 = getelementptr inbounds i8, ptr %1373, i64 160
  %1375 = load ptr, ptr %1374, align 8
  call void %1375(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 23, i32 noundef 1)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1001, ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1376 unwind label %1377

1376:                                             ; preds = %1372
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #9
  call void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br label %1379

1377:                                             ; preds = %1372
  %1378 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #9
  br label %2876

1379:                                             ; preds = %1359, %1376, %1357
  %1380 = load i32, ptr %256, align 4, !tbaa !11
  %1381 = getelementptr inbounds i8, ptr %256, i64 4
  %1382 = load i32, ptr %1381, align 4, !tbaa !11
  %1383 = call noundef zeroext i1 @_ZN11spirv_cross11CompilerMSL27maybe_emit_array_assignmentEjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1380, i32 noundef %1382)
  br i1 %1383, label %1385, label %1384

1384:                                             ; preds = %1379
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1385

1385:                                             ; preds = %1384, %1379
  %1386 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL25needs_frag_discard_checksEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1386, label %1387, label %2874

1387:                                             ; preds = %1385
  %1388 = getelementptr inbounds i8, ptr %1354, i64 128
  %1389 = load i32, ptr %1388, align 8, !tbaa !208
  switch i32 %1389, label %2874 [
    i32 12, label %1390
    i32 2, label %1390
  ]

1390:                                             ; preds = %1387, %1387
  call void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br label %2874

1391:                                             ; preds = %2
  %1392 = load i32, ptr %256, align 4, !tbaa !11
  %1393 = getelementptr inbounds i8, ptr %256, i64 4
  %1394 = load i32, ptr %1393, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL12emit_barrierEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 0, i32 noundef %1392, i32 noundef %1394)
  br label %2874

1395:                                             ; preds = %2
  %1396 = getelementptr inbounds i8, ptr %0, i64 11712
  %1397 = load i32, ptr %1396, align 8, !tbaa !232
  %.not1379 = icmp eq i32 %1397, 225
  br i1 %.not1379, label %2874, label %1398

1398:                                             ; preds = %1395
  %1399 = load i32, ptr %256, align 4, !tbaa !11
  %1400 = getelementptr inbounds i8, ptr %256, i64 4
  %1401 = load i32, ptr %1400, align 4, !tbaa !11
  %1402 = getelementptr inbounds i8, ptr %256, i64 8
  %1403 = load i32, ptr %1402, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross11CompilerMSL12emit_barrierEjjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1399, i32 noundef %1401, i32 noundef %1403)
  br label %2874

1404:                                             ; preds = %2
  %1405 = load i32, ptr %256, align 4, !tbaa !11
  %1406 = getelementptr inbounds i8, ptr %256, i64 4
  %1407 = load i32, ptr %1406, align 4, !tbaa !11
  %1408 = getelementptr inbounds i8, ptr %256, i64 8
  %1409 = load i32, ptr %1408, align 4, !tbaa !11
  %1410 = getelementptr inbounds i8, ptr %256, i64 12
  %1411 = load i32, ptr %1410, align 4, !tbaa !11
  %1412 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1405)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %85) #9
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1412)
  %1413 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull @.str.58)
          to label %.preheader unwind label %1417

.preheader:                                       ; preds = %1404
  %1414 = getelementptr inbounds i8, ptr %1412, i64 28
  %1415 = load i32, ptr %1414, align 4, !tbaa !233
  %.not1494 = icmp eq i32 %1415, 0
  br i1 %.not1494, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %1444, %.preheader
  %1416 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull @.str.53)
          to label %1447 unwind label %1417

1417:                                             ; preds = %1456, %1455, %1452, %1450, %1447, %._crit_edge, %1404
  %1418 = landingpad { ptr, i32 }
          cleanup
  br label %1458

.lr.ph:                                           ; preds = %.preheader, %1444
  %.011541493 = phi i32 [ %1427, %1444 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %86) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1409, i1 noundef zeroext true)
          to label %1419 unwind label %1432

1419:                                             ; preds = %.lr.ph
  %1420 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 8 dereferenceable(32) %86)
          to label %1421 unwind label %1434

1421:                                             ; preds = %1419
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #9
  %1422 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull @.str.1002)
          to label %1423 unwind label %1437

1423:                                             ; preds = %1421
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %87) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1411, i32 noundef %.011541493)
          to label %1424 unwind label %1439

1424:                                             ; preds = %1423
  %1425 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 8 dereferenceable(32) %87)
          to label %1426 unwind label %1441

1426:                                             ; preds = %1424
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #9
  %1427 = add nuw i32 %.011541493, 1
  %1428 = load i32, ptr %1414, align 4, !tbaa !233
  %1429 = icmp ult i32 %1427, %1428
  br i1 %1429, label %1430, label %1444

1430:                                             ; preds = %1426
  %1431 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull @.str.55)
          to label %._crit_edge1495 unwind label %1437

._crit_edge1495:                                  ; preds = %1430
  %.pre = load i32, ptr %1414, align 4, !tbaa !233
  br label %1444

1432:                                             ; preds = %.lr.ph
  %1433 = landingpad { ptr, i32 }
          cleanup
  br label %1436

1434:                                             ; preds = %1419
  %1435 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #9
  br label %1436

1436:                                             ; preds = %1434, %1432
  %.pn1372 = phi { ptr, i32 } [ %1435, %1434 ], [ %1433, %1432 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #9
  br label %1458

1437:                                             ; preds = %1430, %1421
  %1438 = landingpad { ptr, i32 }
          cleanup
  br label %1458

1439:                                             ; preds = %1423
  %1440 = landingpad { ptr, i32 }
          cleanup
  br label %1443

1441:                                             ; preds = %1424
  %1442 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  br label %1443

1443:                                             ; preds = %1441, %1439
  %.pn1374 = phi { ptr, i32 } [ %1442, %1441 ], [ %1440, %1439 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #9
  br label %1458

1444:                                             ; preds = %._crit_edge1495, %1426
  %1445 = phi i32 [ %.pre, %._crit_edge1495 ], [ %1428, %1426 ]
  %1446 = icmp ult i32 %1427, %1445
  br i1 %1446, label %.lr.ph, label %._crit_edge, !llvm.loop !234

1447:                                             ; preds = %._crit_edge
  %1448 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1409)
          to label %1449 unwind label %1417

1449:                                             ; preds = %1447
  br i1 %1448, label %1450, label %1452

1450:                                             ; preds = %1449
  %1451 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1411)
          to label %1452 unwind label %1417

1452:                                             ; preds = %1450, %1449
  %1453 = phi i1 [ false, %1449 ], [ %1451, %1450 ]
  %1454 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1405, i32 noundef %1407, ptr noundef nonnull align 8 dereferenceable(32) %85, i1 noundef zeroext %1453, i1 noundef zeroext false)
          to label %1455 unwind label %1417

1455:                                             ; preds = %1452
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1407, i32 noundef %1409)
          to label %1456 unwind label %1417

1456:                                             ; preds = %1455
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1407, i32 noundef %1411)
          to label %1457 unwind label %1417

1457:                                             ; preds = %1456
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %85) #9
  br label %2874

1458:                                             ; preds = %1436, %1437, %1443, %1417
  %.pn1376.pn = phi { ptr, i32 } [ %1418, %1417 ], [ %1438, %1437 ], [ %.pn1374, %1443 ], [ %.pn1372, %1436 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %85) #9
  br label %2876

1459:                                             ; preds = %2, %2
  %1460 = getelementptr inbounds i8, ptr %0, i64 10141
  %1461 = load i8, ptr %1460, align 1, !tbaa !41, !range !189, !noundef !190
  %1462 = trunc nuw i8 %1461 to i1
  br i1 %1462, label %1469, label %1463

1463:                                             ; preds = %1459
  %1464 = getelementptr inbounds i8, ptr %256, i64 4
  %1465 = load i32, ptr %1464, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %88, i32 noundef %1465)
  %1466 = load i32, ptr %88, align 4
  %1467 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1466, i32 noundef 42)
  br i1 %1467, label %1469, label %1468

1468:                                             ; preds = %1463
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

1469:                                             ; preds = %1463, %1459
  %1470 = icmp eq i32 %259, 145
  %1471 = select i1 %1470, i64 2, i64 3
  %1472 = getelementptr inbounds i32, ptr %256, i64 %1471
  %1473 = load i32, ptr %1472, align 4, !tbaa !11
  %1474 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1473)
  %.not1363 = icmp eq ptr %1474, null
  br i1 %.not1363, label %1539, label %1475

1475:                                             ; preds = %1469
  %1476 = getelementptr inbounds i8, ptr %1474, i64 57
  %1477 = load i8, ptr %1476, align 1, !tbaa !236, !range !189, !noundef !190
  %1478 = trunc nuw i8 %1477 to i1
  br i1 %1478, label %1479, label %1539

1479:                                             ; preds = %1475
  store i8 0, ptr %1476, align 1, !tbaa !236
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %89) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  %1480 = getelementptr inbounds i8, ptr %256, i64 12
  br i1 %1470, label %1481, label %1497

1481:                                             ; preds = %1479
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %90) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %91) #9
  %1482 = load i32, ptr %1480, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1482, i1 noundef zeroext true)
          to label %1483 unwind label %1489

1483:                                             ; preds = %1481
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %92) #9
  %1484 = getelementptr inbounds i8, ptr %256, i64 8
  %1485 = load i32, ptr %1484, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1485)
          to label %1486 unwind label %1491

1486:                                             ; preds = %1483
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 1 dereferenceable(21) @.str.1003, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1487 unwind label %1493

1487:                                             ; preds = %1486
  %1488 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %89, ptr noundef nonnull align 8 dereferenceable(32) %90) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #9
  br label %1513

1489:                                             ; preds = %1481
  %1490 = landingpad { ptr, i32 }
          cleanup
  br label %1496

1491:                                             ; preds = %1483
  %1492 = landingpad { ptr, i32 }
          cleanup
  br label %1495

1493:                                             ; preds = %1486
  %1494 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #9
  br label %1495

1495:                                             ; preds = %1493, %1491
  %.pn1367 = phi { ptr, i32 } [ %1494, %1493 ], [ %1492, %1491 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #9
  br label %1496

1496:                                             ; preds = %1495, %1489
  %.pn1367.pn = phi { ptr, i32 } [ %.pn1367, %1495 ], [ %1490, %1489 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #9
  br label %1538

1497:                                             ; preds = %1479
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %93) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %94) #9
  %1498 = load i32, ptr %1480, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1498)
          to label %1499 unwind label %1505

1499:                                             ; preds = %1497
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %95) #9
  %1500 = getelementptr inbounds i8, ptr %256, i64 8
  %1501 = load i32, ptr %1500, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1501, i1 noundef zeroext true)
          to label %1502 unwind label %1507

1502:                                             ; preds = %1499
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 1 dereferenceable(21) @.str.1004, ptr noundef nonnull align 8 dereferenceable(32) %94, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1503 unwind label %1509

1503:                                             ; preds = %1502
  %1504 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %89, ptr noundef nonnull align 8 dereferenceable(32) %93) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #9
  br label %1513

1505:                                             ; preds = %1497
  %1506 = landingpad { ptr, i32 }
          cleanup
  br label %1512

1507:                                             ; preds = %1499
  %1508 = landingpad { ptr, i32 }
          cleanup
  br label %1511

1509:                                             ; preds = %1502
  %1510 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  br label %1511

1511:                                             ; preds = %1509, %1507
  %.pn1364 = phi { ptr, i32 } [ %1510, %1509 ], [ %1508, %1507 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #9
  br label %1512

1512:                                             ; preds = %1511, %1505
  %.pn1364.pn = phi { ptr, i32 } [ %.pn1364, %1511 ], [ %1506, %1505 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #9
  br label %1538

1513:                                             ; preds = %1503, %1487
  %1514 = getelementptr inbounds i8, ptr %256, i64 8
  %1515 = load i32, ptr %1514, align 4, !tbaa !11
  %1516 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1515)
          to label %1517 unwind label %1536

1517:                                             ; preds = %1513
  br i1 %1516, label %1518, label %1522

1518:                                             ; preds = %1517
  %1519 = getelementptr inbounds i8, ptr %256, i64 12
  %1520 = load i32, ptr %1519, align 4, !tbaa !11
  %1521 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1520)
          to label %1522 unwind label %1536

1522:                                             ; preds = %1518, %1517
  %1523 = phi i1 [ false, %1517 ], [ %1521, %1518 ]
  %1524 = load i32, ptr %256, align 4, !tbaa !11
  %1525 = getelementptr inbounds i8, ptr %256, i64 4
  %1526 = load i32, ptr %1525, align 4, !tbaa !11
  %1527 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1524, i32 noundef %1526, ptr noundef nonnull align 8 dereferenceable(32) %89, i1 noundef zeroext %1523, i1 noundef zeroext false)
          to label %1528 unwind label %1536

1528:                                             ; preds = %1522
  store i8 1, ptr %1476, align 1, !tbaa !236
  %1529 = load i32, ptr %1525, align 4, !tbaa !11
  %1530 = load i32, ptr %1514, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1529, i32 noundef %1530)
          to label %1531 unwind label %1536

1531:                                             ; preds = %1528
  %1532 = load i32, ptr %1525, align 4, !tbaa !11
  %1533 = getelementptr inbounds i8, ptr %256, i64 12
  %1534 = load i32, ptr %1533, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1532, i32 noundef %1534)
          to label %1535 unwind label %1536

1535:                                             ; preds = %1531
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #9
  br label %2874

1536:                                             ; preds = %1531, %1528, %1522, %1518, %1513
  %1537 = landingpad { ptr, i32 }
          cleanup
  br label %1538

1538:                                             ; preds = %1536, %1512, %1496
  %.pn1370 = phi { ptr, i32 } [ %1537, %1536 ], [ %.pn1367.pn, %1496 ], [ %.pn1364.pn, %1512 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #9
  br label %2876

1539:                                             ; preds = %1475, %1469
  %1540 = load i32, ptr %256, align 4, !tbaa !11
  %1541 = getelementptr inbounds i8, ptr %256, i64 4
  %1542 = load i32, ptr %1541, align 4, !tbaa !11
  %1543 = getelementptr inbounds i8, ptr %256, i64 8
  %1544 = load i32, ptr %1543, align 4, !tbaa !11
  %1545 = getelementptr inbounds i8, ptr %256, i64 12
  %1546 = load i32, ptr %1545, align 4, !tbaa !11
  br i1 %1470, label %1547, label %1548

1547:                                             ; preds = %1539
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1540, i32 noundef %1542, i32 noundef %1544, i32 noundef %1546, ptr noundef nonnull @.str.1005)
  br label %2874

1548:                                             ; preds = %1539
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1540, i32 noundef %1542, i32 noundef %1544, i32 noundef %1546, ptr noundef nonnull @.str.1006)
  br label %2874

1549:                                             ; preds = %2
  %1550 = getelementptr inbounds i8, ptr %0, i64 10141
  %1551 = load i8, ptr %1550, align 1, !tbaa !41, !range !189, !noundef !190
  %1552 = trunc nuw i8 %1551 to i1
  br i1 %1552, label %1559, label %1553

1553:                                             ; preds = %1549
  %1554 = getelementptr inbounds i8, ptr %256, i64 4
  %1555 = load i32, ptr %1554, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %96, i32 noundef %1555)
  %1556 = load i32, ptr %96, align 4
  %1557 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1556, i32 noundef 42)
  br i1 %1557, label %1559, label %1558

1558:                                             ; preds = %1553
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

1559:                                             ; preds = %1553, %1549
  %1560 = getelementptr inbounds i8, ptr %256, i64 8
  %1561 = load i32, ptr %1560, align 4, !tbaa !11
  %1562 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1561)
  %1563 = getelementptr inbounds i8, ptr %256, i64 12
  %1564 = load i32, ptr %1563, align 4, !tbaa !11
  %1565 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1564)
  %1566 = icmp ne ptr %1562, null
  %1567 = icmp ne ptr %1565, null
  %or.cond9 = and i1 %1566, %1567
  br i1 %or.cond9, label %1568, label %1620

1568:                                             ; preds = %1559
  %1569 = getelementptr inbounds i8, ptr %1562, i64 57
  %1570 = load i8, ptr %1569, align 1, !tbaa !236, !range !189, !noundef !190
  %1571 = trunc nuw i8 %1570 to i1
  br i1 %1571, label %1572, label %1620

1572:                                             ; preds = %1568
  %1573 = getelementptr inbounds i8, ptr %1565, i64 57
  %1574 = load i8, ptr %1573, align 1, !tbaa !236, !range !189, !noundef !190
  %1575 = trunc nuw i8 %1574 to i1
  br i1 %1575, label %1576, label %1620

1576:                                             ; preds = %1572
  store i8 0, ptr %1569, align 1, !tbaa !236
  store i8 0, ptr %1573, align 1, !tbaa !236
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %97) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %98) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %99) #9
  %1577 = load i32, ptr %1563, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1577)
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %98, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %99)
          to label %1578 unwind label %1603

1578:                                             ; preds = %1576
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %100) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %101) #9
  %1579 = load i32, ptr %1560, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1579)
          to label %1580 unwind label %1605

1580:                                             ; preds = %1578
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %101)
          to label %1581 unwind label %1607

1581:                                             ; preds = %1580
  invoke void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 1 dereferenceable(21) @.str.1007, ptr noundef nonnull align 8 dereferenceable(32) %98, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %100, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1582 unwind label %1609

1582:                                             ; preds = %1581
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %101) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %100) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %98) #9
  %1583 = load i32, ptr %1560, align 4, !tbaa !11
  %1584 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1583)
          to label %1585 unwind label %1614

1585:                                             ; preds = %1582
  br i1 %1584, label %1586, label %1589

1586:                                             ; preds = %1585
  %1587 = load i32, ptr %1563, align 4, !tbaa !11
  %1588 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1587)
          to label %1589 unwind label %1614

1589:                                             ; preds = %1586, %1585
  %1590 = phi i1 [ false, %1585 ], [ %1588, %1586 ]
  %1591 = load i32, ptr %256, align 4, !tbaa !11
  %1592 = getelementptr inbounds i8, ptr %256, i64 4
  %1593 = load i32, ptr %1592, align 4, !tbaa !11
  %1594 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1591, i32 noundef %1593, ptr noundef nonnull align 8 dereferenceable(32) %97, i1 noundef zeroext %1590, i1 noundef zeroext false)
          to label %1595 unwind label %1616

1595:                                             ; preds = %1589
  %1596 = getelementptr inbounds i8, ptr %1594, i64 57
  store i8 1, ptr %1596, align 1, !tbaa !236
  store i8 1, ptr %1569, align 1, !tbaa !236
  store i8 1, ptr %1573, align 1, !tbaa !236
  %1597 = load i32, ptr %1592, align 4, !tbaa !11
  %1598 = load i32, ptr %1560, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1597, i32 noundef %1598)
          to label %1599 unwind label %1616

1599:                                             ; preds = %1595
  %1600 = load i32, ptr %1592, align 4, !tbaa !11
  %1601 = load i32, ptr %1563, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1600, i32 noundef %1601)
          to label %1602 unwind label %1616

1602:                                             ; preds = %1599
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %97) #9
  br label %2874

1603:                                             ; preds = %1576
  %1604 = landingpad { ptr, i32 }
          cleanup
  br label %1613

1605:                                             ; preds = %1578
  %1606 = landingpad { ptr, i32 }
          cleanup
  br label %1612

1607:                                             ; preds = %1580
  %1608 = landingpad { ptr, i32 }
          cleanup
  br label %1611

1609:                                             ; preds = %1581
  %1610 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #9
  br label %1611

1611:                                             ; preds = %1609, %1607
  %.pn1356 = phi { ptr, i32 } [ %1610, %1609 ], [ %1608, %1607 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #9
  br label %1612

1612:                                             ; preds = %1611, %1605
  %.pn1356.pn = phi { ptr, i32 } [ %.pn1356, %1611 ], [ %1606, %1605 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %101) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %100) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #9
  br label %1613

1613:                                             ; preds = %1612, %1603
  %.pn1356.pn.pn = phi { ptr, i32 } [ %.pn1356.pn, %1612 ], [ %1604, %1603 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %98) #9
  br label %1619

1614:                                             ; preds = %1586, %1582
  %1615 = landingpad { ptr, i32 }
          cleanup
  br label %1618

1616:                                             ; preds = %1599, %1595, %1589
  %1617 = landingpad { ptr, i32 }
          cleanup
  br label %1618

1618:                                             ; preds = %1616, %1614
  %.pn1360 = phi { ptr, i32 } [ %1617, %1616 ], [ %1615, %1614 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #9
  br label %1619

1619:                                             ; preds = %1618, %1613
  %.pn1360.pn = phi { ptr, i32 } [ %.pn1360, %1618 ], [ %.pn1356.pn.pn, %1613 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %97) #9
  br label %2876

1620:                                             ; preds = %1572, %1568, %1559
  %1621 = load i32, ptr %256, align 4, !tbaa !11
  %1622 = getelementptr inbounds i8, ptr %256, i64 4
  %1623 = load i32, ptr %1622, align 4, !tbaa !11
  %1624 = load i32, ptr %1560, align 4, !tbaa !11
  %1625 = load i32, ptr %1563, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1621, i32 noundef %1623, i32 noundef %1624, i32 noundef %1625, ptr noundef nonnull @.str.1008)
  br label %2874

1626:                                             ; preds = %2, %2
  %1627 = load i32, ptr %256, align 4, !tbaa !11
  %1628 = getelementptr inbounds i8, ptr %256, i64 4
  %1629 = load i32, ptr %1628, align 4, !tbaa !11
  %1630 = getelementptr inbounds i8, ptr %256, i64 8
  %1631 = load i32, ptr %1630, align 4, !tbaa !11
  %1632 = getelementptr inbounds i8, ptr %256, i64 12
  %1633 = load i32, ptr %1632, align 4, !tbaa !11
  %1634 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1627)
  %1635 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1627, i32 noundef %1629)
  %1636 = getelementptr inbounds i8, ptr %1634, i64 136
  %1637 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1636, i64 noundef 1) #9
  %1638 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1637)
  %1639 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1638)
  %1640 = icmp eq i32 %259, 149
  br i1 %1640, label %1641, label %1694

1641:                                             ; preds = %1626
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %102) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1629, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %103) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1634, i32 noundef 0)
          to label %1642 unwind label %1660

1642:                                             ; preds = %1641
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %104) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1631, i1 noundef zeroext true)
          to label %1643 unwind label %1662

1643:                                             ; preds = %1642
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %105) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %105, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1633, i1 noundef zeroext true)
          to label %1644 unwind label %1664

1644:                                             ; preds = %1643
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 1 dereferenceable(4) @.str.70, ptr noundef nonnull align 8 dereferenceable(32) %105, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %1645 unwind label %1666

1645:                                             ; preds = %1644
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %103) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %102) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %106) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1629, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %107) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %107, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1634, i32 noundef 1)
          to label %1646 unwind label %1671

1646:                                             ; preds = %1645
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %108) #9
  %1647 = load ptr, ptr %0, align 8, !tbaa !193
  %1648 = getelementptr inbounds i8, ptr %1647, i64 152
  %1649 = load ptr, ptr %1648, align 8
  invoke void %1649(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %108, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1639, i32 noundef 0)
          to label %1650 unwind label %1673

1650:                                             ; preds = %1646
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %109) #9
  %1651 = load ptr, ptr %0, align 8, !tbaa !193
  %1652 = getelementptr inbounds i8, ptr %1651, i64 152
  %1653 = load ptr, ptr %1652, align 8
  invoke void %1653(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1639, i32 noundef 0)
          to label %1654 unwind label %1675

1654:                                             ; preds = %1650
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %110) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1629, i1 noundef zeroext true)
          to label %1655 unwind label %1677

1655:                                             ; preds = %1654
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %111) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %111, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1634, i32 noundef 0)
          to label %1656 unwind label %1679

1656:                                             ; preds = %1655
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %112) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1631, i1 noundef zeroext true)
          to label %1657 unwind label %1681

1657:                                             ; preds = %1656
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %113) #9
  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) %0, i32 noundef %1633, i1 noundef zeroext true)
          to label %1658 unwind label %1683

1658:                                             ; preds = %1657
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA11_S8_S7_RA6_S8_S7_SE_S7_SA_S7_RA9_S8_S7_RA3_S8_S7_RA4_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %107, ptr noundef nonnull align 1 dereferenceable(11) @.str.1009, ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull align 1 dereferenceable(6) @.str.1010, ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 1 dereferenceable(6) @.str.1011, ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %111, ptr noundef nonnull align 1 dereferenceable(9) @.str.1012, ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %113, ptr noundef nonnull align 1 dereferenceable(4) @.str.1013)
          to label %1659 unwind label %1685

1659:                                             ; preds = %1658
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %113) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %111) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %110) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %109) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %108) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %107) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #9
  br label %2874

1660:                                             ; preds = %1641
  %1661 = landingpad { ptr, i32 }
          cleanup
  br label %1670

1662:                                             ; preds = %1642
  %1663 = landingpad { ptr, i32 }
          cleanup
  br label %1669

1664:                                             ; preds = %1643
  %1665 = landingpad { ptr, i32 }
          cleanup
  br label %1668

1666:                                             ; preds = %1644
  %1667 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #9
  br label %1668

1668:                                             ; preds = %1666, %1664
  %.pn1343 = phi { ptr, i32 } [ %1667, %1666 ], [ %1665, %1664 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  br label %1669

1669:                                             ; preds = %1668, %1662
  %.pn1343.pn = phi { ptr, i32 } [ %.pn1343, %1668 ], [ %1663, %1662 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  br label %1670

1670:                                             ; preds = %1669, %1660
  %.pn1343.pn.pn = phi { ptr, i32 } [ %.pn1343.pn, %1669 ], [ %1661, %1660 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %103) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %102) #9
  br label %2876

1671:                                             ; preds = %1645
  %1672 = landingpad { ptr, i32 }
          cleanup
  br label %1693

1673:                                             ; preds = %1646
  %1674 = landingpad { ptr, i32 }
          cleanup
  br label %1692

1675:                                             ; preds = %1650
  %1676 = landingpad { ptr, i32 }
          cleanup
  br label %1691

1677:                                             ; preds = %1654
  %1678 = landingpad { ptr, i32 }
          cleanup
  br label %1690

1679:                                             ; preds = %1655
  %1680 = landingpad { ptr, i32 }
          cleanup
  br label %1689

1681:                                             ; preds = %1656
  %1682 = landingpad { ptr, i32 }
          cleanup
  br label %1688

1683:                                             ; preds = %1657
  %1684 = landingpad { ptr, i32 }
          cleanup
  br label %1687

1685:                                             ; preds = %1658
  %1686 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  br label %1687

1687:                                             ; preds = %1685, %1683
  %.pn1347 = phi { ptr, i32 } [ %1686, %1685 ], [ %1684, %1683 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %113) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  br label %1688

1688:                                             ; preds = %1687, %1681
  %.pn1347.pn = phi { ptr, i32 } [ %.pn1347, %1687 ], [ %1682, %1681 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %111) #9
  br label %1689

1689:                                             ; preds = %1688, %1679
  %.pn1347.pn.pn = phi { ptr, i32 } [ %.pn1347.pn, %1688 ], [ %1680, %1679 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %111) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #9
  br label %1690

1690:                                             ; preds = %1689, %1677
  %.pn1347.pn.pn.pn = phi { ptr, i32 } [ %.pn1347.pn.pn, %1689 ], [ %1678, %1677 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %110) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  br label %1691

1691:                                             ; preds = %1690, %1675
  %.pn1347.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1347.pn.pn.pn, %1690 ], [ %1676, %1675 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %109) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  br label %1692

1692:                                             ; preds = %1691, %1673
  %.pn1347.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1347.pn.pn.pn.pn, %1691 ], [ %1674, %1673 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %108) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #9
  br label %1693

1693:                                             ; preds = %1692, %1671
  %.pn1347.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1347.pn.pn.pn.pn.pn, %1692 ], [ %1672, %1671 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %107) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #9
  br label %2876

1694:                                             ; preds = %1626
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %114) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1629, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %115) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1634, i32 noundef 0)
          to label %1695 unwind label %1711

1695:                                             ; preds = %1694
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %116) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1631, i1 noundef zeroext true)
          to label %1696 unwind label %1713

1696:                                             ; preds = %1695
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %117) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1633, i1 noundef zeroext true)
          to label %1697 unwind label %1715

1697:                                             ; preds = %1696
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull align 1 dereferenceable(4) @.str.1014, ptr noundef nonnull align 8 dereferenceable(32) %117, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %1698 unwind label %1717

1698:                                             ; preds = %1697
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %117) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %116) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %115) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %118) #9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %118, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1629, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %119) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %119, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1634, i32 noundef 1)
          to label %1699 unwind label %1722

1699:                                             ; preds = %1698
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %120) #9
  %1700 = load ptr, ptr %0, align 8, !tbaa !193
  %1701 = getelementptr inbounds i8, ptr %1700, i64 152
  %1702 = load ptr, ptr %1701, align 8
  invoke void %1702(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1639, i32 noundef 0)
          to label %1703 unwind label %1724

1703:                                             ; preds = %1699
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %121) #9
  %1704 = load ptr, ptr %0, align 8, !tbaa !193
  %1705 = getelementptr inbounds i8, ptr %1704, i64 152
  %1706 = load ptr, ptr %1705, align 8
  invoke void %1706(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %121, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1639, i32 noundef 0)
          to label %1707 unwind label %1726

1707:                                             ; preds = %1703
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %122) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %122, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1631, i1 noundef zeroext true)
          to label %1708 unwind label %1728

1708:                                             ; preds = %1707
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %123) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %123, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1633, i1 noundef zeroext true)
          to label %1709 unwind label %1730

1709:                                             ; preds = %1708
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA11_S8_S7_RA6_S8_S7_SE_S7_RA5_S8_S7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %118, ptr noundef nonnull align 1 dereferenceable(2) @.str.66, ptr noundef nonnull align 8 dereferenceable(32) %119, ptr noundef nonnull align 1 dereferenceable(11) @.str.1009, ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull align 1 dereferenceable(6) @.str.1010, ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 1 dereferenceable(6) @.str.1011, ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull align 1 dereferenceable(5) @.str.1015, ptr noundef nonnull align 8 dereferenceable(32) %123, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %1710 unwind label %1732

1710:                                             ; preds = %1709
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %123) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %122) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %120) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %119) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %118) #9
  br label %2874

1711:                                             ; preds = %1694
  %1712 = landingpad { ptr, i32 }
          cleanup
  br label %1721

1713:                                             ; preds = %1695
  %1714 = landingpad { ptr, i32 }
          cleanup
  br label %1720

1715:                                             ; preds = %1696
  %1716 = landingpad { ptr, i32 }
          cleanup
  br label %1719

1717:                                             ; preds = %1697
  %1718 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  br label %1719

1719:                                             ; preds = %1717, %1715
  %.pn1333 = phi { ptr, i32 } [ %1718, %1717 ], [ %1716, %1715 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %117) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  br label %1720

1720:                                             ; preds = %1719, %1713
  %.pn1333.pn = phi { ptr, i32 } [ %.pn1333, %1719 ], [ %1714, %1713 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %116) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  br label %1721

1721:                                             ; preds = %1720, %1711
  %.pn1333.pn.pn = phi { ptr, i32 } [ %.pn1333.pn, %1720 ], [ %1712, %1711 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %115) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #9
  br label %2876

1722:                                             ; preds = %1698
  %1723 = landingpad { ptr, i32 }
          cleanup
  br label %1738

1724:                                             ; preds = %1699
  %1725 = landingpad { ptr, i32 }
          cleanup
  br label %1737

1726:                                             ; preds = %1703
  %1727 = landingpad { ptr, i32 }
          cleanup
  br label %1736

1728:                                             ; preds = %1707
  %1729 = landingpad { ptr, i32 }
          cleanup
  br label %1735

1730:                                             ; preds = %1708
  %1731 = landingpad { ptr, i32 }
          cleanup
  br label %1734

1732:                                             ; preds = %1709
  %1733 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #9
  br label %1734

1734:                                             ; preds = %1732, %1730
  %.pn1337 = phi { ptr, i32 } [ %1733, %1732 ], [ %1731, %1730 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %123) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  br label %1735

1735:                                             ; preds = %1734, %1728
  %.pn1337.pn = phi { ptr, i32 } [ %.pn1337, %1734 ], [ %1729, %1728 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %122) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #9
  br label %1736

1736:                                             ; preds = %1735, %1726
  %.pn1337.pn.pn = phi { ptr, i32 } [ %.pn1337.pn, %1735 ], [ %1727, %1726 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  br label %1737

1737:                                             ; preds = %1736, %1724
  %.pn1337.pn.pn.pn = phi { ptr, i32 } [ %.pn1337.pn.pn, %1736 ], [ %1725, %1724 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %120) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  br label %1738

1738:                                             ; preds = %1737, %1722
  %.pn1337.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1337.pn.pn.pn, %1737 ], [ %1723, %1722 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %119) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %118) #9
  br label %2876

1739:                                             ; preds = %2, %2
  %1740 = load i32, ptr %256, align 4, !tbaa !11
  %1741 = getelementptr inbounds i8, ptr %256, i64 4
  %1742 = load i32, ptr %1741, align 4, !tbaa !11
  %1743 = getelementptr inbounds i8, ptr %256, i64 8
  %1744 = load i32, ptr %1743, align 4, !tbaa !11
  %1745 = getelementptr inbounds i8, ptr %256, i64 12
  %1746 = load i32, ptr %1745, align 4, !tbaa !11
  %1747 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1740)
  %1748 = getelementptr inbounds i8, ptr %1747, i64 136
  %1749 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1748, i64 noundef 0) #9
  %1750 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1749)
  %1751 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1750)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %124) #9
  %1752 = icmp eq i32 %259, 152
  %1753 = select i1 %1752, i32 %261, i32 %262
  store i32 %1753, ptr %124, align 4, !tbaa !238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %125) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %126) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind nonnull writable sret(%"struct.spirv_cross::SPIRType") align 8 %127, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %125, ptr noundef nonnull align 8 dereferenceable(32) %126, ptr noundef nonnull align 4 dereferenceable(4) %124, i32 noundef %1744, i32 noundef %1746, i1 noundef zeroext false)
          to label %1754 unwind label %1766

1754:                                             ; preds = %1739
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %127) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %128) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %129) #9
  %1755 = load ptr, ptr %0, align 8, !tbaa !193
  %1756 = getelementptr inbounds i8, ptr %1755, i64 152
  %1757 = load ptr, ptr %1756, align 8
  invoke void %1757(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %129, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1747, i32 noundef 0)
          to label %1758 unwind label %1768

1758:                                             ; preds = %1754
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %130) #9
  %1759 = load ptr, ptr %0, align 8, !tbaa !193
  %1760 = getelementptr inbounds i8, ptr %1759, i64 152
  %1761 = load ptr, ptr %1760, align 8
  invoke void %1761(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %130, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1751, i32 noundef 0)
          to label %1762 unwind label %1770

1762:                                             ; preds = %1758
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_RS9_SB_SC_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %128, ptr noundef nonnull align 1 dereferenceable(16) @.str.1016, ptr noundef nonnull align 8 dereferenceable(32) %129, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %130, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %125, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %126, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1763 unwind label %1772

1763:                                             ; preds = %1762
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %130) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %129) #9
  %1764 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1740, i32 noundef %1742, ptr noundef nonnull align 8 dereferenceable(32) %128, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %1765 unwind label %1776

1765:                                             ; preds = %1763
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %128) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %126) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %125) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %124) #9
  br label %2874

1766:                                             ; preds = %1739
  %1767 = landingpad { ptr, i32 }
          cleanup
  br label %1779

1768:                                             ; preds = %1754
  %1769 = landingpad { ptr, i32 }
          cleanup
  br label %1775

1770:                                             ; preds = %1758
  %1771 = landingpad { ptr, i32 }
          cleanup
  br label %1774

1772:                                             ; preds = %1762
  %1773 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #9
  br label %1774

1774:                                             ; preds = %1772, %1770
  %.pn1327 = phi { ptr, i32 } [ %1773, %1772 ], [ %1771, %1770 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %130) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #9
  br label %1775

1775:                                             ; preds = %1774, %1768
  %.pn1327.pn = phi { ptr, i32 } [ %.pn1327, %1774 ], [ %1769, %1768 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %129) #9
  br label %1778

1776:                                             ; preds = %1763
  %1777 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #9
  br label %1778

1778:                                             ; preds = %1776, %1775
  %.pn1330 = phi { ptr, i32 } [ %1777, %1776 ], [ %.pn1327.pn, %1775 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %128) #9
  br label %1779

1779:                                             ; preds = %1778, %1766
  %.pn1330.pn = phi { ptr, i32 } [ %.pn1330, %1778 ], [ %1767, %1766 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %126) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %125) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %124) #9
  br label %2876

1780:                                             ; preds = %2
  %1781 = getelementptr inbounds i8, ptr %256, i64 8
  %1782 = load i32, ptr %1781, align 4, !tbaa !11
  %1783 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1782)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %131) #9
  %1784 = getelementptr inbounds i8, ptr %256, i64 12
  %1785 = load i32, ptr %1784, align 4, !tbaa !11
  %1786 = tail call noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1783, i32 noundef %1785)
  store i32 %1786, ptr %131, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %132) #9
  %1787 = load i32, ptr %1784, align 4, !tbaa !11
  %1788 = tail call noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1783, i32 noundef %1787)
  store i32 %1788, ptr %132, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %133) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %134) #9
  %1789 = load i32, ptr %1781, align 4, !tbaa !11
  call void @_ZN11spirv_cross11CompilerMSL25to_buffer_size_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1789)
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_RjRA5_S1_SC_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %133, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %134, ptr noundef nonnull align 1 dereferenceable(4) @.str.1014, ptr noundef nonnull align 4 dereferenceable(4) %131, ptr noundef nonnull align 1 dereferenceable(5) @.str.1018, ptr noundef nonnull align 4 dereferenceable(4) %132)
          to label %1790 unwind label %1796

1790:                                             ; preds = %1780
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %134) #9
  %1791 = load i32, ptr %256, align 4, !tbaa !11
  %1792 = getelementptr inbounds i8, ptr %256, i64 4
  %1793 = load i32, ptr %1792, align 4, !tbaa !11
  %1794 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1791, i32 noundef %1793, ptr noundef nonnull align 8 dereferenceable(32) %133, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %1795 unwind label %1798

1795:                                             ; preds = %1790
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %132) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %131) #9
  br label %2874

1796:                                             ; preds = %1780
  %1797 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %134) #9
  br label %1800

1798:                                             ; preds = %1790
  %1799 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  br label %1800

1800:                                             ; preds = %1798, %1796
  %.pn1325 = phi { ptr, i32 } [ %1799, %1798 ], [ %1797, %1796 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %132) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %131) #9
  br label %2876

1801:                                             ; preds = %2, %2, %2, %2, %2, %2
  %1802 = load ptr, ptr %0, align 8, !tbaa !193
  %1803 = getelementptr inbounds i8, ptr %1802, i64 144
  %1804 = load ptr, ptr %1803, align 8
  tail call void %1804(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

1805:                                             ; preds = %2
  %1806 = load i32, ptr %256, align 4, !tbaa !11
  %1807 = getelementptr inbounds i8, ptr %256, i64 4
  %1808 = load i32, ptr %1807, align 4, !tbaa !11
  %1809 = getelementptr inbounds i8, ptr %256, i64 8
  %1810 = load i32, ptr %1809, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1806, i32 noundef %1808, i32 noundef %1810, ptr noundef nonnull @.str.1019)
  br label %2874

1811:                                             ; preds = %2
  %1812 = load i32, ptr %256, align 4, !tbaa !11
  %1813 = getelementptr inbounds i8, ptr %256, i64 4
  %1814 = load i32, ptr %1813, align 4, !tbaa !11
  %1815 = getelementptr inbounds i8, ptr %256, i64 8
  %1816 = load i32, ptr %1815, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1812, i32 noundef %1814, i32 noundef %1816, ptr noundef nonnull @.str.1020)
  br label %2874

1817:                                             ; preds = %2, %2
  %1818 = load i32, ptr %256, align 4, !tbaa !11
  %1819 = getelementptr inbounds i8, ptr %256, i64 4
  %1820 = load i32, ptr %1819, align 4, !tbaa !11
  %1821 = getelementptr inbounds i8, ptr %256, i64 8
  %1822 = load i32, ptr %1821, align 4, !tbaa !11
  %1823 = getelementptr inbounds i8, ptr %256, i64 12
  %1824 = load i32, ptr %1823, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1818, i32 noundef %1820, i32 noundef %1822, i32 noundef %1824, ptr noundef nonnull @.str.1021)
  br label %2874

1825:                                             ; preds = %2, %2
  %1826 = load i32, ptr %256, align 4, !tbaa !11
  %1827 = getelementptr inbounds i8, ptr %256, i64 4
  %1828 = load i32, ptr %1827, align 4, !tbaa !11
  %1829 = getelementptr inbounds i8, ptr %256, i64 8
  %1830 = load i32, ptr %1829, align 4, !tbaa !11
  %1831 = getelementptr inbounds i8, ptr %256, i64 12
  %1832 = load i32, ptr %1831, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1826, i32 noundef %1828, i32 noundef %1830, i32 noundef %1832, ptr noundef nonnull @.str.1022)
  br label %2874

1833:                                             ; preds = %2, %2
  %1834 = load i32, ptr %256, align 4, !tbaa !11
  %1835 = getelementptr inbounds i8, ptr %256, i64 4
  %1836 = load i32, ptr %1835, align 4, !tbaa !11
  %1837 = getelementptr inbounds i8, ptr %256, i64 8
  %1838 = load i32, ptr %1837, align 4, !tbaa !11
  %1839 = getelementptr inbounds i8, ptr %256, i64 12
  %1840 = load i32, ptr %1839, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1834, i32 noundef %1836, i32 noundef %1838, i32 noundef %1840, ptr noundef nonnull @.str.1023)
  br label %2874

1841:                                             ; preds = %2, %2
  %1842 = load i32, ptr %256, align 4, !tbaa !11
  %1843 = getelementptr inbounds i8, ptr %256, i64 4
  %1844 = load i32, ptr %1843, align 4, !tbaa !11
  %1845 = getelementptr inbounds i8, ptr %256, i64 8
  %1846 = load i32, ptr %1845, align 4, !tbaa !11
  %1847 = getelementptr inbounds i8, ptr %256, i64 12
  %1848 = load i32, ptr %1847, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1842, i32 noundef %1844, i32 noundef %1846, i32 noundef %1848, ptr noundef nonnull @.str.1024)
  br label %2874

1849:                                             ; preds = %2, %2
  %1850 = load i32, ptr %256, align 4, !tbaa !11
  %1851 = getelementptr inbounds i8, ptr %256, i64 4
  %1852 = load i32, ptr %1851, align 4, !tbaa !11
  %1853 = getelementptr inbounds i8, ptr %256, i64 8
  %1854 = load i32, ptr %1853, align 4, !tbaa !11
  %1855 = getelementptr inbounds i8, ptr %256, i64 12
  %1856 = load i32, ptr %1855, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1850, i32 noundef %1852, i32 noundef %1854, i32 noundef %1856, ptr noundef nonnull @.str.1025)
  br label %2874

1857:                                             ; preds = %2
  %1858 = load i32, ptr %256, align 4, !tbaa !11
  %1859 = getelementptr inbounds i8, ptr %256, i64 4
  %1860 = load i32, ptr %1859, align 4, !tbaa !11
  %1861 = getelementptr inbounds i8, ptr %256, i64 8
  %1862 = load i32, ptr %1861, align 4, !tbaa !11
  %1863 = getelementptr inbounds i8, ptr %256, i64 12
  %1864 = load i32, ptr %1863, align 4, !tbaa !11
  %1865 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1862)
  br i1 %1865, label %1866, label %1868

1866:                                             ; preds = %1857
  %1867 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1864)
  br label %1868

1868:                                             ; preds = %1866, %1857
  %1869 = phi i1 [ false, %1857 ], [ %1867, %1866 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %135) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %136) #9
  call 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) %0, i32 noundef %1862, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %137) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1864, i1 noundef zeroext true)
          to label %1870 unwind label %1874

1870:                                             ; preds = %1868
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 1 dereferenceable(11) @.str.1026, ptr noundef nonnull align 8 dereferenceable(32) %136, ptr noundef nonnull align 1 dereferenceable(16) @.str.1027, ptr noundef nonnull align 8 dereferenceable(32) %137, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %1871 unwind label %1876

1871:                                             ; preds = %1870
  %1872 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1858, i32 noundef %1860, ptr noundef nonnull align 8 dereferenceable(32) %135, i1 noundef zeroext %1869, i1 noundef zeroext false)
          to label %1873 unwind label %1878

1873:                                             ; preds = %1871
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1860, i32 noundef %1862)
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1860, i32 noundef %1864)
  br label %2874

1874:                                             ; preds = %1868
  %1875 = landingpad { ptr, i32 }
          cleanup
  br label %1881

1876:                                             ; preds = %1870
  %1877 = landingpad { ptr, i32 }
          cleanup
  br label %1880

1878:                                             ; preds = %1871
  %1879 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  br label %1880

1880:                                             ; preds = %1878, %1876
  %.pn1322 = phi { ptr, i32 } [ %1879, %1878 ], [ %1877, %1876 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #9
  br label %1881

1881:                                             ; preds = %1880, %1874
  %.pn1322.pn = phi { ptr, i32 } [ %.pn1322, %1880 ], [ %1875, %1874 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #9
  br label %2876

1882:                                             ; preds = %2
  %1883 = load i32, ptr %256, align 4, !tbaa !11
  %1884 = getelementptr inbounds i8, ptr %256, i64 4
  %1885 = load i32, ptr %1884, align 4, !tbaa !11
  %1886 = getelementptr inbounds i8, ptr %256, i64 8
  %1887 = load i32, ptr %1886, align 4, !tbaa !11
  %1888 = getelementptr inbounds i8, ptr %256, i64 12
  %1889 = load i32, ptr %1888, align 4, !tbaa !11
  %1890 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1887)
  br i1 %1890, label %1891, label %1893

1891:                                             ; preds = %1882
  %1892 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1889)
  br label %1893

1893:                                             ; preds = %1891, %1882
  %1894 = phi i1 [ false, %1882 ], [ %1892, %1891 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %138) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %139) #9
  call 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) %0, i32 noundef %1887, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %140) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %140, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1889, i1 noundef zeroext true)
          to label %1895 unwind label %1899

1895:                                             ; preds = %1893
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull align 1 dereferenceable(13) @.str.1029, ptr noundef nonnull align 8 dereferenceable(32) %139, ptr noundef nonnull align 1 dereferenceable(18) @.str.1030, ptr noundef nonnull align 8 dereferenceable(32) %140, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %1896 unwind label %1901

1896:                                             ; preds = %1895
  %1897 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1883, i32 noundef %1885, ptr noundef nonnull align 8 dereferenceable(32) %138, i1 noundef zeroext %1894, i1 noundef zeroext false)
          to label %1898 unwind label %1903

1898:                                             ; preds = %1896
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %140) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %138) #9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1885, i32 noundef %1887)
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1885, i32 noundef %1889)
  br label %2874

1899:                                             ; preds = %1893
  %1900 = landingpad { ptr, i32 }
          cleanup
  br label %1906

1901:                                             ; preds = %1895
  %1902 = landingpad { ptr, i32 }
          cleanup
  br label %1905

1903:                                             ; preds = %1896
  %1904 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  br label %1905

1905:                                             ; preds = %1903, %1901
  %.pn1319 = phi { ptr, i32 } [ %1904, %1903 ], [ %1902, %1901 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #9
  br label %1906

1906:                                             ; preds = %1905, %1899
  %.pn1319.pn = phi { ptr, i32 } [ %.pn1319, %1905 ], [ %1900, %1899 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %140) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %138) #9
  br label %2876

1907:                                             ; preds = %2
  %1908 = getelementptr inbounds i8, ptr %0, i64 10036
  %1909 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1908, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %1909, label %1915, label %1910

1910:                                             ; preds = %1907
  %1911 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1911, ptr noundef nonnull @.str.1031)
          to label %1912 unwind label %1913

1912:                                             ; preds = %1910
  tail call void @__cxa_throw(ptr nonnull %1911, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1913:                                             ; preds = %1910
  %1914 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1911) #9
  br label %2876

1915:                                             ; preds = %1907
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

1916:                                             ; preds = %2
  %1917 = getelementptr inbounds i8, ptr %0, i64 10036
  %1918 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options6is_iosEv(ptr noundef nonnull align 4 dereferenceable(137) %1917)
  br i1 %1918, label %1919, label %1926

1919:                                             ; preds = %1916
  %1920 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1917, i32 noundef 2, i32 noundef 3, i32 noundef 0)
  br i1 %1920, label %1926, label %1921

1921:                                             ; preds = %1919
  %1922 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1922, ptr noundef nonnull @.str.1032)
          to label %1923 unwind label %1924

1923:                                             ; preds = %1921
  tail call void @__cxa_throw(ptr nonnull %1922, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1924:                                             ; preds = %1921
  %1925 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1922) #9
  br label %2876

1926:                                             ; preds = %1919, %1916
  %1927 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options8is_macosEv(ptr noundef nonnull align 4 dereferenceable(137) %1917)
  br i1 %1927, label %1928, label %1935

1928:                                             ; preds = %1926
  %1929 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1917, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  br i1 %1929, label %1935, label %1930

1930:                                             ; preds = %1928
  %1931 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1931, ptr noundef nonnull @.str.1033)
          to label %1932 unwind label %1933

1932:                                             ; preds = %1930
  tail call void @__cxa_throw(ptr nonnull %1931, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1933:                                             ; preds = %1930
  %1934 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1931) #9
  br label %2876

1935:                                             ; preds = %1926, %1928
  %1936 = load i32, ptr %256, align 4, !tbaa !11
  %1937 = getelementptr inbounds i8, ptr %256, i64 4
  %1938 = load i32, ptr %1937, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %141) #9
  %1939 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL38needs_manual_helper_invocation_updatesEv(ptr noundef nonnull align 8 dereferenceable(12482) %0)
  br i1 %1939, label %1940, label %1944

1940:                                             ; preds = %1935
  %1941 = load ptr, ptr %0, align 8, !tbaa !193
  %1942 = getelementptr inbounds i8, ptr %1941, i64 160
  %1943 = load ptr, ptr %1942, align 8
  call void %1943(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %141, ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef 23, i32 noundef 1)
  br label %1945

1944:                                             ; preds = %1935
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %142) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %142) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %141, ptr noundef nonnull @.str.1034, ptr noundef nonnull align 1 dereferenceable(1) %142)
          to label %1945 unwind label %.thread1484

1945:                                             ; preds = %1944, %1940
  %1946 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1936, i32 noundef %1938, ptr noundef nonnull align 8 dereferenceable(32) %141, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1947 unwind label %1950

1947:                                             ; preds = %1945
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #9
  br i1 %1939, label %.critedge1475, label %1948

1948:                                             ; preds = %1947
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %142) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %142) #9
  br label %.critedge1475

.critedge1475:                                    ; preds = %1947, %1948
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %141) #9
  br label %2874

.thread1484:                                      ; preds = %1944
  %1949 = landingpad { ptr, i32 }
          cleanup
  br label %1952

1950:                                             ; preds = %1945
  %1951 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #9
  br i1 %1939, label %.critedge1477, label %1952

1952:                                             ; preds = %.thread1484, %1950
  %.pn13171488 = phi { ptr, i32 } [ %1949, %.thread1484 ], [ %1951, %1950 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %142) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %142) #9
  br label %.critedge1477

.critedge1477:                                    ; preds = %1950, %1952
  %.pn13171487 = phi { ptr, i32 } [ %1951, %1950 ], [ %.pn13171488, %1952 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %141) #9
  br label %2876

1953:                                             ; preds = %2, %2
  %1954 = getelementptr inbounds i8, ptr %0, i64 10036
  %1955 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL7Options20supports_msl_versionEjjj(ptr noundef nonnull align 4 dereferenceable(137) %1954, i32 noundef 2, i32 noundef 0, i32 noundef 0)
  br i1 %1955, label %2874, label %1956

1956:                                             ; preds = %1953
  %1957 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1957, ptr noundef nonnull @.str.1035)
          to label %1958 unwind label %1959

1958:                                             ; preds = %1956
  tail call void @__cxa_throw(ptr nonnull %1957, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1959:                                             ; preds = %1956
  %1960 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1957) #9
  br label %2876

1961:                                             ; preds = %2
  %1962 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1962, ptr noundef nonnull @.str.1036)
          to label %1963 unwind label %1964

1963:                                             ; preds = %1961
  tail call void @__cxa_throw(ptr nonnull %1962, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1964:                                             ; preds = %1961
  %1965 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1962) #9
  br label %2876

1966:                                             ; preds = %2
  %1967 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1967, ptr noundef nonnull @.str.1037)
          to label %1968 unwind label %1969

1968:                                             ; preds = %1966
  tail call void @__cxa_throw(ptr nonnull %1967, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1969:                                             ; preds = %1966
  %1970 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1967) #9
  br label %2876

1971:                                             ; preds = %2
  %1972 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1972)
  %1973 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1973)
  tail call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i8 noundef zeroext 67)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %143) #9
  %1974 = load i32, ptr %256, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %143, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1974, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %144) #9
  %1975 = getelementptr inbounds i8, ptr %256, i64 16
  %1976 = load i32, ptr %1975, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %144, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1976, i1 noundef zeroext true)
          to label %1977 unwind label %1997

1977:                                             ; preds = %1971
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %145) #9
  %1978 = getelementptr inbounds i8, ptr %256, i64 24
  %1979 = load i32, ptr %1978, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %145, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1979, i1 noundef zeroext true)
          to label %1980 unwind label %1999

1980:                                             ; preds = %1977
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %146) #9
  %1981 = getelementptr inbounds i8, ptr %256, i64 20
  %1982 = load i32, ptr %1981, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %146, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1982, i1 noundef zeroext true)
          to label %1983 unwind label %2001

1983:                                             ; preds = %1980
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %147) #9
  %1984 = getelementptr inbounds i8, ptr %256, i64 28
  %1985 = load i32, ptr %1984, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %147, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1985, i1 noundef zeroext true)
          to label %1986 unwind label %2003

1986:                                             ; preds = %1983
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %148) #9
  %1987 = getelementptr inbounds i8, ptr %256, i64 4
  %1988 = load i32, ptr %1987, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %148, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1988, i1 noundef zeroext true)
          to label %1989 unwind label %2005

1989:                                             ; preds = %1986
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %149) #9
  %1990 = getelementptr inbounds i8, ptr %256, i64 12
  %1991 = load i32, ptr %1990, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %149, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1991, i1 noundef zeroext true)
          to label %1992 unwind label %2007

1992:                                             ; preds = %1989
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %150) #9
  %1993 = getelementptr inbounds i8, ptr %256, i64 8
  %1994 = load i32, ptr %1993, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %150, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1994, i1 noundef zeroext true)
          to label %1995 unwind label %2009

1995:                                             ; preds = %1992
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcRA5_S8_S7_RA3_S8_S7_SE_S7_SE_S7_RA4_S8_S7_SE_S7_RA29_S8_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull align 1 dereferenceable(8) @.str.1038, ptr noundef nonnull align 1 dereferenceable(5) @.str.1039, 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(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull align 1 dereferenceable(4) @.str.1040, ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 1 dereferenceable(29) @.str.1041, ptr noundef nonnull align 8 dereferenceable(32) %150, ptr noundef nonnull align 1 dereferenceable(4) @.str.1013)
          to label %1996 unwind label %2011

1996:                                             ; preds = %1995
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %150) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %149) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %146) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %144) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %143) #9
  br label %2874

1997:                                             ; preds = %1971
  %1998 = landingpad { ptr, i32 }
          cleanup
  br label %2019

1999:                                             ; preds = %1977
  %2000 = landingpad { ptr, i32 }
          cleanup
  br label %2018

2001:                                             ; preds = %1980
  %2002 = landingpad { ptr, i32 }
          cleanup
  br label %2017

2003:                                             ; preds = %1983
  %2004 = landingpad { ptr, i32 }
          cleanup
  br label %2016

2005:                                             ; preds = %1986
  %2006 = landingpad { ptr, i32 }
          cleanup
  br label %2015

2007:                                             ; preds = %1989
  %2008 = landingpad { ptr, i32 }
          cleanup
  br label %2014

2009:                                             ; preds = %1992
  %2010 = landingpad { ptr, i32 }
          cleanup
  br label %2013

2011:                                             ; preds = %1995
  %2012 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #9
  br label %2013

2013:                                             ; preds = %2011, %2009
  %.pn1309 = phi { ptr, i32 } [ %2012, %2011 ], [ %2010, %2009 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %150) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #9
  br label %2014

2014:                                             ; preds = %2013, %2007
  %.pn1309.pn = phi { ptr, i32 } [ %.pn1309, %2013 ], [ %2008, %2007 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %149) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #9
  br label %2015

2015:                                             ; preds = %2014, %2005
  %.pn1309.pn.pn = phi { ptr, i32 } [ %.pn1309.pn, %2014 ], [ %2006, %2005 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #9
  br label %2016

2016:                                             ; preds = %2015, %2003
  %.pn1309.pn.pn.pn = phi { ptr, i32 } [ %.pn1309.pn.pn, %2015 ], [ %2004, %2003 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #9
  br label %2017

2017:                                             ; preds = %2016, %2001
  %.pn1309.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1309.pn.pn.pn, %2016 ], [ %2002, %2001 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %146) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #9
  br label %2018

2018:                                             ; preds = %2017, %1999
  %.pn1309.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1309.pn.pn.pn.pn, %2017 ], [ %2000, %1999 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #9
  br label %2019

2019:                                             ; preds = %2018, %1997
  %.pn1309.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1309.pn.pn.pn.pn.pn, %2018 ], [ %1998, %1997 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %144) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %143) #9
  br label %2876

2020:                                             ; preds = %2
  %2021 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2021)
  %2022 = getelementptr inbounds i8, ptr %256, i64 8
  %2023 = load i32, ptr %2022, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2023)
  %2024 = load i32, ptr %256, align 4, !tbaa !11
  %2025 = getelementptr inbounds i8, ptr %256, i64 4
  %2026 = load i32, ptr %2025, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %151) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %152) #9
  %2027 = load i32, ptr %2022, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %152, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2027, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcEEES6_DpOT_(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 align 1 dereferenceable(8) @.str.1042)
          to label %2028 unwind label %2031

2028:                                             ; preds = %2020
  %2029 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2024, i32 noundef %2026, ptr noundef nonnull align 8 dereferenceable(32) %151, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2030 unwind label %2033

2030:                                             ; preds = %2028
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %151) #9
  br label %2874

2031:                                             ; preds = %2020
  %2032 = landingpad { ptr, i32 }
          cleanup
  br label %2035

2033:                                             ; preds = %2028
  %2034 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #9
  br label %2035

2035:                                             ; preds = %2033, %2031
  %.pn1307 = phi { ptr, i32 } [ %2034, %2033 ], [ %2032, %2031 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %151) #9
  br label %2876

2036:                                             ; preds = %2
  %2037 = getelementptr inbounds i8, ptr %256, i64 8
  %2038 = load i32, ptr %2037, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2038)
  %2039 = load i32, ptr %256, align 4, !tbaa !11
  %2040 = getelementptr inbounds i8, ptr %256, i64 4
  %2041 = load i32, ptr %2040, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %153) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %154) #9
  %2042 = load i32, ptr %2037, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %154, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2042, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA24_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 8 dereferenceable(32) %154, ptr noundef nonnull align 1 dereferenceable(24) @.str.1043)
          to label %2043 unwind label %2046

2043:                                             ; preds = %2036
  %2044 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2039, i32 noundef %2041, ptr noundef nonnull align 8 dereferenceable(32) %153, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2045 unwind label %2048

2045:                                             ; preds = %2043
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %153) #9
  br label %2874

2046:                                             ; preds = %2036
  %2047 = landingpad { ptr, i32 }
          cleanup
  br label %2050

2048:                                             ; preds = %2043
  %2049 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  br label %2050

2050:                                             ; preds = %2048, %2046
  %.pn1305 = phi { ptr, i32 } [ %2049, %2048 ], [ %2047, %2046 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %153) #9
  br label %2876

2051:                                             ; preds = %2
  %2052 = getelementptr inbounds i8, ptr %256, i64 8
  %2053 = load i32, ptr %2052, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2053)
  %2054 = load i32, ptr %256, align 4, !tbaa !11
  %2055 = getelementptr inbounds i8, ptr %256, i64 4
  %2056 = load i32, ptr %2055, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %155) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %156) #9
  %2057 = load i32, ptr %2052, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %156, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2057, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %155, ptr noundef nonnull align 8 dereferenceable(32) %156, ptr noundef nonnull align 1 dereferenceable(30) @.str.1044)
          to label %2058 unwind label %2061

2058:                                             ; preds = %2051
  %2059 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2054, i32 noundef %2056, ptr noundef nonnull align 8 dereferenceable(32) %155, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2060 unwind label %2063

2060:                                             ; preds = %2058
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %156) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %155) #9
  br label %2874

2061:                                             ; preds = %2051
  %2062 = landingpad { ptr, i32 }
          cleanup
  br label %2065

2063:                                             ; preds = %2058
  %2064 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #9
  br label %2065

2065:                                             ; preds = %2063, %2061
  %.pn1303 = phi { ptr, i32 } [ %2064, %2063 ], [ %2062, %2061 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %156) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %155) #9
  br label %2876

2066:                                             ; preds = %2
  %2067 = getelementptr inbounds i8, ptr %256, i64 8
  %2068 = load i32, ptr %2067, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2068)
  %2069 = load i32, ptr %256, align 4, !tbaa !11
  %2070 = getelementptr inbounds i8, ptr %256, i64 4
  %2071 = load i32, ptr %2070, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %157) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %158) #9
  %2072 = load i32, ptr %2067, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %158, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2072, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA33_KcEEES6_DpOT_(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 align 1 dereferenceable(33) @.str.1045)
          to label %2073 unwind label %2076

2073:                                             ; preds = %2066
  %2074 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2069, i32 noundef %2071, ptr noundef nonnull align 8 dereferenceable(32) %157, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2075 unwind label %2078

2075:                                             ; preds = %2073
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #9
  br label %2874

2076:                                             ; preds = %2066
  %2077 = landingpad { ptr, i32 }
          cleanup
  br label %2080

2078:                                             ; preds = %2073
  %2079 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  br label %2080

2080:                                             ; preds = %2078, %2076
  %.pn1301 = phi { ptr, i32 } [ %2079, %2078 ], [ %2077, %2076 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #9
  br label %2876

2081:                                             ; preds = %2
  %2082 = getelementptr inbounds i8, ptr %256, i64 8
  %2083 = load i32, ptr %2082, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2083)
  %2084 = getelementptr inbounds i8, ptr %256, i64 12
  %2085 = load i32, ptr %2084, align 4, !tbaa !11
  %2086 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2085)
  %2087 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2086, i32 noundef 0, i32 noundef 0)
  %2088 = icmp eq i32 %2087, 0
  %2089 = load i32, ptr %256, align 4, !tbaa !11
  %2090 = getelementptr inbounds i8, ptr %256, i64 4
  %2091 = load i32, ptr %2090, align 4, !tbaa !11
  br i1 %2088, label %2092, label %2102

2092:                                             ; preds = %2081
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %159) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %160) #9
  %2093 = load i32, ptr %2082, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %160, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2093, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %159, ptr noundef nonnull align 8 dereferenceable(32) %160, ptr noundef nonnull align 1 dereferenceable(29) @.str.1046)
          to label %2094 unwind label %2097

2094:                                             ; preds = %2092
  %2095 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2089, i32 noundef %2091, ptr noundef nonnull align 8 dereferenceable(32) %159, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2096 unwind label %2099

2096:                                             ; preds = %2094
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %160) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %159) #9
  br label %2874

2097:                                             ; preds = %2092
  %2098 = landingpad { ptr, i32 }
          cleanup
  br label %2101

2099:                                             ; preds = %2094
  %2100 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #9
  br label %2101

2101:                                             ; preds = %2099, %2097
  %.pn1299 = phi { ptr, i32 } [ %2100, %2099 ], [ %2098, %2097 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %160) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %159) #9
  br label %2876

2102:                                             ; preds = %2081
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %161) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %162) #9
  %2103 = load i32, ptr %2082, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %162, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2103, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %161, ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull align 1 dereferenceable(29) @.str.1047)
          to label %2104 unwind label %2107

2104:                                             ; preds = %2102
  %2105 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2089, i32 noundef %2091, ptr noundef nonnull align 8 dereferenceable(32) %161, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2106 unwind label %2109

2106:                                             ; preds = %2104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %161) #9
  br label %2874

2107:                                             ; preds = %2102
  %2108 = landingpad { ptr, i32 }
          cleanup
  br label %2111

2109:                                             ; preds = %2104
  %2110 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #9
  br label %2111

2111:                                             ; preds = %2109, %2107
  %.pn1297 = phi { ptr, i32 } [ %2110, %2109 ], [ %2108, %2107 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %161) #9
  br label %2876

2112:                                             ; preds = %2
  %2113 = getelementptr inbounds i8, ptr %256, i64 8
  %2114 = load i32, ptr %2113, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2114)
  %2115 = getelementptr inbounds i8, ptr %256, i64 12
  %2116 = load i32, ptr %2115, align 4, !tbaa !11
  %2117 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2116)
  %2118 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2117, i32 noundef 0, i32 noundef 0)
  %2119 = icmp eq i32 %2118, 0
  %2120 = load i32, ptr %256, align 4, !tbaa !11
  %2121 = getelementptr inbounds i8, ptr %256, i64 4
  %2122 = load i32, ptr %2121, align 4, !tbaa !11
  br i1 %2119, label %2123, label %2133

2123:                                             ; preds = %2112
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %163) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %164) #9
  %2124 = load i32, ptr %2113, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %164, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2124, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %163, ptr noundef nonnull align 8 dereferenceable(32) %164, ptr noundef nonnull align 1 dereferenceable(34) @.str.1048)
          to label %2125 unwind label %2128

2125:                                             ; preds = %2123
  %2126 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2120, i32 noundef %2122, ptr noundef nonnull align 8 dereferenceable(32) %163, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2127 unwind label %2130

2127:                                             ; preds = %2125
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %164) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %163) #9
  br label %2874

2128:                                             ; preds = %2123
  %2129 = landingpad { ptr, i32 }
          cleanup
  br label %2132

2130:                                             ; preds = %2125
  %2131 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #9
  br label %2132

2132:                                             ; preds = %2130, %2128
  %.pn1295 = phi { ptr, i32 } [ %2131, %2130 ], [ %2129, %2128 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %164) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %163) #9
  br label %2876

2133:                                             ; preds = %2112
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %165) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %166) #9
  %2134 = load i32, ptr %2113, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %166, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2134, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %165, ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef nonnull align 1 dereferenceable(34) @.str.1049)
          to label %2135 unwind label %2138

2135:                                             ; preds = %2133
  %2136 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2120, i32 noundef %2122, ptr noundef nonnull align 8 dereferenceable(32) %165, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2137 unwind label %2140

2137:                                             ; preds = %2135
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %166) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %165) #9
  br label %2874

2138:                                             ; preds = %2133
  %2139 = landingpad { ptr, i32 }
          cleanup
  br label %2142

2140:                                             ; preds = %2135
  %2141 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #9
  br label %2142

2142:                                             ; preds = %2140, %2138
  %.pn1293 = phi { ptr, i32 } [ %2141, %2140 ], [ %2139, %2138 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %166) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %165) #9
  br label %2876

2143:                                             ; preds = %2
  %2144 = getelementptr inbounds i8, ptr %256, i64 8
  %2145 = load i32, ptr %2144, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2145)
  %2146 = getelementptr inbounds i8, ptr %256, i64 12
  %2147 = load i32, ptr %2146, align 4, !tbaa !11
  %2148 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2147)
  %2149 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2148, i32 noundef 0, i32 noundef 0)
  %2150 = icmp eq i32 %2149, 0
  %2151 = load i32, ptr %256, align 4, !tbaa !11
  %2152 = getelementptr inbounds i8, ptr %256, i64 4
  %2153 = load i32, ptr %2152, align 4, !tbaa !11
  br i1 %2150, label %2154, label %2164

2154:                                             ; preds = %2143
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %167) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %168) #9
  %2155 = load i32, ptr %2144, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %168, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2155, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA44_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %167, ptr noundef nonnull align 8 dereferenceable(32) %168, ptr noundef nonnull align 1 dereferenceable(44) @.str.1050)
          to label %2156 unwind label %2159

2156:                                             ; preds = %2154
  %2157 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2151, i32 noundef %2153, ptr noundef nonnull align 8 dereferenceable(32) %167, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2158 unwind label %2161

2158:                                             ; preds = %2156
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %168) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %167) #9
  br label %2874

2159:                                             ; preds = %2154
  %2160 = landingpad { ptr, i32 }
          cleanup
  br label %2163

2161:                                             ; preds = %2156
  %2162 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #9
  br label %2163

2163:                                             ; preds = %2161, %2159
  %.pn1291 = phi { ptr, i32 } [ %2162, %2161 ], [ %2160, %2159 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %168) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %167) #9
  br label %2876

2164:                                             ; preds = %2143
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %169) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %170) #9
  %2165 = load i32, ptr %2144, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %170, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2165, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA44_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %169, ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 1 dereferenceable(44) @.str.1051)
          to label %2166 unwind label %2169

2166:                                             ; preds = %2164
  %2167 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2151, i32 noundef %2153, ptr noundef nonnull align 8 dereferenceable(32) %169, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2168 unwind label %2171

2168:                                             ; preds = %2166
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %170) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %169) #9
  br label %2874

2169:                                             ; preds = %2164
  %2170 = landingpad { ptr, i32 }
          cleanup
  br label %2173

2171:                                             ; preds = %2166
  %2172 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #9
  br label %2173

2173:                                             ; preds = %2171, %2169
  %.pn1289 = phi { ptr, i32 } [ %2172, %2171 ], [ %2170, %2169 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %170) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %169) #9
  br label %2876

2174:                                             ; preds = %2
  %2175 = getelementptr inbounds i8, ptr %256, i64 8
  %2176 = load i32, ptr %2175, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2176)
  %2177 = getelementptr inbounds i8, ptr %256, i64 12
  %2178 = load i32, ptr %2177, align 4, !tbaa !11
  %2179 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2178)
  %2180 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2179, i32 noundef 0, i32 noundef 0)
  %2181 = icmp eq i32 %2180, 0
  %2182 = load i32, ptr %256, align 4, !tbaa !11
  %2183 = getelementptr inbounds i8, ptr %256, i64 4
  %2184 = load i32, ptr %2183, align 4, !tbaa !11
  br i1 %2181, label %2185, label %2195

2185:                                             ; preds = %2174
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %171) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %172) #9
  %2186 = load i32, ptr %2175, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %172, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2186, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %171, ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull align 1 dereferenceable(30) @.str.1052)
          to label %2187 unwind label %2190

2187:                                             ; preds = %2185
  %2188 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2182, i32 noundef %2184, ptr noundef nonnull align 8 dereferenceable(32) %171, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2189 unwind label %2192

2189:                                             ; preds = %2187
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %172) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %171) #9
  br label %2874

2190:                                             ; preds = %2185
  %2191 = landingpad { ptr, i32 }
          cleanup
  br label %2194

2192:                                             ; preds = %2187
  %2193 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #9
  br label %2194

2194:                                             ; preds = %2192, %2190
  %.pn1287 = phi { ptr, i32 } [ %2193, %2192 ], [ %2191, %2190 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %172) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %171) #9
  br label %2876

2195:                                             ; preds = %2174
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %173) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %174) #9
  %2196 = load i32, ptr %2175, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %174, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2196, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %173, ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 1 dereferenceable(30) @.str.1053)
          to label %2197 unwind label %2200

2197:                                             ; preds = %2195
  %2198 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2182, i32 noundef %2184, ptr noundef nonnull align 8 dereferenceable(32) %173, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2199 unwind label %2202

2199:                                             ; preds = %2197
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %174) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %173) #9
  br label %2874

2200:                                             ; preds = %2195
  %2201 = landingpad { ptr, i32 }
          cleanup
  br label %2204

2202:                                             ; preds = %2197
  %2203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #9
  br label %2204

2204:                                             ; preds = %2202, %2200
  %.pn1285 = phi { ptr, i32 } [ %2203, %2202 ], [ %2201, %2200 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %174) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %173) #9
  br label %2876

2205:                                             ; preds = %2
  %2206 = getelementptr inbounds i8, ptr %256, i64 8
  %2207 = load i32, ptr %2206, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2207)
  %2208 = getelementptr inbounds i8, ptr %256, i64 12
  %2209 = load i32, ptr %2208, align 4, !tbaa !11
  %2210 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2209)
  %2211 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2210, i32 noundef 0, i32 noundef 0)
  %2212 = icmp eq i32 %2211, 0
  %2213 = load i32, ptr %256, align 4, !tbaa !11
  %2214 = getelementptr inbounds i8, ptr %256, i64 4
  %2215 = load i32, ptr %2214, align 4, !tbaa !11
  br i1 %2212, label %2216, label %2226

2216:                                             ; preds = %2205
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %175) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %176) #9
  %2217 = load i32, ptr %2206, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %176, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2217, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %175, ptr noundef nonnull align 8 dereferenceable(32) %176, ptr noundef nonnull align 1 dereferenceable(29) @.str.1054)
          to label %2218 unwind label %2221

2218:                                             ; preds = %2216
  %2219 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2213, i32 noundef %2215, ptr noundef nonnull align 8 dereferenceable(32) %175, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2220 unwind label %2223

2220:                                             ; preds = %2218
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %176) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %175) #9
  br label %2874

2221:                                             ; preds = %2216
  %2222 = landingpad { ptr, i32 }
          cleanup
  br label %2225

2223:                                             ; preds = %2218
  %2224 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #9
  br label %2225

2225:                                             ; preds = %2223, %2221
  %.pn1283 = phi { ptr, i32 } [ %2224, %2223 ], [ %2222, %2221 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %176) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %175) #9
  br label %2876

2226:                                             ; preds = %2205
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %177) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %178) #9
  %2227 = load i32, ptr %2206, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %178, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2227, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %177, ptr noundef nonnull align 8 dereferenceable(32) %178, ptr noundef nonnull align 1 dereferenceable(29) @.str.1055)
          to label %2228 unwind label %2231

2228:                                             ; preds = %2226
  %2229 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2213, i32 noundef %2215, ptr noundef nonnull align 8 dereferenceable(32) %177, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2230 unwind label %2233

2230:                                             ; preds = %2228
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %177) #9
  br label %2874

2231:                                             ; preds = %2226
  %2232 = landingpad { ptr, i32 }
          cleanup
  br label %2235

2233:                                             ; preds = %2228
  %2234 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #9
  br label %2235

2235:                                             ; preds = %2233, %2231
  %.pn1281 = phi { ptr, i32 } [ %2234, %2233 ], [ %2232, %2231 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %177) #9
  br label %2876

2236:                                             ; preds = %2
  %2237 = getelementptr inbounds i8, ptr %256, i64 8
  %2238 = load i32, ptr %2237, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2238)
  %2239 = getelementptr inbounds i8, ptr %256, i64 12
  %2240 = load i32, ptr %2239, align 4, !tbaa !11
  %2241 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2240)
  %2242 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2241, i32 noundef 0, i32 noundef 0)
  %2243 = icmp eq i32 %2242, 0
  %2244 = load i32, ptr %256, align 4, !tbaa !11
  %2245 = getelementptr inbounds i8, ptr %256, i64 4
  %2246 = load i32, ptr %2245, align 4, !tbaa !11
  br i1 %2243, label %2247, label %2257

2247:                                             ; preds = %2236
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %179) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %180) #9
  %2248 = load i32, ptr %2237, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %180, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2248, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA28_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %179, ptr noundef nonnull align 8 dereferenceable(32) %180, ptr noundef nonnull align 1 dereferenceable(28) @.str.1056)
          to label %2249 unwind label %2252

2249:                                             ; preds = %2247
  %2250 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2244, i32 noundef %2246, ptr noundef nonnull align 8 dereferenceable(32) %179, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2251 unwind label %2254

2251:                                             ; preds = %2249
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %180) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %179) #9
  br label %2874

2252:                                             ; preds = %2247
  %2253 = landingpad { ptr, i32 }
          cleanup
  br label %2256

2254:                                             ; preds = %2249
  %2255 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #9
  br label %2256

2256:                                             ; preds = %2254, %2252
  %.pn1279 = phi { ptr, i32 } [ %2255, %2254 ], [ %2253, %2252 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %180) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %179) #9
  br label %2876

2257:                                             ; preds = %2236
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %181) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %182) #9
  %2258 = load i32, ptr %2237, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %182, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2258, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA28_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %181, ptr noundef nonnull align 8 dereferenceable(32) %182, ptr noundef nonnull align 1 dereferenceable(28) @.str.1057)
          to label %2259 unwind label %2262

2259:                                             ; preds = %2257
  %2260 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2244, i32 noundef %2246, ptr noundef nonnull align 8 dereferenceable(32) %181, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2261 unwind label %2264

2261:                                             ; preds = %2259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %182) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %181) #9
  br label %2874

2262:                                             ; preds = %2257
  %2263 = landingpad { ptr, i32 }
          cleanup
  br label %2266

2264:                                             ; preds = %2259
  %2265 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #9
  br label %2266

2266:                                             ; preds = %2264, %2262
  %.pn1277 = phi { ptr, i32 } [ %2265, %2264 ], [ %2263, %2262 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %182) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %181) #9
  br label %2876

2267:                                             ; preds = %2
  %2268 = getelementptr inbounds i8, ptr %256, i64 8
  %2269 = load i32, ptr %2268, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2269)
  %2270 = getelementptr inbounds i8, ptr %256, i64 12
  %2271 = load i32, ptr %2270, align 4, !tbaa !11
  %2272 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2271)
  %2273 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2272, i32 noundef 0, i32 noundef 0)
  %2274 = icmp eq i32 %2273, 0
  %2275 = load i32, ptr %256, align 4, !tbaa !11
  %2276 = getelementptr inbounds i8, ptr %256, i64 4
  %2277 = load i32, ptr %2276, align 4, !tbaa !11
  br i1 %2274, label %2278, label %2288

2278:                                             ; preds = %2267
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %183) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %184) #9
  %2279 = load i32, ptr %2268, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %184, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2279, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %183, ptr noundef nonnull align 8 dereferenceable(32) %184, ptr noundef nonnull align 1 dereferenceable(31) @.str.1058)
          to label %2280 unwind label %2283

2280:                                             ; preds = %2278
  %2281 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2275, i32 noundef %2277, ptr noundef nonnull align 8 dereferenceable(32) %183, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2282 unwind label %2285

2282:                                             ; preds = %2280
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %183) #9
  br label %2874

2283:                                             ; preds = %2278
  %2284 = landingpad { ptr, i32 }
          cleanup
  br label %2287

2285:                                             ; preds = %2280
  %2286 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #9
  br label %2287

2287:                                             ; preds = %2285, %2283
  %.pn1275 = phi { ptr, i32 } [ %2286, %2285 ], [ %2284, %2283 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %183) #9
  br label %2876

2288:                                             ; preds = %2267
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %185) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %186) #9
  %2289 = load i32, ptr %2268, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %186, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2289, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %185, ptr noundef nonnull align 8 dereferenceable(32) %186, ptr noundef nonnull align 1 dereferenceable(31) @.str.1059)
          to label %2290 unwind label %2293

2290:                                             ; preds = %2288
  %2291 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2275, i32 noundef %2277, ptr noundef nonnull align 8 dereferenceable(32) %185, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2292 unwind label %2295

2292:                                             ; preds = %2290
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %186) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %185) #9
  br label %2874

2293:                                             ; preds = %2288
  %2294 = landingpad { ptr, i32 }
          cleanup
  br label %2297

2295:                                             ; preds = %2290
  %2296 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #9
  br label %2297

2297:                                             ; preds = %2295, %2293
  %.pn1273 = phi { ptr, i32 } [ %2296, %2295 ], [ %2294, %2293 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %186) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %185) #9
  br label %2876

2298:                                             ; preds = %2
  %2299 = getelementptr inbounds i8, ptr %256, i64 8
  %2300 = load i32, ptr %2299, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2300)
  %2301 = getelementptr inbounds i8, ptr %256, i64 12
  %2302 = load i32, ptr %2301, align 4, !tbaa !11
  %2303 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2302)
  %2304 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2303, i32 noundef 0, i32 noundef 0)
  %2305 = icmp eq i32 %2304, 0
  %2306 = load i32, ptr %256, align 4, !tbaa !11
  %2307 = getelementptr inbounds i8, ptr %256, i64 4
  %2308 = load i32, ptr %2307, align 4, !tbaa !11
  br i1 %2305, label %2309, label %2319

2309:                                             ; preds = %2298
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %187) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %188) #9
  %2310 = load i32, ptr %2299, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %188, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2310, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %187, ptr noundef nonnull align 8 dereferenceable(32) %188, ptr noundef nonnull align 1 dereferenceable(43) @.str.1060)
          to label %2311 unwind label %2314

2311:                                             ; preds = %2309
  %2312 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2306, i32 noundef %2308, ptr noundef nonnull align 8 dereferenceable(32) %187, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2313 unwind label %2316

2313:                                             ; preds = %2311
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %188) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %187) #9
  br label %2874

2314:                                             ; preds = %2309
  %2315 = landingpad { ptr, i32 }
          cleanup
  br label %2318

2316:                                             ; preds = %2311
  %2317 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #9
  br label %2318

2318:                                             ; preds = %2316, %2314
  %.pn1271 = phi { ptr, i32 } [ %2317, %2316 ], [ %2315, %2314 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %188) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %187) #9
  br label %2876

2319:                                             ; preds = %2298
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %189) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %190) #9
  %2320 = load i32, ptr %2299, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %190, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2320, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %189, ptr noundef nonnull align 8 dereferenceable(32) %190, ptr noundef nonnull align 1 dereferenceable(43) @.str.1061)
          to label %2321 unwind label %2324

2321:                                             ; preds = %2319
  %2322 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2306, i32 noundef %2308, ptr noundef nonnull align 8 dereferenceable(32) %189, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2323 unwind label %2326

2323:                                             ; preds = %2321
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %189) #9
  br label %2874

2324:                                             ; preds = %2319
  %2325 = landingpad { ptr, i32 }
          cleanup
  br label %2328

2326:                                             ; preds = %2321
  %2327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #9
  br label %2328

2328:                                             ; preds = %2326, %2324
  %.pn1269 = phi { ptr, i32 } [ %2327, %2326 ], [ %2325, %2324 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %190) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %189) #9
  br label %2876

2329:                                             ; preds = %2
  %2330 = getelementptr inbounds i8, ptr %256, i64 8
  %2331 = load i32, ptr %2330, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2331)
  %2332 = getelementptr inbounds i8, ptr %256, i64 12
  %2333 = load i32, ptr %2332, align 4, !tbaa !11
  %2334 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2333)
  %2335 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2334, i32 noundef 0, i32 noundef 0)
  %2336 = icmp eq i32 %2335, 0
  %2337 = load i32, ptr %256, align 4, !tbaa !11
  %2338 = getelementptr inbounds i8, ptr %256, i64 4
  %2339 = load i32, ptr %2338, align 4, !tbaa !11
  br i1 %2336, label %2340, label %2350

2340:                                             ; preds = %2329
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %191) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %192) #9
  %2341 = load i32, ptr %2330, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %192, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2341, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %191, ptr noundef nonnull align 8 dereferenceable(32) %192, ptr noundef nonnull align 1 dereferenceable(43) @.str.1062)
          to label %2342 unwind label %2345

2342:                                             ; preds = %2340
  %2343 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2337, i32 noundef %2339, ptr noundef nonnull align 8 dereferenceable(32) %191, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2344 unwind label %2347

2344:                                             ; preds = %2342
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %192) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %191) #9
  br label %2874

2345:                                             ; preds = %2340
  %2346 = landingpad { ptr, i32 }
          cleanup
  br label %2349

2347:                                             ; preds = %2342
  %2348 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #9
  br label %2349

2349:                                             ; preds = %2347, %2345
  %.pn1267 = phi { ptr, i32 } [ %2348, %2347 ], [ %2346, %2345 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %192) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %191) #9
  br label %2876

2350:                                             ; preds = %2329
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %193) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %194) #9
  %2351 = load i32, ptr %2330, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %194, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2351, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA43_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %193, ptr noundef nonnull align 8 dereferenceable(32) %194, ptr noundef nonnull align 1 dereferenceable(43) @.str.1063)
          to label %2352 unwind label %2355

2352:                                             ; preds = %2350
  %2353 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2337, i32 noundef %2339, ptr noundef nonnull align 8 dereferenceable(32) %193, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2354 unwind label %2357

2354:                                             ; preds = %2352
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %194) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %193) #9
  br label %2874

2355:                                             ; preds = %2350
  %2356 = landingpad { ptr, i32 }
          cleanup
  br label %2359

2357:                                             ; preds = %2352
  %2358 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #9
  br label %2359

2359:                                             ; preds = %2357, %2355
  %.pn1265 = phi { ptr, i32 } [ %2358, %2357 ], [ %2356, %2355 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %194) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %193) #9
  br label %2876

2360:                                             ; preds = %2
  %2361 = getelementptr inbounds i8, ptr %256, i64 8
  %2362 = load i32, ptr %2361, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2362)
  %2363 = getelementptr inbounds i8, ptr %256, i64 12
  %2364 = load i32, ptr %2363, align 4, !tbaa !11
  %2365 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2364)
  %2366 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2365, i32 noundef 0, i32 noundef 0)
  %2367 = icmp eq i32 %2366, 0
  %2368 = load i32, ptr %256, align 4, !tbaa !11
  %2369 = getelementptr inbounds i8, ptr %256, i64 4
  %2370 = load i32, ptr %2369, align 4, !tbaa !11
  br i1 %2367, label %2371, label %2381

2371:                                             ; preds = %2360
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %195) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %196) #9
  %2372 = load i32, ptr %2361, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %196, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2372, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA38_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %195, ptr noundef nonnull align 8 dereferenceable(32) %196, ptr noundef nonnull align 1 dereferenceable(38) @.str.1064)
          to label %2373 unwind label %2376

2373:                                             ; preds = %2371
  %2374 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2368, i32 noundef %2370, ptr noundef nonnull align 8 dereferenceable(32) %195, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2375 unwind label %2378

2375:                                             ; preds = %2373
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %196) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %195) #9
  br label %2874

2376:                                             ; preds = %2371
  %2377 = landingpad { ptr, i32 }
          cleanup
  br label %2380

2378:                                             ; preds = %2373
  %2379 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #9
  br label %2380

2380:                                             ; preds = %2378, %2376
  %.pn1263 = phi { ptr, i32 } [ %2379, %2378 ], [ %2377, %2376 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %196) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %195) #9
  br label %2876

2381:                                             ; preds = %2360
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %197) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %198) #9
  %2382 = load i32, ptr %2361, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %198, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2382, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA38_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %197, ptr noundef nonnull align 8 dereferenceable(32) %198, ptr noundef nonnull align 1 dereferenceable(38) @.str.1065)
          to label %2383 unwind label %2386

2383:                                             ; preds = %2381
  %2384 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2368, i32 noundef %2370, ptr noundef nonnull align 8 dereferenceable(32) %197, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2385 unwind label %2388

2385:                                             ; preds = %2383
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %197) #9
  br label %2874

2386:                                             ; preds = %2381
  %2387 = landingpad { ptr, i32 }
          cleanup
  br label %2390

2388:                                             ; preds = %2383
  %2389 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #9
  br label %2390

2390:                                             ; preds = %2388, %2386
  %.pn1261 = phi { ptr, i32 } [ %2389, %2388 ], [ %2387, %2386 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %197) #9
  br label %2876

2391:                                             ; preds = %2
  %2392 = getelementptr inbounds i8, ptr %256, i64 8
  %2393 = load i32, ptr %2392, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2393)
  %2394 = getelementptr inbounds i8, ptr %256, i64 12
  %2395 = load i32, ptr %2394, align 4, !tbaa !11
  %2396 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2395)
  %2397 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2396, i32 noundef 0, i32 noundef 0)
  %2398 = icmp eq i32 %2397, 0
  %2399 = load i32, ptr %256, align 4, !tbaa !11
  %2400 = getelementptr inbounds i8, ptr %256, i64 4
  %2401 = load i32, ptr %2400, align 4, !tbaa !11
  br i1 %2398, label %2402, label %2412

2402:                                             ; preds = %2391
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %199) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %200) #9
  %2403 = load i32, ptr %2392, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %200, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2403, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA40_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %199, ptr noundef nonnull align 1 dereferenceable(6) @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %200, ptr noundef nonnull align 1 dereferenceable(40) @.str.1067)
          to label %2404 unwind label %2407

2404:                                             ; preds = %2402
  %2405 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2399, i32 noundef %2401, ptr noundef nonnull align 8 dereferenceable(32) %199, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2406 unwind label %2409

2406:                                             ; preds = %2404
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %200) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %199) #9
  br label %2874

2407:                                             ; preds = %2402
  %2408 = landingpad { ptr, i32 }
          cleanup
  br label %2411

2409:                                             ; preds = %2404
  %2410 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #9
  br label %2411

2411:                                             ; preds = %2409, %2407
  %.pn1259 = phi { ptr, i32 } [ %2410, %2409 ], [ %2408, %2407 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %200) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %199) #9
  br label %2876

2412:                                             ; preds = %2391
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %201) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %202) #9
  %2413 = load i32, ptr %2392, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %202, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2413, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA36_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %201, ptr noundef nonnull align 1 dereferenceable(6) @.str.1066, ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef nonnull align 1 dereferenceable(36) @.str.1068)
          to label %2414 unwind label %2417

2414:                                             ; preds = %2412
  %2415 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2399, i32 noundef %2401, ptr noundef nonnull align 8 dereferenceable(32) %201, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2416 unwind label %2419

2416:                                             ; preds = %2414
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %201) #9
  br label %2874

2417:                                             ; preds = %2412
  %2418 = landingpad { ptr, i32 }
          cleanup
  br label %2421

2419:                                             ; preds = %2414
  %2420 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #9
  br label %2421

2421:                                             ; preds = %2419, %2417
  %.pn1257 = phi { ptr, i32 } [ %2420, %2419 ], [ %2418, %2417 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %201) #9
  br label %2876

2422:                                             ; preds = %2
  %2423 = getelementptr inbounds i8, ptr %256, i64 8
  %2424 = load i32, ptr %2423, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2424)
  %2425 = getelementptr inbounds i8, ptr %256, i64 12
  %2426 = load i32, ptr %2425, align 4, !tbaa !11
  %2427 = tail call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2426)
  %2428 = tail call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2427, i32 noundef 0, i32 noundef 0)
  %2429 = icmp eq i32 %2428, 0
  %2430 = load i32, ptr %256, align 4, !tbaa !11
  %2431 = getelementptr inbounds i8, ptr %256, i64 4
  %2432 = load i32, ptr %2431, align 4, !tbaa !11
  br i1 %2429, label %2433, label %2443

2433:                                             ; preds = %2422
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %203) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %204) #9
  %2434 = load i32, ptr %2423, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %204, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2434, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA35_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %203, ptr noundef nonnull align 8 dereferenceable(32) %204, ptr noundef nonnull align 1 dereferenceable(35) @.str.1069)
          to label %2435 unwind label %2438

2435:                                             ; preds = %2433
  %2436 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2430, i32 noundef %2432, ptr noundef nonnull align 8 dereferenceable(32) %203, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2437 unwind label %2440

2437:                                             ; preds = %2435
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %203) #9
  br label %2874

2438:                                             ; preds = %2433
  %2439 = landingpad { ptr, i32 }
          cleanup
  br label %2442

2440:                                             ; preds = %2435
  %2441 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #9
  br label %2442

2442:                                             ; preds = %2440, %2438
  %.pn1255 = phi { ptr, i32 } [ %2441, %2440 ], [ %2439, %2438 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %203) #9
  br label %2876

2443:                                             ; preds = %2422
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %205) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %206) #9
  %2444 = load i32, ptr %2423, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %206, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2444, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA26_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %205, ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull align 1 dereferenceable(26) @.str.1070)
          to label %2445 unwind label %2448

2445:                                             ; preds = %2443
  %2446 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2430, i32 noundef %2432, ptr noundef nonnull align 8 dereferenceable(32) %205, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2447 unwind label %2450

2447:                                             ; preds = %2445
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %206) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %205) #9
  br label %2874

2448:                                             ; preds = %2443
  %2449 = landingpad { ptr, i32 }
          cleanup
  br label %2452

2450:                                             ; preds = %2445
  %2451 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #9
  br label %2452

2452:                                             ; preds = %2450, %2448
  %.pn1253 = phi { ptr, i32 } [ %2451, %2450 ], [ %2449, %2448 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %206) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %205) #9
  br label %2876

2453:                                             ; preds = %2
  %2454 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2454)
  %2455 = load i32, ptr %256, align 4, !tbaa !11
  %2456 = getelementptr inbounds i8, ptr %256, i64 4
  %2457 = load i32, ptr %2456, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %207) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %208) #9
  %2458 = getelementptr inbounds i8, ptr %256, i64 8
  %2459 = load i32, ptr %2458, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %208, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2459, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA40_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %207, ptr noundef nonnull align 8 dereferenceable(32) %208, ptr noundef nonnull align 1 dereferenceable(40) @.str.1071)
          to label %2460 unwind label %2463

2460:                                             ; preds = %2453
  %2461 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2455, i32 noundef %2457, ptr noundef nonnull align 8 dereferenceable(32) %207, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2462 unwind label %2465

2462:                                             ; preds = %2460
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %207) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %207) #9
  br label %2874

2463:                                             ; preds = %2453
  %2464 = landingpad { ptr, i32 }
          cleanup
  br label %2467

2465:                                             ; preds = %2460
  %2466 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %207) #9
  br label %2467

2467:                                             ; preds = %2465, %2463
  %.pn1251 = phi { ptr, i32 } [ %2466, %2465 ], [ %2464, %2463 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %207) #9
  br label %2876

2468:                                             ; preds = %2
  %2469 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2469)
  %2470 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2470)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %209) #9
  %2471 = load i32, ptr %256, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %209, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2471, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %209, ptr noundef nonnull align 1 dereferenceable(33) @.str.1072)
          to label %2472 unwind label %2473

2472:                                             ; preds = %2468
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %209) #9
  br label %2874

2473:                                             ; preds = %2468
  %2474 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %209) #9
  br label %2876

2475:                                             ; preds = %2
  %2476 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2476)
  %2477 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2477)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %210) #9
  %2478 = load i32, ptr %256, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %210, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2478, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %211) #9
  %2479 = getelementptr inbounds i8, ptr %256, i64 4
  %2480 = load i32, ptr %2479, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %211, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2480, i1 noundef zeroext true)
          to label %2481 unwind label %2483

2481:                                             ; preds = %2475
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA35_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull align 1 dereferenceable(35) @.str.1073, ptr noundef nonnull align 8 dereferenceable(32) %211, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %2482 unwind label %2485

2482:                                             ; preds = %2481
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %211) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %210) #9
  br label %2874

2483:                                             ; preds = %2475
  %2484 = landingpad { ptr, i32 }
          cleanup
  br label %2487

2485:                                             ; preds = %2481
  %2486 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #9
  br label %2487

2487:                                             ; preds = %2485, %2483
  %.pn1249 = phi { ptr, i32 } [ %2486, %2485 ], [ %2484, %2483 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %211) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %210) #9
  br label %2876

2488:                                             ; preds = %2
  %2489 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2489)
  %2490 = load i32, ptr %256, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2490)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %212) #9
  %2491 = load i32, ptr %256, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %212, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2491, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %212, ptr noundef nonnull align 1 dereferenceable(10) @.str.1074)
          to label %2492 unwind label %2493

2492:                                             ; preds = %2488
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #9
  br label %2874

2493:                                             ; preds = %2488
  %2494 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #9
  br label %2876

2495:                                             ; preds = %2, %2, %2
  %2496 = load i32, ptr %256, align 4, !tbaa !11
  %2497 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2496)
  %2498 = getelementptr inbounds i8, ptr %256, i64 8
  %2499 = load i32, ptr %2498, align 4, !tbaa !11
  %2500 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2499)
  %.not1237 = icmp eq i32 %259, 124
  br i1 %.not1237, label %2501, label %2509

2501:                                             ; preds = %2495
  %2502 = getelementptr inbounds i8, ptr %2497, i64 124
  %2503 = load i8, ptr %2502, align 4, !tbaa !239, !range !189, !noundef !190
  %2504 = trunc nuw i8 %2503 to i1
  br i1 %2504, label %2509, label %2505

2505:                                             ; preds = %2501
  %2506 = getelementptr inbounds i8, ptr %2500, i64 124
  %2507 = load i8, ptr %2506, align 4, !tbaa !239, !range !189, !noundef !190
  %2508 = trunc nuw i8 %2507 to i1
  br i1 %2508, label %2509, label %2584

2509:                                             ; preds = %2505, %2501, %2495
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %213) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #9
  %2510 = getelementptr inbounds i8, ptr %2497, i64 24
  %2511 = load i32, ptr %2510, align 8, !tbaa !198
  %2512 = icmp eq i32 %2511, 1
  %2513 = getelementptr inbounds i8, ptr %2500, i64 24
  %2514 = load i32, ptr %2513, align 8
  %2515 = icmp eq i32 %2514, 1
  %or.cond1480 = select i1 %2512, i1 %2515, i1 false
  br i1 %or.cond1480, label %2516, label %2533

2516:                                             ; preds = %2509
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %214) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %215) #9
  %2517 = load ptr, ptr %0, align 8, !tbaa !193
  %2518 = getelementptr inbounds i8, ptr %2517, i64 152
  %2519 = load ptr, ptr %2518, align 8
  invoke void %2519(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %215, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %2497, i32 noundef 0)
          to label %2520 unwind label %2525

2520:                                             ; preds = %2516
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %216) #9
  %2521 = load i32, ptr %2498, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %216, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2521, i1 noundef zeroext true)
          to label %2522 unwind label %2527

2522:                                             ; preds = %2520
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %214, ptr noundef nonnull align 1 dereferenceable(18) @.str.1075, ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %216, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2523 unwind label %2529

2523:                                             ; preds = %2522
  %2524 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %213, ptr noundef nonnull align 8 dereferenceable(32) %214) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %216) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %215) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %214) #9
  br label %2569

2525:                                             ; preds = %2516
  %2526 = landingpad { ptr, i32 }
          cleanup
  br label %2532

2527:                                             ; preds = %2520
  %2528 = landingpad { ptr, i32 }
          cleanup
  br label %2531

2529:                                             ; preds = %2522
  %2530 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #9
  br label %2531

2531:                                             ; preds = %2529, %2527
  %.pn1244 = phi { ptr, i32 } [ %2530, %2529 ], [ %2528, %2527 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %216) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  br label %2532

2532:                                             ; preds = %2531, %2525
  %.pn1244.pn = phi { ptr, i32 } [ %.pn1244, %2531 ], [ %2526, %2525 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %215) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %214) #9
  br label %2583

2533:                                             ; preds = %2509
  %2534 = icmp eq i32 %2514, 2
  br i1 %2534, label %2535, label %2552

2535:                                             ; preds = %2533
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %217) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %218) #9
  %2536 = load ptr, ptr %0, align 8, !tbaa !193
  %2537 = getelementptr inbounds i8, ptr %2536, i64 152
  %2538 = load ptr, ptr %2537, align 8
  invoke void %2538(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %218, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %2497, i32 noundef 0)
          to label %2539 unwind label %2544

2539:                                             ; preds = %2535
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %219) #9
  %2540 = load i32, ptr %2498, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %219, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2540, i1 noundef zeroext true)
          to label %2541 unwind label %2546

2541:                                             ; preds = %2539
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %217, ptr noundef nonnull align 1 dereferenceable(18) @.str.1075, ptr noundef nonnull align 8 dereferenceable(32) %218, ptr noundef nonnull align 1 dereferenceable(18) @.str.1076, ptr noundef nonnull align 8 dereferenceable(32) %219, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %2542 unwind label %2548

2542:                                             ; preds = %2541
  %2543 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %213, ptr noundef nonnull align 8 dereferenceable(32) %217) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %219) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %219) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %218) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %217) #9
  br label %2569

2544:                                             ; preds = %2535
  %2545 = landingpad { ptr, i32 }
          cleanup
  br label %2551

2546:                                             ; preds = %2539
  %2547 = landingpad { ptr, i32 }
          cleanup
  br label %2550

2548:                                             ; preds = %2541
  %2549 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %219) #9
  br label %2550

2550:                                             ; preds = %2548, %2546
  %.pn1241 = phi { ptr, i32 } [ %2549, %2548 ], [ %2547, %2546 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %219) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #9
  br label %2551

2551:                                             ; preds = %2550, %2544
  %.pn1241.pn = phi { ptr, i32 } [ %.pn1241, %2550 ], [ %2545, %2544 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %218) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %217) #9
  br label %2583

2552:                                             ; preds = %2533
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %220) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %221) #9
  %2553 = load ptr, ptr %0, align 8, !tbaa !193
  %2554 = getelementptr inbounds i8, ptr %2553, i64 152
  %2555 = load ptr, ptr %2554, align 8
  invoke void %2555(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %221, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %2497, i32 noundef 0)
          to label %2556 unwind label %2561

2556:                                             ; preds = %2552
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %222) #9
  %2557 = load i32, ptr %2498, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %222, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2557, i1 noundef zeroext true)
          to label %2558 unwind label %2563

2558:                                             ; preds = %2556
  invoke void @_ZN11spirv_cross4joinIJRA9_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA27_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %220, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %221, ptr noundef nonnull align 1 dereferenceable(27) @.str.1078, ptr noundef nonnull align 8 dereferenceable(32) %222, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %2559 unwind label %2565

2559:                                             ; preds = %2558
  %2560 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %213, ptr noundef nonnull align 8 dereferenceable(32) %220) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %220) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %222) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %222) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %221) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %221) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %220) #9
  br label %2569

2561:                                             ; preds = %2552
  %2562 = landingpad { ptr, i32 }
          cleanup
  br label %2568

2563:                                             ; preds = %2556
  %2564 = landingpad { ptr, i32 }
          cleanup
  br label %2567

2565:                                             ; preds = %2558
  %2566 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %222) #9
  br label %2567

2567:                                             ; preds = %2565, %2563
  %.pn1238 = phi { ptr, i32 } [ %2566, %2565 ], [ %2564, %2563 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %222) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %221) #9
  br label %2568

2568:                                             ; preds = %2567, %2561
  %.pn1238.pn = phi { ptr, i32 } [ %.pn1238, %2567 ], [ %2562, %2561 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %221) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %220) #9
  br label %2583

2569:                                             ; preds = %2542, %2559, %2523
  %2570 = load i32, ptr %256, align 4, !tbaa !11
  %2571 = getelementptr inbounds i8, ptr %256, i64 4
  %2572 = load i32, ptr %2571, align 4, !tbaa !11
  %2573 = load i32, ptr %2498, align 4, !tbaa !11
  %2574 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2573)
          to label %2575 unwind label %2581

2575:                                             ; preds = %2569
  %2576 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2570, i32 noundef %2572, ptr noundef nonnull align 8 dereferenceable(32) %213, i1 noundef zeroext %2574, i1 noundef zeroext false)
          to label %2577 unwind label %2581

2577:                                             ; preds = %2575
  %2578 = load i32, ptr %2571, align 4, !tbaa !11
  %2579 = load i32, ptr %2498, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2578, i32 noundef %2579)
          to label %2580 unwind label %2581

2580:                                             ; preds = %2577
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %213) #9
  br label %2874

2581:                                             ; preds = %2577, %2575, %2569
  %2582 = landingpad { ptr, i32 }
          cleanup
  br label %2583

2583:                                             ; preds = %2581, %2568, %2551, %2532
  %.pn1247 = phi { ptr, i32 } [ %2582, %2581 ], [ %.pn1244.pn, %2532 ], [ %.pn1241.pn, %2551 ], [ %.pn1238.pn, %2568 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %213) #9
  br label %2876

2584:                                             ; preds = %2505
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

2585:                                             ; preds = %2, %2, %2
  %2586 = load i32, ptr %256, align 4, !tbaa !11
  %2587 = getelementptr inbounds i8, ptr %256, i64 4
  %2588 = load i32, ptr %2587, align 4, !tbaa !11
  %2589 = getelementptr inbounds i8, ptr %256, i64 8
  %2590 = load i32, ptr %2589, align 4, !tbaa !11
  %2591 = getelementptr inbounds i8, ptr %256, i64 12
  %2592 = load i32, ptr %2591, align 4, !tbaa !11
  %2593 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2590)
  %2594 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2592)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %223) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %223) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %224) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %225) #9
  %2595 = getelementptr inbounds i8, ptr %2593, i64 24
  %2596 = load i32, ptr %2595, align 8, !tbaa !198
  store i32 %2596, ptr %225, align 4, !tbaa !11
  %2597 = getelementptr inbounds i8, ptr %1, i64 8
  %2598 = load i32, ptr %2597, align 4, !tbaa !197
  %2599 = icmp eq i32 %2598, 5
  br i1 %2599, label %2600, label %2642

2600:                                             ; preds = %2585
  %2601 = getelementptr inbounds i8, ptr %256, i64 16
  %2602 = load i32, ptr %2601, align 4, !tbaa !11
  %2603 = icmp eq i32 %2602, 0
  br i1 %2603, label %2604, label %2635

2604:                                             ; preds = %2600
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %226) #9
  %2605 = icmp eq i32 %259, 4450
  %2606 = icmp eq i32 %259, 4452
  %2607 = or i1 %2605, %2606
  %2608 = select i1 %2607, ptr @.str.1079, ptr @.str.1080
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %227) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %227) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull %2608, ptr noundef nonnull align 1 dereferenceable(1) %227)
          to label %2609 unwind label %2619

2609:                                             ; preds = %2604
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %227) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %227) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %228) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %229) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %229, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2590, i1 noundef zeroext true)
          to label %2610 unwind label %2621

2610:                                             ; preds = %2609
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %228, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %229, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2611 unwind label %2623

2611:                                             ; preds = %2610
  %2612 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef nonnull align 8 dereferenceable(32) %228) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %229) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %228) #9
  %2613 = select i1 %2605, ptr @.str.1079, ptr @.str.1080
  %2614 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull %2613)
          to label %2615 unwind label %2626

2615:                                             ; preds = %2611
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %230) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %231) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %231, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2592, i1 noundef zeroext true)
          to label %2616 unwind label %2628

2616:                                             ; preds = %2615
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %230, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %231, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2617 unwind label %2630

2617:                                             ; preds = %2616
  %2618 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef nonnull align 8 dereferenceable(32) %230) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %230) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %231) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %230) #9
  store i32 4, ptr %225, align 4, !tbaa !11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %226) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %226) #9
  br label %2673

2619:                                             ; preds = %2604
  %2620 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %227) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %227) #9
  br label %2634

2621:                                             ; preds = %2609
  %2622 = landingpad { ptr, i32 }
          cleanup
  br label %2625

2623:                                             ; preds = %2610
  %2624 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #9
  br label %2625

2625:                                             ; preds = %2623, %2621
  %.pn1224 = phi { ptr, i32 } [ %2624, %2623 ], [ %2622, %2621 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %229) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %228) #9
  br label %2633

2626:                                             ; preds = %2611
  %2627 = landingpad { ptr, i32 }
          cleanup
  br label %2633

2628:                                             ; preds = %2615
  %2629 = landingpad { ptr, i32 }
          cleanup
  br label %2632

2630:                                             ; preds = %2616
  %2631 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #9
  br label %2632

2632:                                             ; preds = %2630, %2628
  %.pn1226 = phi { ptr, i32 } [ %2631, %2630 ], [ %2629, %2628 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %231) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %230) #9
  br label %2633

2633:                                             ; preds = %2632, %2626, %2625
  %.pn1226.pn = phi { ptr, i32 } [ %.pn1226, %2632 ], [ %2627, %2626 ], [ %.pn1224, %2625 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %226) #9
  br label %2634

2634:                                             ; preds = %2633, %2619
  %.pn1226.pn.pn = phi { ptr, i32 } [ %.pn1226.pn, %2633 ], [ %2620, %2619 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %226) #9
  br label %2705

2635:                                             ; preds = %2600
  %2636 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2636, ptr noundef nonnull @.str.1081)
          to label %2637 unwind label %2638

2637:                                             ; preds = %2635
  invoke void @__cxa_throw(ptr nonnull %2636, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %2877 unwind label %2640

2638:                                             ; preds = %2635
  %2639 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %2636) #9
  br label %2705

2640:                                             ; preds = %2637
  %2641 = landingpad { ptr, i32 }
          cleanup
  br label %2705

2642:                                             ; preds = %2585
  %.not1219 = icmp eq i32 %259, 4451
  %2643 = getelementptr inbounds i8, ptr %2593, i64 20
  %2644 = load i32, ptr %2643, align 4, !tbaa !240
  br i1 %.not1219, label %2647, label %2645

2645:                                             ; preds = %2642
  %2646 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %2644)
          to label %2649 unwind label %2665

2647:                                             ; preds = %2642
  %2648 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %2644)
          to label %.thread1489 unwind label %2665

2649:                                             ; preds = %2645
  %.not1220 = icmp eq i32 %259, 4450
  br i1 %.not1220, label %2654, label %.thread1489

.thread1489:                                      ; preds = %2647, %2649
  %2650 = phi i32 [ %2646, %2649 ], [ %2648, %2647 ]
  %2651 = getelementptr inbounds i8, ptr %2594, i64 20
  %2652 = load i32, ptr %2651, align 4, !tbaa !240
  %2653 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %2652)
          to label %2658 unwind label %2667

2654:                                             ; preds = %2649
  %2655 = getelementptr inbounds i8, ptr %2594, i64 20
  %2656 = load i32, ptr %2655, align 4, !tbaa !240
  %2657 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %2656)
          to label %2658 unwind label %2667

2658:                                             ; preds = %2654, %.thread1489
  %2659 = phi i32 [ %2650, %.thread1489 ], [ %2646, %2654 ]
  %2660 = phi i32 [ %2653, %.thread1489 ], [ %2657, %2654 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %232) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %232, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2659, i32 noundef %2590)
          to label %2661 unwind label %2669

2661:                                             ; preds = %2658
  %2662 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef nonnull align 8 dereferenceable(32) %232) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %232) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %232) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %233) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %233, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2660, i32 noundef %2592)
          to label %2663 unwind label %2671

2663:                                             ; preds = %2661
  %2664 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef nonnull align 8 dereferenceable(32) %233) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %233) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %233) #9
  br label %2673

2665:                                             ; preds = %2647, %2645
  %2666 = landingpad { ptr, i32 }
          cleanup
  br label %2705

2667:                                             ; preds = %2654, %.thread1489
  %2668 = landingpad { ptr, i32 }
          cleanup
  br label %2705

2669:                                             ; preds = %2658
  %2670 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %232) #9
  br label %2705

2671:                                             ; preds = %2661
  %2672 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %233) #9
  br label %2705

2673:                                             ; preds = %2663, %2617
  %2674 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2586)
          to label %2675 unwind label %2692

2675:                                             ; preds = %2673
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %234) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %235) #9
  %2676 = load ptr, ptr %0, align 8, !tbaa !193
  %2677 = getelementptr inbounds i8, ptr %2676, i64 152
  %2678 = load ptr, ptr %2677, align 8
  invoke void %2678(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %235, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %2674, i32 noundef 0)
          to label %2679 unwind label %2694

2679:                                             ; preds = %2675
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %234, ptr noundef nonnull align 8 dereferenceable(32) %235, ptr noundef nonnull align 4 dereferenceable(4) %225)
          to label %2680 unwind label %2696

2680:                                             ; preds = %2679
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %235) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %236) #9
  invoke void @_ZN11spirv_cross4joinIJRA12_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA5_S1_SA_SC_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %236, ptr noundef nonnull align 1 dereferenceable(12) @.str.1082, ptr noundef nonnull align 8 dereferenceable(32) %234, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef nonnull align 1 dereferenceable(5) @.str.1083, ptr noundef nonnull align 8 dereferenceable(32) %234, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %2681 unwind label %2699

2681:                                             ; preds = %2680
  %2682 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2590)
          to label %2683 unwind label %2701

2683:                                             ; preds = %2681
  br i1 %2682, label %2684, label %2686

2684:                                             ; preds = %2683
  %2685 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2592)
          to label %2686 unwind label %2701

2686:                                             ; preds = %2684, %2683
  %2687 = phi i1 [ false, %2683 ], [ %2685, %2684 ]
  %2688 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2586, i32 noundef %2588, ptr noundef nonnull align 8 dereferenceable(32) %236, i1 noundef zeroext %2687, i1 noundef zeroext false)
          to label %2689 unwind label %2701

2689:                                             ; preds = %2686
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2588, i32 noundef %2590)
          to label %2690 unwind label %2701

2690:                                             ; preds = %2689
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2588, i32 noundef %2592)
          to label %2691 unwind label %2701

2691:                                             ; preds = %2690
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %236) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %236) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %234) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %234) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %225) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %224) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %223) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %223) #9
  br label %2874

2692:                                             ; preds = %2673
  %2693 = landingpad { ptr, i32 }
          cleanup
  br label %2705

2694:                                             ; preds = %2675
  %2695 = landingpad { ptr, i32 }
          cleanup
  br label %2698

2696:                                             ; preds = %2679
  %2697 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  br label %2698

2698:                                             ; preds = %2696, %2694
  %.pn1230 = phi { ptr, i32 } [ %2697, %2696 ], [ %2695, %2694 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %235) #9
  br label %2704

2699:                                             ; preds = %2680
  %2700 = landingpad { ptr, i32 }
          cleanup
  br label %2703

2701:                                             ; preds = %2690, %2689, %2686, %2684, %2681
  %2702 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %236) #9
  br label %2703

2703:                                             ; preds = %2701, %2699
  %.pn1232 = phi { ptr, i32 } [ %2702, %2701 ], [ %2700, %2699 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %236) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %234) #9
  br label %2704

2704:                                             ; preds = %2703, %2698
  %.pn1232.pn = phi { ptr, i32 } [ %.pn1232, %2703 ], [ %.pn1230, %2698 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %234) #9
  br label %2705

2705:                                             ; preds = %2692, %2704, %2665, %2671, %2669, %2667, %2640, %2638, %2634
  %.pn1232.pn.pn.pn = phi { ptr, i32 } [ %.pn1226.pn.pn, %2634 ], [ %2641, %2640 ], [ %2639, %2638 ], [ %2666, %2665 ], [ %2672, %2671 ], [ %2670, %2669 ], [ %2668, %2667 ], [ %.pn1232.pn, %2704 ], [ %2693, %2692 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %225) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %224) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %223) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %223) #9
  br label %2876

2706:                                             ; preds = %2, %2, %2
  %2707 = load i32, ptr %256, align 4, !tbaa !11
  %2708 = getelementptr inbounds i8, ptr %256, i64 4
  %2709 = load i32, ptr %2708, align 4, !tbaa !11
  %2710 = getelementptr inbounds i8, ptr %256, i64 8
  %2711 = load i32, ptr %2710, align 4, !tbaa !11
  %2712 = getelementptr inbounds i8, ptr %256, i64 12
  %2713 = load i32, ptr %2712, align 4, !tbaa !11
  %2714 = getelementptr inbounds i8, ptr %256, i64 16
  %2715 = load i32, ptr %2714, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %237) #9
  %2716 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2711)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %237, ptr noundef nonnull align 8 dereferenceable(336) %2716)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %238) #9
  %2717 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2713)
          to label %2718 unwind label %2744

2718:                                             ; preds = %2706
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %238, ptr noundef nonnull align 8 dereferenceable(336) %2717)
          to label %2719 unwind label %2744

2719:                                             ; preds = %2718
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %239) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %240) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #9
  %2720 = getelementptr inbounds i8, ptr %1, i64 8
  %2721 = load i32, ptr %2720, align 4, !tbaa !197
  %2722 = icmp eq i32 %2721, 6
  br i1 %2722, label %2723, label %2769

2723:                                             ; preds = %2719
  %2724 = getelementptr inbounds i8, ptr %256, i64 20
  %2725 = load i32, ptr %2724, align 4, !tbaa !11
  %2726 = icmp eq i32 %2725, 0
  br i1 %2726, label %2727, label %2762

2727:                                             ; preds = %2723
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %241) #9
  %2728 = icmp eq i32 %259, 4453
  %2729 = icmp eq i32 %259, 4455
  %2730 = or i1 %2728, %2729
  %2731 = select i1 %2730, ptr @.str.1079, ptr @.str.1080
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %242) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %242) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull %2731, ptr noundef nonnull align 1 dereferenceable(1) %242)
          to label %2732 unwind label %2746

2732:                                             ; preds = %2727
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %242) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %242) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %243) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %244) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %244, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2711, i1 noundef zeroext true)
          to label %2733 unwind label %2748

2733:                                             ; preds = %2732
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %243, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %244, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2734 unwind label %2750

2734:                                             ; preds = %2733
  %2735 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %239, ptr noundef nonnull align 8 dereferenceable(32) %243) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %243) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %243) #9
  %2736 = select i1 %2728, ptr @.str.1079, ptr @.str.1080
  %2737 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull %2736)
          to label %2738 unwind label %2753

2738:                                             ; preds = %2734
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %245) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %246) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %246, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2713, i1 noundef zeroext true)
          to label %2739 unwind label %2755

2739:                                             ; preds = %2738
  invoke void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %245, ptr noundef nonnull align 1 dereferenceable(9) @.str.1077, ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull align 1 dereferenceable(3) @.str.1017, ptr noundef nonnull align 8 dereferenceable(32) %246, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2740 unwind label %2757

2740:                                             ; preds = %2739
  %2741 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 8 dereferenceable(32) %245) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %245) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %246) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %246) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %245) #9
  %2742 = getelementptr inbounds i8, ptr %237, i64 24
  store i32 4, ptr %2742, align 8, !tbaa !198
  %2743 = getelementptr inbounds i8, ptr %238, i64 24
  store i32 4, ptr %2743, align 8, !tbaa !198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %241) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %241) #9
  br label %2800

2744:                                             ; preds = %2718, %2706
  %2745 = landingpad { ptr, i32 }
          cleanup
  br label %2859

2746:                                             ; preds = %2727
  %2747 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %242) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %242) #9
  br label %2761

2748:                                             ; preds = %2732
  %2749 = landingpad { ptr, i32 }
          cleanup
  br label %2752

2750:                                             ; preds = %2733
  %2751 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %244) #9
  br label %2752

2752:                                             ; preds = %2750, %2748
  %.pn1201 = phi { ptr, i32 } [ %2751, %2750 ], [ %2749, %2748 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %244) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %243) #9
  br label %2760

2753:                                             ; preds = %2734
  %2754 = landingpad { ptr, i32 }
          cleanup
  br label %2760

2755:                                             ; preds = %2738
  %2756 = landingpad { ptr, i32 }
          cleanup
  br label %2759

2757:                                             ; preds = %2739
  %2758 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %246) #9
  br label %2759

2759:                                             ; preds = %2757, %2755
  %.pn1203 = phi { ptr, i32 } [ %2758, %2757 ], [ %2756, %2755 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %246) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %245) #9
  br label %2760

2760:                                             ; preds = %2759, %2753, %2752
  %.pn1203.pn = phi { ptr, i32 } [ %.pn1203, %2759 ], [ %2754, %2753 ], [ %.pn1201, %2752 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %241) #9
  br label %2761

2761:                                             ; preds = %2760, %2746
  %.pn1203.pn.pn = phi { ptr, i32 } [ %.pn1203.pn, %2760 ], [ %2747, %2746 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %241) #9
  br label %2858

2762:                                             ; preds = %2723
  %2763 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2763, ptr noundef nonnull @.str.1081)
          to label %2764 unwind label %2765

2764:                                             ; preds = %2762
  invoke void @__cxa_throw(ptr nonnull %2763, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %2877 unwind label %2767

2765:                                             ; preds = %2762
  %2766 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %2763) #9
  br label %2858

2767:                                             ; preds = %2764
  %2768 = landingpad { ptr, i32 }
          cleanup
  br label %2858

2769:                                             ; preds = %2719
  %.not = icmp eq i32 %259, 4454
  %2770 = getelementptr inbounds i8, ptr %237, i64 20
  %2771 = load i32, ptr %2770, align 4, !tbaa !240
  br i1 %.not, label %2774, label %2772

2772:                                             ; preds = %2769
  %2773 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %2771)
          to label %2776 unwind label %2792

2774:                                             ; preds = %2769
  %2775 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %2771)
          to label %.thread1491 unwind label %2792

2776:                                             ; preds = %2772
  %.not1197 = icmp eq i32 %259, 4453
  br i1 %.not1197, label %2781, label %.thread1491

.thread1491:                                      ; preds = %2774, %2776
  %2777 = phi i32 [ %2773, %2776 ], [ %2775, %2774 ]
  %2778 = getelementptr inbounds i8, ptr %238, i64 20
  %2779 = load i32, ptr %2778, align 4, !tbaa !240
  %2780 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %2779)
          to label %2785 unwind label %2794

2781:                                             ; preds = %2776
  %2782 = getelementptr inbounds i8, ptr %238, i64 20
  %2783 = load i32, ptr %2782, align 4, !tbaa !240
  %2784 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %2783)
          to label %2785 unwind label %2794

2785:                                             ; preds = %2781, %.thread1491
  %2786 = phi i32 [ %2777, %.thread1491 ], [ %2773, %2781 ]
  %2787 = phi i32 [ %2780, %.thread1491 ], [ %2784, %2781 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %247) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %247, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2786, i32 noundef %2711)
          to label %2788 unwind label %2796

2788:                                             ; preds = %2785
  %2789 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %239, ptr noundef nonnull align 8 dereferenceable(32) %247) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %247) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %247) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %248) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %248, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2787, i32 noundef %2713)
          to label %2790 unwind label %2798

2790:                                             ; preds = %2788
  %2791 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 8 dereferenceable(32) %248) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %248) #9
  br label %2800

2792:                                             ; preds = %2774, %2772
  %2793 = landingpad { ptr, i32 }
          cleanup
  br label %2858

2794:                                             ; preds = %2781, %.thread1491
  %2795 = landingpad { ptr, i32 }
          cleanup
  br label %2858

2796:                                             ; preds = %2785
  %2797 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %247) #9
  br label %2858

2798:                                             ; preds = %2788
  %2799 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %248) #9
  br label %2858

2800:                                             ; preds = %2790, %2740
  %2801 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2707)
          to label %2802 unwind label %2837

2802:                                             ; preds = %2800
  %.not1207 = icmp eq i32 %259, 4454
  %2803 = getelementptr inbounds i8, ptr %2801, i64 20
  %2804 = load i32, ptr %2803, align 4, !tbaa !240
  br i1 %.not1207, label %2807, label %2805

2805:                                             ; preds = %2802
  %2806 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %2804)
          to label %2809 unwind label %2839

2807:                                             ; preds = %2802
  %2808 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %2804)
          to label %2809 unwind label %2839

2809:                                             ; preds = %2807, %2805
  %2810 = phi i32 [ %2806, %2805 ], [ %2808, %2807 ]
  %2811 = getelementptr inbounds i8, ptr %237, i64 16
  store i32 %2810, ptr %2811, align 8, !tbaa !12
  %2812 = getelementptr inbounds i8, ptr %238, i64 16
  store i32 %2810, ptr %2812, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %249) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %250) #9
  %2813 = load ptr, ptr %0, align 8, !tbaa !193
  %2814 = getelementptr inbounds i8, ptr %2813, i64 152
  %2815 = load ptr, ptr %2814, align 8
  invoke void %2815(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %250, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %2801, i32 noundef 0)
          to label %2816 unwind label %2841

2816:                                             ; preds = %2809
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %251) #9
  %2817 = load ptr, ptr %0, align 8, !tbaa !193
  %2818 = getelementptr inbounds i8, ptr %2817, i64 152
  %2819 = load ptr, ptr %2818, align 8
  invoke void %2819(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %251, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %237, i32 noundef 0)
          to label %2820 unwind label %2843

2820:                                             ; preds = %2816
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %252) #9
  %2821 = load ptr, ptr %0, align 8, !tbaa !193
  %2822 = getelementptr inbounds i8, ptr %2821, i64 152
  %2823 = load ptr, ptr %2822, align 8
  invoke void %2823(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %252, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %238, i32 noundef 0)
          to label %2824 unwind label %2845

2824:                                             ; preds = %2820
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %253) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %253, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2810, i32 noundef %2715)
          to label %2825 unwind label %2847

2825:                                             ; preds = %2824
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcS6_RA2_S7_RS6_RA5_S7_S6_SB_SC_SE_S6_RA3_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %249, ptr noundef nonnull align 8 dereferenceable(32) %250, ptr noundef nonnull align 1 dereferenceable(20) @.str.1084, ptr noundef nonnull align 8 dereferenceable(32) %251, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %239, ptr noundef nonnull align 1 dereferenceable(5) @.str.1083, ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 1 dereferenceable(5) @.str.1085, ptr noundef nonnull align 8 dereferenceable(32) %253, ptr noundef nonnull align 1 dereferenceable(3) @.str.1028)
          to label %2826 unwind label %2849

2826:                                             ; preds = %2825
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %253) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %253) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %252) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %251) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %250) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %250) #9
  %2827 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2711)
          to label %2828 unwind label %2855

2828:                                             ; preds = %2826
  br i1 %2827, label %2829, label %2831

2829:                                             ; preds = %2828
  %2830 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2713)
          to label %2831 unwind label %2855

2831:                                             ; preds = %2829, %2828
  %2832 = phi i1 [ false, %2828 ], [ %2830, %2829 ]
  %2833 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2707, i32 noundef %2709, ptr noundef nonnull align 8 dereferenceable(32) %249, i1 noundef zeroext %2832, i1 noundef zeroext false)
          to label %2834 unwind label %2855

2834:                                             ; preds = %2831
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2709, i32 noundef %2711)
          to label %2835 unwind label %2855

2835:                                             ; preds = %2834
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2709, i32 noundef %2713)
          to label %2836 unwind label %2855

2836:                                             ; preds = %2835
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %249) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %249) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %240) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %239) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %238) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %238) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %237) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %237) #9
  br label %2874

2837:                                             ; preds = %2800
  %2838 = landingpad { ptr, i32 }
          cleanup
  br label %2858

2839:                                             ; preds = %2807, %2805
  %2840 = landingpad { ptr, i32 }
          cleanup
  br label %2858

2841:                                             ; preds = %2809
  %2842 = landingpad { ptr, i32 }
          cleanup
  br label %2854

2843:                                             ; preds = %2816
  %2844 = landingpad { ptr, i32 }
          cleanup
  br label %2853

2845:                                             ; preds = %2820
  %2846 = landingpad { ptr, i32 }
          cleanup
  br label %2852

2847:                                             ; preds = %2824
  %2848 = landingpad { ptr, i32 }
          cleanup
  br label %2851

2849:                                             ; preds = %2825
  %2850 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %253) #9
  br label %2851

2851:                                             ; preds = %2849, %2847
  %.pn1208 = phi { ptr, i32 } [ %2850, %2849 ], [ %2848, %2847 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %253) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #9
  br label %2852

2852:                                             ; preds = %2851, %2845
  %.pn1208.pn = phi { ptr, i32 } [ %.pn1208, %2851 ], [ %2846, %2845 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %252) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #9
  br label %2853

2853:                                             ; preds = %2852, %2843
  %.pn1208.pn.pn = phi { ptr, i32 } [ %.pn1208.pn, %2852 ], [ %2844, %2843 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %251) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %250) #9
  br label %2854

2854:                                             ; preds = %2853, %2841
  %.pn1208.pn.pn.pn = phi { ptr, i32 } [ %.pn1208.pn.pn, %2853 ], [ %2842, %2841 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %250) #9
  br label %2857

2855:                                             ; preds = %2835, %2834, %2831, %2829, %2826
  %2856 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %249) #9
  br label %2857

2857:                                             ; preds = %2855, %2854
  %.pn1213 = phi { ptr, i32 } [ %2856, %2855 ], [ %.pn1208.pn.pn.pn, %2854 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %249) #9
  br label %2858

2858:                                             ; preds = %2837, %2857, %2839, %2792, %2798, %2796, %2794, %2767, %2765, %2761
  %.pn1213.pn.pn.pn = phi { ptr, i32 } [ %.pn1203.pn.pn, %2761 ], [ %2768, %2767 ], [ %2766, %2765 ], [ %2793, %2792 ], [ %2799, %2798 ], [ %2797, %2796 ], [ %2795, %2794 ], [ %2838, %2837 ], [ %.pn1213, %2857 ], [ %2840, %2839 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %240) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %239) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %238) #9
  br label %2859

2859:                                             ; preds = %2858, %2744
  %.pn1213.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1213.pn.pn.pn, %2858 ], [ %2745, %2744 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %238) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %237) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %237) #9
  br label %2876

2860:                                             ; preds = %2
  %2861 = getelementptr inbounds i8, ptr %0, i64 9976
  %2862 = load i32, ptr %2861, align 8, !tbaa !241
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2862)
  tail call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i8 noundef zeroext 76)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %254) #9
  %2863 = load i32, ptr %256, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %254, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2863, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %255) #9
  %2864 = getelementptr inbounds i8, ptr %256, i64 4
  %2865 = load i32, ptr %2864, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %255, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2865, i1 noundef zeroext true)
          to label %2866 unwind label %2868

2866:                                             ; preds = %2860
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA61_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(61) @.str.1086, ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull align 1 dereferenceable(3) @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %255, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %2867 unwind label %2870

2867:                                             ; preds = %2866
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %255) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %255) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %254) #9
  br label %2874

2868:                                             ; preds = %2860
  %2869 = landingpad { ptr, i32 }
          cleanup
  br label %2872

2870:                                             ; preds = %2866
  %2871 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %255) #9
  br label %2872

2872:                                             ; preds = %2870, %2868
  %.pn = phi { ptr, i32 } [ %2871, %2870 ], [ %2869, %2868 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %255) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %254) #9
  br label %2876

2873:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %2874

2874:                                             ; preds = %2580, %2584, %1659, %1710, %1602, %1620, %1535, %1548, %1547, %1352, %1387, %1390, %1385, %1295, %1292, %1323, %1322, %844, %870, %279, %272, %269, %2437, %2447, %2406, %2416, %2375, %2385, %2344, %2354, %2313, %2323, %2282, %2292, %2251, %2261, %2220, %2230, %2189, %2199, %2158, %2168, %2127, %2137, %2096, %2106, %1953, %1395, %1398, %624, %632, %600, %608, %576, %584, %2873, %2867, %2836, %2691, %2492, %2482, %2472, %2462, %2075, %2060, %2045, %2030, %1996, %.critedge1475, %1915, %1898, %1873, %1849, %1841, %1833, %1825, %1817, %1811, %1805, %1801, %1795, %1765, %1558, %1468, %1457, %1391, %1349, %1337, %1266, %1234, %1202, %1112, %970, %798, %764, %754, %744, %734, %724, %714, %704, %696, %688, %677, %668, %649, %639, %559, %549, %543, %533, %523, %511, %504, %497, %490, %482, %474, %466, %458, %450, %442, %434, %426, %418, %410, %401, %392, %384, %375, %366, %358, %349, %340, %332, %323, %314, %306, %297, %289, %280
  %2875 = getelementptr inbounds i8, ptr %0, i64 11712
  store i32 %259, ptr %2875, align 8, !tbaa !232
  ret void

2876:                                             ; preds = %1670, %1693, %1721, %1738, %1299, %1320, %1316, %855, %881, %2872, %2859, %2705, %2583, %2493, %2487, %2473, %2467, %2452, %2442, %2421, %2411, %2390, %2380, %2359, %2349, %2328, %2318, %2297, %2287, %2266, %2256, %2235, %2225, %2204, %2194, %2173, %2163, %2142, %2132, %2111, %2101, %2080, %2065, %2050, %2035, %2019, %1969, %1964, %1959, %.critedge1477, %1933, %1924, %1913, %1906, %1881, %1800, %1779, %1619, %1538, %1458, %1377, %1342, %1280, %1248, %1216, %1123, %1116, %971, %796, %666
  %.pn.pn = phi { ptr, i32 } [ %.pn, %2872 ], [ %.pn1213.pn.pn.pn.pn, %2859 ], [ %.pn1232.pn.pn.pn, %2705 ], [ %.pn1247, %2583 ], [ %2494, %2493 ], [ %.pn1249, %2487 ], [ %2474, %2473 ], [ %.pn1251, %2467 ], [ %.pn1255, %2442 ], [ %.pn1253, %2452 ], [ %.pn1259, %2411 ], [ %.pn1257, %2421 ], [ %.pn1263, %2380 ], [ %.pn1261, %2390 ], [ %.pn1267, %2349 ], [ %.pn1265, %2359 ], [ %.pn1271, %2318 ], [ %.pn1269, %2328 ], [ %.pn1275, %2287 ], [ %.pn1273, %2297 ], [ %.pn1279, %2256 ], [ %.pn1277, %2266 ], [ %.pn1283, %2225 ], [ %.pn1281, %2235 ], [ %.pn1287, %2194 ], [ %.pn1285, %2204 ], [ %.pn1291, %2163 ], [ %.pn1289, %2173 ], [ %.pn1295, %2132 ], [ %.pn1293, %2142 ], [ %.pn1299, %2101 ], [ %.pn1297, %2111 ], [ %.pn1301, %2080 ], [ %.pn1303, %2065 ], [ %.pn1305, %2050 ], [ %.pn1307, %2035 ], [ %.pn1309.pn.pn.pn.pn.pn.pn, %2019 ], [ %1970, %1969 ], [ %1965, %1964 ], [ %1960, %1959 ], [ %.pn13171487, %.critedge1477 ], [ %1934, %1933 ], [ %1925, %1924 ], [ %1914, %1913 ], [ %.pn1319.pn, %1906 ], [ %.pn1322.pn, %1881 ], [ %.pn1325, %1800 ], [ %.pn1330.pn, %1779 ], [ %.pn1360.pn, %1619 ], [ %.pn1370, %1538 ], [ %.pn1376.pn, %1458 ], [ %1378, %1377 ], [ %.pn1381, %1342 ], [ %.pn1395, %1280 ], [ %.pn1401, %1248 ], [ %.pn1412.pn.pn.pn.pn, %1216 ], [ %1124, %1123 ], [ %.pn1444.pn, %1116 ], [ %.pn1457, %971 ], [ %797, %796 ], [ %667, %666 ], [ %.pn1469.pn, %855 ], [ %.pn1461.pn, %881 ], [ %1300, %1299 ], [ %.pn1385, %1316 ], [ %1321, %1320 ], [ %.pn1347.pn.pn.pn.pn.pn.pn, %1693 ], [ %.pn1343.pn.pn, %1670 ], [ %.pn1337.pn.pn.pn.pn, %1738 ], [ %.pn1333.pn.pn, %1721 ]
  resume { ptr, i32 } %.pn.pn

2877:                                             ; preds = %2764, %2637, %990
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) local_unnamed_addr #5

declare void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef) local_unnamed_addr #6

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA23_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(23), 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 noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA9_KcRS6_RA2_S7_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(9), 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_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_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(2), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

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 #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross11CompilerMSL16emit_instructionERKNS_11InstructionEENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_KcS6_RA3_S7_S6_RA2_S7_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(8), 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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL16to_function_argsB5cxx11ERKNS_12CompilerGLSL24TextureFunctionArgumentsEPb(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(74), ptr noundef) unnamed_addr #2 align 2

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

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

declare void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #5

; 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

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

; 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcRS7_RA24_S8_SB_RA3_S8_SB_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), 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(24), 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(3)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(21), 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #5 align 2

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

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

declare void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind writable sret(%"struct.spirv_cross::SPIRType") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_RS9_SB_SC_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(16), 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(3), 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_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_RjRA5_S1_SC_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL25to_buffer_size_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 dso_local void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(11), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_S1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(18), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(18), 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_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(18), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(18), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(9), 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_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjEEES6_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 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA12_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_SA_RA5_S1_SA_SC_SA_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(12), 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(5), 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(3)) local_unnamed_addr #2

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

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

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nounwind }
attributes #10 = { noreturn }
attributes #11 = { noreturn nounwind }

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

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


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